diff --git a/publications/MRL-0005 - Ring Signature Confidential Transactions for Monero/MRL-0005.tex b/publications/MRL-0005 - Ring Signature Confidential Transactions for Monero/MRL-0005.tex new file mode 100644 index 0000000..2118206 --- /dev/null +++ b/publications/MRL-0005 - Ring Signature Confidential Transactions for Monero/MRL-0005.tex @@ -0,0 +1,1500 @@ +\documentclass[12pt,english]{mrl} +\usepackage{graphicx} +\usepackage{listings} +\usepackage{cite} +\usepackage{amsthm} +\newtheorem*{example}{Example} + +\usepackage[toc,page]{appendix} + +\renewcommand{\familydefault}{\rmdefault} +\usepackage[T1]{fontenc} +\usepackage[latin9]{inputenc} +\usepackage{color} +\usepackage{babel} +\usepackage{verbatim} +\usepackage{float} +\usepackage{url} +\usepackage{amsthm} +\usepackage{amsmath} +\usepackage{amssymb} +\usepackage[unicode=true,pdfusetitle, bookmarks=true,bookmarksnumbered=false,bookmarksopen=false, breaklinks=false,pdfborder={0 0 1},backref=false,colorlinks=true]{hyperref} +\usepackage{breakurl} + + +\usepackage{amsmath} +\usepackage{amsfonts} +\usepackage{amssymb,enumerate} +\usepackage{amsthm} +\usepackage{cite} +\usepackage{comment} +\usepackage[all]{xy} +%\usepackage[notref,notcite]{showkeys} +\usepackage{hyperref} +\usepackage{todonotes} + + +\usepackage{mathtools} +\usepackage{mathrsfs} +% THEOREM ENVIRONMENTS + +\theoremstyle{definition} +\newtheorem{lem}{Lemma}[section] +\newtheorem{cor}[lem]{Corollary} +\newtheorem{prop}[lem]{Proposition} +\newtheorem{thm}[lem]{Theorem} +\newtheorem{soln}[]{Solution} +\newtheorem{conj}[lem]{Conjecture} +\newtheorem{Defn}[lem]{Definition} +\newtheorem{Ex}[lem]{Example} +\newtheorem{Question}[lem]{Question} +\newtheorem{Property}[lem]{Property} +\newtheorem{Properties}[lem]{Properties} +\newtheorem{Discussion}[lem]{Remark} +\newtheorem{Construction}[lem]{Construction} +\newtheorem{Notation}[lem]{Notation} +\newtheorem{Fact}[lem]{Fact} +\newtheorem{Notationdefinition}[lem]{Definition/Notation} +\newtheorem{Remarkdefinition}[lem]{Remark/Definition} +\newtheorem{rem}[lem]{Remark} +\newtheorem{Subprops}{}[lem] +\newtheorem{Para}[lem]{} +\newtheorem{Exer}[lem]{Exercise} +\newtheorem{Exerc}{Exercise} + +\newenvironment{defn}{\begin{Defn}\rm}{\end{Defn}} +\newenvironment{ex}{\begin{Ex}\rm}{\end{Ex}} +\newenvironment{question}{\begin{Question}\rm}{\end{Question}} +\newenvironment{property}{\begin{Property}\rm}{\end{Property}} +\newenvironment{properties}{\begin{Properties}\rm}{\end{Properties}} +\newenvironment{notation}{\begin{Notation}\rm}{\end{Notation}} +\newenvironment{fact}{\begin{Fact}\rm}{\end{Fact}} +\newenvironment{notationdefinition}{\begin{Notationdefinition}\rm}{\end{Notationdefinition}} +\newenvironment{remarkdefinition}{\begin{Remarkdefinition}\rm}{\end{Remarkdefinition}} +\newenvironment{subprops}{\begin{Subprops}\rm}{\end{Subprops}} +\newenvironment{para}{\begin{Para}\rm}{\end{Para}} +\newenvironment{disc}{\begin{Discussion}\rm}{\end{Discussion}} +\newenvironment{construction}{\begin{Construction}\rm}{\end{Construction}} +\newenvironment{exer}{\begin{Exer}\rm}{\end{Exer}} +\newenvironment{exerc}{\begin{Exerc}\rm}{\end{Exerc}} + +\newtheorem{intthm}{Theorem} +\renewcommand{\theintthm}{\Alph{intthm}} + +% COMENTS + +%\newcommand{\ssw}[1]{\footnote{#1}} +\newcommand{\nt}[2][$^\spadesuit$]{\hspace{0pt}#1\marginpar{\tt\raggedleft + #1 #2}} +\newcommand{\dw}[2][$^\spadesuit$]{\nt[#1]{DW:#2}} +\newcommand{\ssw}[2][$^\spadesuit$]{\nt[#1]{SSW:#2}} +\newcommand{\ts}[2][$^\spadesuit$]{\nt[#1]{TS:#2}} + +\newcommand{\ds}{\displaystyle} + +% CATEGORIES + +\newcommand{\A}{\mathcal{A}} +\newcommand{\D}{\mathcal{D}} +\newcommand{\R}{\mathcal{R}} +\newcommand{\cat}[1]{\mathcal{#1}} +\newcommand{\catx}{\cat{X}} +\newcommand{\caty}{\cat{Y}} +\newcommand{\catm}{\cat{M}} +\newcommand{\catv}{\cat{V}} +\newcommand{\catw}{\cat{W}} +\newcommand{\catg}{\cat{G}} +\newcommand{\catp}{\cat{P}} +\newcommand{\catf}{\cat{F}} +\newcommand{\cati}{\cat{I}} +\newcommand{\cata}{\cat{A}} +\newcommand{\catabel}{\mathcal{A}b} +\newcommand{\catc}{\cat{C}} +\newcommand{\catb}{\cat{B}} +\newcommand{\catgi}{\cat{GI}} +\newcommand{\catgp}{\cat{GP}} +\newcommand{\catgf}{\cat{GF}} +\newcommand{\catgic}{\cat{GI}_C} +\newcommand{\catgib}{\cat{GI}_B} +\newcommand{\catib}{\cat{I}_B} +\newcommand{\catgibdc}{\cat{GI}_{\bdc}} +\newcommand{\catgicd}{\cat{GI}_{C^{\dagger}}} +\newcommand{\caticd}{\cat{I}_{C^{\dagger}}} +\newcommand{\catgc}{\cat{G}_C} +\newcommand{\catgpc}{\cat{GP}_C} +\newcommand{\catgpb}{\cat{GP}_B} +\newcommand{\catgpcd}{\cat{GP}_{C^{\dagger}}} +\newcommand{\catpcd}{\cat{P}_{C^{\dagger}}} +\newcommand{\catac}{\cat{A}_C} +\newcommand{\catab}{\cat{A}_B} +\newcommand{\catbc}{\cat{B}_C} +\newcommand{\catabdc}{\cat{A}_{\bdc}} +\newcommand{\catbbdc}{\cat{B}_{\bdc}} +\newcommand{\catbb}{\cat{B}_B} +\newcommand{\catacd}{\cat{A}_{\da{C}}} +\newcommand{\catbcd}{\cat{B}_{\da{C}}} +\newcommand{\catgfc}{\cat{GF}_C} +\newcommand{\catic}{\cat{I}_C} +\newcommand{\catibdc}{\cat{I}_{\bdc}} +\newcommand{\catpb}{\cat{P}_B} +\newcommand{\catpc}{\cat{P}_C} +\newcommand{\catfc}{\cat{F}'} +\newcommand{\opg}{\cat{G}} +\newcommand{\finrescat}[1]{\operatorname{res}\comp{\cat{#1}}} +\newcommand{\proprescat}[1]{\operatorname{res}\wti{\cat{#1}}} +\newcommand{\finrescatx}{\finrescat{X}} +\newcommand{\finrescaty}{\finrescat{Y}} +\newcommand{\finrescatv}{\finrescat{V}} +\newcommand{\fincorescatggicd}{\operatorname{cores}\comp{\catg(\caticd)}} +\newcommand{\finrescatw}{\finrescat{W}} +\newcommand{\finrescatpc}{\operatorname{res}\comp{\catpc}} +\newcommand{\finrescatpcr}{\operatorname{res}\comp{\catpc(R)}} +\newcommand{\finrescatpb}{\operatorname{res}\comp{\catpb}} +\newcommand{\finrescatpbr}{\operatorname{res}\comp{\catpb(R)}} +\newcommand{\finrescatgpb}{\operatorname{res}\comp{\catgpb}} +\newcommand{\finrescatgpbr}{\operatorname{res}\comp{\catgpb(R)}} +\newcommand{\propcorescatic}{\operatorname{cores}\wti{\catic}} +\newcommand{\propcorescatgic}{\operatorname{cores}\wti{\catgic}} +\newcommand{\fincorescatic}{\operatorname{cores}\comp{\catic}} +\newcommand{\fincorescaticr}{\operatorname{cores}\comp{\catic(R)}} +\newcommand{\fincorescatir}{\operatorname{cores}\comp{\cati(R)}} +\newcommand{\finrescatp}{\finrescat{P}} +\newcommand{\proprescatgpc}{\operatorname{res}\wti{\catgpc}} +\newcommand{\fincorescaticd}{\operatorname{cores}\comp{\caticd}} +\newcommand{\finrescatgp}{\finrescat{GP}} +\newcommand{\finrescatpcd}{\operatorname{res}\comp{\catp_{\da{C}}}} +\newcommand{\fincorescatggic}{\operatorname{cores}\comp{\catg(\catic)}} +\newcommand{\fincorescatibdc}{\operatorname{cores}\comp{\catibdc}} +\newcommand{\fincorescatibdcr}{\operatorname{cores}\comp{\catibdc(R)}} +\newcommand{\fincorescatgibdc}{\operatorname{cores}\comp{\catgibdc}} +\newcommand{\fincorescatgibdcr}{\operatorname{cores}\comp{\catgibdc(R)}} +\newcommand{\fincorescatibr}{\operatorname{cores}\comp{\catib(R)}} +\newcommand{\finrescatggpc}{\operatorname{res}\comp{\catg(\catpc)}} +\newcommand{\finrescatg}{\operatorname{res}\comp{\cat{G}}(R)} +\newcommand{\finrescatgpr}{\operatorname{res}\comp{\cat{GP}(R)}} +\newcommand{\finrescatpr}{\operatorname{res}\comp{\cat{P}(R)}} +\newcommand{\finrescatgpc}{\operatorname{res}\comp{\catgp_C(R)}} +\newcommand{\proprescatpc}{\operatorname{res}\wti{\catp_C(R)}} +\newcommand{\propcorescatpc}{\operatorname{cores}\wti{\catp_C(R)}} +\newcommand{\finrescatgpcd}{\operatorname{res}\comp{\catgp_{C^{\dagger}}(R)}} +\newcommand{\proprescatp}{\proprescat{P}} +\newcommand{\proprescatgp}{\proprescat{GP}} +\newcommand{\proprescatx}{\proprescat{X}} +\newcommand{\proprescaty}{\proprescat{Y}} +\newcommand{\proprescatv}{\proprescat{V}} +\newcommand{\proprescatw}{\proprescat{W}} +\newcommand{\fincorescat}[1]{\operatorname{cores}\comp{\cat{#1}}} +\newcommand{\propcorescat}[1]{\operatorname{cores}\wti{\cat{#1}}} +\newcommand{\fincorescatx}{\fincorescat{X}} +\newcommand{\fincorescati}{\fincorescat{I}} +\newcommand{\fincorescatgi}{\fincorescat{GI}} +\newcommand{\fincorescatgir}{\fincorescat{GI(R)}} +\newcommand{\fincorescatgic}{\operatorname{cores}\comp{\catgi_C(R)}} +\newcommand{\fincorescatgicd}{\operatorname{cores}\comp{\catgi_{C^{\dagger}}(R)}} +\newcommand{\propcorescati}{\propcorescat{I}} +\newcommand{\propcorescatgi}{\propcorescat{GI}} +\newcommand{\fincorescaty}{\fincorescat{Y}} +\newcommand{\fincorescatv}{\fincorescat{V}} +\newcommand{\fincorescatw}{\fincorescat{W}} +\newcommand{\propcorescatx}{\propcorescat{X}} +\newcommand{\propcorescaty}{\propcorescat{Y}} +\newcommand{\propcorescatv}{\propcorescat{V}} +\newcommand{\propcorescatw}{\propcorescat{W}} +\newcommand{\cpltrescat}[1]{\operatorname{res}\ol{\cat{#1}}} +\newcommand{\cpltcorescat}[1]{\operatorname{cores}\ol{\cat{#1}}} +\newcommand{\cpltrescatw}{\cpltrescat{W}} +\newcommand{\cpltcorescatw}{\cpltcorescat{W}} +\newcommand{\gw}{\opg(\catw)} +\newcommand{\gnw}[1]{\opg^{#1}(\catw)} +\newcommand{\gnx}[1]{\opg^{#1}(\catx)} +\newcommand{\gx}{\opg(\catx)} +\newcommand{\catao}{\cata^o} +\newcommand{\catxo}{\catx^o} +\newcommand{\catyo}{\caty^o} +\newcommand{\catwo}{\catw^o} +\newcommand{\catvo}{\catv^o} + + +% DIMENSIONS + +\newcommand{\pdim}{\operatorname{pd}} +\newcommand{\pd}{\operatorname{pd}} +\newcommand{\gdim}{\mathrm{G}\text{-}\!\dim} +\newcommand{\gkdim}[1]{\mathrm{G}_{#1}\text{-}\!\dim} +\newcommand{\gcdim}{\gkdim{C}} +\newcommand{\injdim}{\operatorname{id}} +\newcommand{\id}{\operatorname{id}} +\newcommand{\fd}{\operatorname{fd}} +\newcommand{\fdim}{\operatorname{fd}} +\newcommand{\catpd}[1]{\cat{#1}\text{-}\pd} +\newcommand{\xpd}{\catpd{X}} +\newcommand{\xopd}{\catxo\text{-}\pd} +\newcommand{\xid}{\catid{X}} +\newcommand{\wpd}{\catpd{W}} +\newcommand{\ypd}{\catpd{Y}} +\newcommand{\gpd}{\catpd{G}} +\newcommand{\gid}{\catid{G}} +\newcommand{\catid}[1]{\cat{#1}\text{-}\id} +\newcommand{\yid}{\catid{Y}} +\newcommand{\vid}{\catid{V}} +\newcommand{\wid}{\catid{W}} +\newcommand{\pdpd}{\catpd\text{-}\pd} +\newcommand{\idid}{\catid\text{-}\id} +\newcommand{\pcpd}{\catpc\text{-}\pd} +\newcommand{\pbpd}{\catpb\text{-}\pd} +\newcommand{\icdagdim}{\caticd\text{-}\id} +\newcommand{\icdid}{\caticd\text{-}\id} +\newcommand{\ibdcid}{\catibdc\text{-}\id} +\newcommand{\icdim}{\catic\text{-}\id} +\newcommand{\icid}{\catic\text{-}\id} +\newcommand{\ibid}{\catib\text{-}\id} +\newcommand{\pcdim}{\catpc\text{-}\pd} +\newcommand{\gpcpd}{\catgpc\text{-}\pd} +\newcommand{\gfpd}{\catgf\text{-}\pd} +\newcommand{\gppd}{\catgp\text{-}\pd} +\newcommand{\gfcpd}{\catgfc\text{-}\pd} +\newcommand{\gpbpd}{\catgpb\text{-}\pd} +\newcommand{\gicid}{\catgic\text{-}\id} +\newcommand{\gibid}{\catgib\text{-}\id} +\newcommand{\gicdagdim}{\catgicd\text{-}\id} +\newcommand{\gicdid}{\catgicd\text{-}\id} +\newcommand{\ggpcpd}{\catg(\catpc)\text{-}\pd} +\newcommand{\ggicdid}{\catg(\caticd)\text{-}\id} +\newcommand{\ggicid}{\catg(\catic)\text{-}\id} +\newcommand{\cmdim}{\mathrm{CM}\text{-}\dim} +\newcommand{\cidim}{\mathrm{CI}\text{-}\!\dim} +\newcommand{\cipd}{\mathrm{CI}\text{-}\!\pd} +\newcommand{\cifd}{\mathrm{CI}\text{-}\!\fd} +\newcommand{\ciid}{\mathrm{CI}\text{-}\!\id} + + +% OTHER INVARIANTS + +\newcommand{\Ht}{\operatorname{ht}} +\newcommand{\col}{\operatorname{col}} +\newcommand{\depth}{\operatorname{depth}} +\newcommand{\rank}{\operatorname{rank}} +\newcommand{\amp}{\operatorname{amp}} +\newcommand{\edim}{\operatorname{edim}} +\newcommand{\crs}{\operatorname{crs}} +\newcommand{\rfd}{\operatorname{Rfd}} +\newcommand{\ann}{\operatorname{Ann}} +\newcommand{\mspec}{\mathrm{m}\text{\spec}} +\newcommand{\soc}{\operatorname{Soc}} +\newcommand{\len}{\operatorname{length}} +\newcommand{\type}{\operatorname{type}} +\newcommand{\dist}{\operatorname{dist}} +\newcommand{\prox}{\operatorname{\sigma}} +\newcommand{\curv}{\operatorname{curv}} +\newcommand{\icurv}{\operatorname{inj\,curv}} +\newcommand{\grade}{\operatorname{grade}} +\newcommand{\card}{\operatorname{card}} +\newcommand{\cx}{\operatorname{cx}} +\newcommand{\cmd}{\operatorname{cmd}} +\newcommand{\Span}{\operatorname{Span}} +\newcommand{\CM}{\operatorname{CM}} + +% FUNCTORS + +\newcommand{\cbc}[2]{#1(#2)} +\newcommand{\ext}{\operatorname{Ext}} +\newcommand{\rhom}{\mathbf{R}\!\operatorname{Hom}} +\newcommand{\lotimes}{\otimes^{\mathbf{L}}} +\newcommand{\HH}{\operatorname{H}} +\newcommand{\Hom}{\operatorname{Hom}} +\newcommand{\coker}{\operatorname{Coker}} +\newcommand{\spec}{\operatorname{Spec}} +\newcommand{\s}{\mathfrak{S}} +\newcommand{\tor}{\operatorname{Tor}} +\newcommand{\im}{\operatorname{Im}} +\newcommand{\shift}{\mathsf{\Sigma}} +\newcommand{\othershift}{\mathsf{\Sigma}} +\newcommand{\da}[1]{#1^{\dagger}} +\newcommand{\Cl}{\operatorname{Cl}} +\newcommand{\Pic}{\operatorname{Pic}} +\newcommand{\proj}{\operatorname{Proj}} +\newcommand{\End}{\operatorname{End}} +\newcommand{\cone}{\operatorname{Cone}} +\newcommand{\Ker}{\operatorname{Ker}} +\newcommand{\xext}{\ext_{\catx}} +\newcommand{\yext}{\ext_{\caty}} +\newcommand{\vext}{\ext_{\catv}} +\newcommand{\wext}{\ext_{\catw}} +\newcommand{\aext}{\ext_{\cata}} +\newcommand{\ahom}{\Hom_{\cata}} +\newcommand{\aoext}{\ext_{\catao}} +\newcommand{\aohom}{\Hom_{\catao}} +\newcommand{\xaext}{\ext_{\catx\!\cata}} +\newcommand{\axext}{\ext_{\cata\catx}} +\newcommand{\ayext}{\ext_{\cata\caty}} +\newcommand{\avext}{\ext_{\cata\catv}} +\newcommand{\awext}{\ext_{\cata\catw}} +\newcommand{\Qext}{\ext_{\catw \cata}} +\newcommand{\pmext}{\ext_{\catp(R)\catm(R)}} +\newcommand{\miext}{\ext_{\catm(R)\cati(R)}} +\newcommand{\Qtate}{\comp{\ext}_{\catw \cata}} +\newcommand{\awtate}{\comp{\ext}_{\cata \catw}} +\newcommand{\avtate}{\comp{\ext}_{\cata \catv}} +\newcommand{\pmtate}{\comp{\ext}_{\catp(R) \catm(R)}} +\newcommand{\mitate}{\comp{\ext}_{\catm(R) \cati(R)}} +\newcommand{\pcext}{\ext_{\catpc}} +\newcommand{\pbext}{\ext_{\catpb}} +\newcommand{\gpcext}{\ext_{\catgpc}} +\newcommand{\icext}{\ext_{\catic}} +\newcommand{\gpbext}{\ext_{\catgpb}} +\newcommand{\gibdcext}{\ext_{\catgibdc}} +\newcommand{\ibdcext}{\ext_{\catibdc}} +\newcommand{\gicext}{\ext_{\catgic}} +\newcommand{\gpext}{\ext_{\catgp}} +\newcommand{\giext}{\ext_{\catgi}} +\newcommand{\gicdext}{\ext_{\catgicd}} + +% IDEALS + +\newcommand{\ideal}[1]{\mathfrak{#1}} +\newcommand{\m}{\ideal{m}} +\newcommand{\n}{\ideal{n}} +\newcommand{\p}{\ideal{p}} +\newcommand{\q}{\ideal{q}} +\newcommand{\fa}{\ideal{a}} +\newcommand{\fb}{\ideal{b}} +\newcommand{\fN}{\ideal{N}} +\newcommand{\fs}{\ideal{s}} +\newcommand{\fr}{\ideal{r}} + +% OPERATIONS AND ACCENTS + +\newcommand{\wt}{\widetilde} +\newcommand{\ti}{\tilde} +\newcommand{\comp}[1]{\widehat{#1}} +\newcommand{\ol}{\overline} +\newcommand{\wti}{\widetilde} + +% OPERATORS + +\newcommand{\ass}{\operatorname{Ass}} +\newcommand{\supp}{\operatorname{Supp}} +\newcommand{\minh}{\operatorname{Minh}} +\newcommand{\Min}{\operatorname{Min}} + +% MATHBB + +\newcommand{\bbz}{\mathbb{Z}} +\newcommand{\bbn}{\mathbb{N}} +\newcommand{\bbq}{\mathbb{Q}} +\newcommand{\bbr}{\mathbb{R}} +\newcommand{\bbc}{\mathbb{C}} + +% ARROWS + +\newcommand{\from}{\leftarrow} +\newcommand{\xra}{\xrightarrow} +\newcommand{\xla}{\xleftarrow} +\newcommand{\onto}{\twoheadrightarrow} +\newcommand{\res}{\xra{\simeq}} + + +% MAPS + +\newcommand{\vf}{\varphi} +\newcommand{\ve}{\varepsilon} +\newcommand{\Qcomp}{\varepsilon_{\catw \cata}} +\newcommand{\awcomp}{\varepsilon_{\cata \catw}} +\newcommand{\avcomp}{\varepsilon_{\cata \catv}} +\newcommand{\xQcomp}{\vartheta_{\catx \catw \cata}} +\newcommand{\ayvcomp}{\vartheta_{\cata \caty \catv}} +\newcommand{\Qacomp}{\varkappa_{\catw \cata}} +\newcommand{\xaacomp}{\varkappa_{\catx \cata}} +\newcommand{\aaycomp}{\varkappa_{\cata\caty}} +\newcommand{\aavcomp}{\varkappa_{\cata\catv}} +\newcommand{\gpcpccomp}{\vartheta_{\catgpc\catpc}} +\newcommand{\gpcpbcomp}{\vartheta_{\catgpc\catpb}} +\newcommand{\gpcgpbcomp}{\vartheta_{\catgpc\catgpb}} +\newcommand{\gicibcomp}{\vartheta_{\catgic\catib}} +\newcommand{\gicgibcomp}{\vartheta_{\catgic\catgib}} +\newcommand{\giciccomp}{\vartheta_{\catgic\catic}} +\newcommand{\pccomp}{\varkappa_{\catpc}} +\newcommand{\gpccomp}{\varkappa_{\catgpc}} +\newcommand{\iccomp}{\varkappa_{\catic}} +\newcommand{\ibdccomp}{\varkappa_{\catibdc}} +\newcommand{\icdcomp}{\varkappa_{\caticd}} +\newcommand{\giccomp}{\varkappa_{\catgic}} + +% MISCELLANEOUS + +\newcommand{\y}{\mathbf{y}} +\newcommand{\te}{\theta} +\newcommand{\x}{\mathbf{x}} +\newcommand{\opi}{\operatorname{i}} +\newcommand{\route}{\gamma} +\newcommand{\sdc}[1]{\mathsf{#1}} +\newcommand{\nls}[1]{\mathsf{#1}} +\newcommand{\cl}{\operatorname{cl}} +\newcommand{\cls}{\operatorname{cls}} +\newcommand{\pic}{\operatorname{pic}} +\newcommand{\pics}{\operatorname{pics}} +\newcommand{\tri}{\trianglelefteq} +\newcommand{\Mod}{\operatorname{Mod}} +\newcommand{\bdc}{B^{\dagger_C}} +\newcommand{\e}{\mathbf{e}} +\newcommand{\f}{\mathbf{f}} + + +% RENEWED COMMANDS + +\renewcommand{\geq}{\geqslant} +\renewcommand{\leq}{\leqslant} +\renewcommand{\ker}{\Ker} +\renewcommand{\hom}{\Hom} + + +\newcommand{\normal}{\lhd} +\newcommand{\normaleq}{\trianglelefteqslant} +\newcommand{\homrm}[1]{\hom_{_{#1}\catm}} +\newcommand{\hommr}[1]{\hom_{\catm_{#1}}} +\newcommand{\cplx}[1]{{#1}_{\bullet}} +\newcommand{\pext}{\mathrm{P}\!\ext} +\newcommand{\pextrm}[1]{\pext_{_{#1}\catm}} +\newcommand{\pextmr}[1]{\pext_{\catm_{#1}}} +\newcommand{\iext}{\mathrm{I}\!\ext} +\newcommand{\iextrm}[1]{\iext_{_{#1}\catm}} +\newcommand{\iextmr}[1]{\iext_{\catm_{#1}}} +\newcommand{\catmod}[1]{#1\text{-mod}} +\newcommand{\modcat}[1]{\text{mod-}#1} + + +\newcommand{\lcm}{\textnormal{lcm}} +\newcommand{\diff}{\backslash} +%\setlength{\parindent}{0mm} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% LyX specific LaTeX commands. +\floatstyle{ruled} +\newfloat{algorithm}{tbp}{loa} +\providecommand{\algorithmname}{Algorithm} +\floatname{algorithm}{\protect\algorithmname} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Textclass specific LaTeX commands. +\numberwithin{equation}{section} +\numberwithin{figure}{section} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% User specified LaTeX commands. +\usepackage{algpseudocode} + +\usepackage{subcaption} + +\numberwithin{equation}{section} + + +\makeatletter + + +\makeatletter + +\newcommand{\h}{\mathcal{H}} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% LyX specific LaTeX commands. +\floatstyle{ruled} +\newfloat{algorithm}{tbp}{loa} +\providecommand{\algorithmname}{Algorithm} +\floatname{algorithm}{\protect\algorithmname} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Textclass specific LaTeX commands. +\numberwithin{equation}{section} +\numberwithin{figure}{section} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% User specified LaTeX commands. +\usepackage{algpseudocode} + +\makeatother + +\begin{document} +\begin{frontmatter} + +\begin{fmbox} +\hfill\setlength{\fboxrule}{0px}\setlength{\fboxsep}{5px}\fbox{\includegraphics[width=2in]{moneroLogo.png}} +\dochead{Research bulletin \hfill MRL-0005} +\title{Ring Confidential Transactions} +\date{February 2016} +\author[ + addressref={mrl}, + email={lab@getmonero.org shen.noether@gmx.com} +]{\fnm{Shen} \snm{Noether}} +\author[ + addressref={mrl}, + email={lab@getmonero.org} +]{\fnm{Adam} \snm{Mackenzie}} +\author[ + addressref={mrl}, + email={lab@getmonero.org} +]{\snm{Monero Core Team}} + +\address[id=mrl]{ + \orgname{Monero Research Lab} +}\end{fmbox} + + +\begin{abstractbox} +\begin{abstract} +This article introduces a method of hiding transaction amounts in +the strongly decentralized anonymous cryptocurrency Monero. Similar +to Bitcoin, Monero is a cryptocurrency which is distributed through +a proof of work ``mining'' process. The original Monero protocol +was based on CryptoNote, which uses ring signatures and one-time keys +to hide the destination and origin of transactions. Recently the technique +of using a commitment scheme to hide the amount of a transaction has +been discussed and implemented by Bitcoin Core Developer Gregory Maxwell. +In this article, a new type of ring signature, A Multi-layered Linkable +Spontaneous Anonymous Group signature is described which allows for hidden +amounts, origins and destinations of transactions with reasonable +efficiency and verifiable, trustless coin generation. Some extensions of the protocol are provided, such as Aggregate Schnorr Range Proofs, and Ring Multisignature. The author would like to note that early drafts of this were publicized in the Monero Community and on the bitcoin research irc channel. Blockchain hashed drafts are available in \cite{Snoe} showing that this work was started in Summer 2015, and completed in early October 2015. An eprint is also available at \url{http://eprint.iacr.org/2015/1098}. +\end{abstract} +\end{abstractbox} + +\end{frontmatter} + +%\maketitle + +%\tableofcontents +\section{Introduction} + + +\subsection{Spontaneous (Ad Hoc) Ring Signatures in CryptoCurrencies} + +Recall that in Bitcoin each transaction is signed by the owner of +the coins being sent and these signatures verify that the owner is +allowed to send the coins. This is entirely analogous to the signing +of a check from your bank. + +CryptoNote \cite{CN} and Ring Coin +\cite{B2} advanced this idea by using ``ring signatures'' which were originally described +in \cite{RST} as a ``digital signature that specifies a group of +possible signers such that the verifier can't tell which member actually +produced the signature.'' The idea therefore is to have the origin +pubkey of a transaction hidden in a group of pubkeys all of which contain +the same amount of coins, so that no one can tell which user actually +sent the coins. + +The original CryptoNote protocol as described in \cite{CN} +implements a slight modification of this to prevent double spends. +Namely in \cite{CN} a ``traceable ring signature,'' which is a slight modification of those described in +\cite{FS} is employed. This type of ring signature has the benefit of not allowing the owner of a coin to +sign two different ring signatures with the same pubkey without being +noticed on the blockchain. The obvious reason for this is to prevent +``double-spending'' which, in Bitcoin, refers to +spending a coin twice. Ring coin \cite{B2,B} uses a more efficient linkable +ring signature which is a slight modification of the Linkable Spontaneous +Anonymous Group signatures described in \cite{LWW}. + +One benefit of using the above types of ring signatures over other anonymizing techniques, such as CoinJoin \cite{GMc} or using coin mixing services, +is that they allow for ``spontaneous'' mixing. With CoinJoin or coin mixers, it is +similarly possible to hide the originator of a given transaction, +however these techniques in practice need some sort of centralized group manager, such as a centralized CoinJoin server, where transactions +are combined by a trusted party. In the case that the trusted party is compromised, +the anonymity of the transaction is also compromised. + +Some coins such +as Dash (originally called Darkcoin) \cite{DASH}, attempt to negate this by using a larger number +of trusted mixers (in this case masternodes) but this number is still +much smaller than the users of the coin. In contrast, with a spontaneous +ring signature, transactions can be created by the owner of a given +pubkey (this is the spontaneous, or ``ad-hoc'' property) without relying +on any trusted server, and thus providing for safer anonymity. + +One possible attack against the original CryptoNote or ring-coin protocol \cite{CN,B2} +is blockchain analysis based on the amounts sent in a given transaction. +For example, if an adversary knows that $.9$ coins have been sent +at a certain time, then they may be able to narrow down the possibilities +of the sender by looking for transactions containing $.9$ coins. +This is somewhat negated by the use of the one-time keys used in \cite{CN} +since the sender can include a number of change addresses in a transaction, +thus obfuscating the amount which has been sent with a type of ``knapsack mixing.'' However this technique +has the downside that it can create a large amount of ``dust'' transactions +on the blockchain, i.e. transactions of small amounts that take up +proportionately more space than their importance. Additionally, the +receiver of the coins may have to ``sweep'' all this dust when they +want to send it, possibly allowing for a smart adversary to keep track +of which keys go together in some manner. Furthermore, it is easy to establish an upper and lower bound on the amounts sent. + +Another downside to the original CryptoNote set-up is that it requires a given +pair of $\left(P,A\right)$ of pubkey $P$ and amount $A$ to be used in a ring +signature with other pubkeys having the same amount. For less common +amounts, this means there may be a smaller number of potential pairs +$\left(P^{\prime},A^{\prime}\right)$ available on the blockchain +with $A^{\prime}=A$ to ring signature with. Thus, in the original CryptoNote protocol, the potential anonymity set is perhaps smaller than may be desired. + Analysis of the above weaknesses is covered in \cite{mrl4}. + + +\subsection{Ring CT for Monero} + +An obvious way to negate the downsides of the CryptNote protocol, as described in the previous section, would be to implement hidden amounts for any transaction. +In this +paper, I describe a modification to the Monero protocol, a proof-of-work +cryptocurrency extending the original CryptoNote protocol, which allows the amounts sent in +a transaction to be hidden. This modification is based on the Confidential +Transactions \cite{GM} which are used on the Elements side-chain +in Bitcoin, except it allows for their use in ring signatures. Therefore, +the modification is given the obvious name of Ring Confidential Transactions for Monero. + +In order to preserve the property that coins cannot be double spent, +a generalization of the LSAG's of \cite{LWW} is described, a Multilayered Linkable +Spontaneous Anonymous Group Signature (MLSAG) which allows for combining +Confidential Transactions with a ring signature in such a way that +using multiple inputs and outputs is possible, anonymity is preserved, +and double-spending is prevented. The author notes that an essentially similar protocol was proposed by Connor Frenkenecht about a month after the second drafts of this were originally publicized. +\subsection{Strongly Decentralized Anonymous Payment Schemes} +The Ring CT protocol allows hidden amounts, origins, and destinations +for transactions which is somewhat similar to Zerocash \cite{Z}. +One possible differentiator is that the use of proof of work for coin generation +is possible with Ring CT as opposed to in ZeroCash, where it seems all coins +must be pregenerated by a trusted group. + +Note that one of the biggest innovations in Bitcoin \cite{SN}, was +the decentralized distribution model allowing anyone willing to put +their computing power to work to participate in the generation of +the currency. Some of the benefits of this type of proof-of-work include +trustless incentives for securing the network and stronger decentralization (for example, to protect against poison-pill type attacks). + +One final obvious benefit of the proof-of-work coin generation is +it makes Ring CT immune to a powerful actor somehow acquiring all the +pieces of the master key used in coin generation. Since there is an +obvious large incentive (the ability to generate free money \footnote{The author previously had assumed this would allow the unmasking of transactions as well, but the newer ZeroCash paper claims this is not possible.}) to acquire all pieces of the trusted generation +key, this is fairly important. + + +\subsection{Acknowledgements} + +I would like to thank Monero team for lots of help and discussion +in the creation of this paper and the Monero and Bitcoin Community +for support and discussion. With respect to disclosure, the author received several donations totalling between 2 and 3 bitcoins from the Monero community in gratitude for his work on this research. + + + +\section{Multilayered Linkable +Spontaneous Anonymous Group Signatures} +\label{MLSAGsection} + + + +In this section, I define the Multilayered Linkable Spontaneous Anonymous +Group signatures (MLSAG) used by the the Ring CT protocol. Note that +I define these as a general signature, and not necessarily in their +use case for Ring Confidential Transactions. An MLSAG is essentially similar to +the LSAG's described in \cite{LWW}, but rather than having a ring +signature on a set of $n$ keys, instead, an MLSAG is a ring signature +on a set of $n$ key-vectors. +\begin{defn} +\label{def:A-key-vector-is}A \textbf{key-vector} is just a collection +$\overline{y}=\left(y_{1},...,y_{r}\right)$ of public keys with corresponding +private keys $\overline{x}=\left(x_{1},...,x_{r}\right)$. +\end{defn} + +\subsection{\label{sub:BackLSAG}LWW signatures vs FS signatures} + +The ring signatures used in Monero and the original CryptoNote protocol are +derived from the traceable ring signatures of \cite{FS}. The CryptoNote \cite{CN} +ring signatures come with a ``key-image'' which means that a signer +can only sign one ring on the block-chain with a given public and +private key pair or else their transaction will be marked as invalid. Because of this, one-time keys are used in CryptoNote, +which further helps anonymity. + +In \cite{B}, Adam Back noticed that the Linkable Spontaneous Anonymous +Group (LSAG) signatures of \cite{LWW} can be modified to give a more efficient +linkable ring signature producing the same effect as the \cite{FS} +ring signatures. This modification reduces the storage cost on the +blockchain essentially in half. + +First I recall almost verbatim the modification given in \cite{B}: + +\textbf{Keygen}: Find a number of public keys $P_{i},i=0,1,...,n$ +and a secret index $j$ such that $xG=P_{j}$ where $G$ is the ed25519 +base-point and $x$ is the signers spend key. Let $I=xH_p\left(P_{j}\right)$ +where $H_p$ is a hash function returning a point \footnote{In practice $H_p(P) = Keccak(P)\cdot G$ where $G$ is the ed25519 basepoint, although note that for the commitment scheme I will use $toPoint(Keccak(P))$, hashing successively until $Keccak(P)$ returns a multiple of the basepoint.} +Let $\mathfrak{m}$ be a given message. + +\textbf{SIGN}: Let $\alpha,s_{i},\ i\neq j,\ i\in\left\{ 1,...,n\right\} $ +be random values in $\mathbb{Z}_{q}$ (the ed25519 base field). + +Compute +\[ +L_{j}=\alpha G +\] +\[ +R_{j}=\alpha H_p\left(P_{j}\right) +\] +\[ +c_{j+1}=h\left(\mathfrak{m},L_{j},R_{j}\right) +\] + where $h$ is a hash function returning a value in $\mathbb{Z}_{q}$. +Now, working successively in $j$ modulo $n$, define +\[ +L_{j+1}=s_{j+1}G+c_{j+1}P_{j+1} +\] +\[ +R_{j+1}=s_{j+1}H_p\left(P_{j+1}\right)+c_{j+1}\cdot I +\] +\[ +c_{j+2}=h\left(\mathfrak{m},\ L_{j+1},\ R_{j+1}\right) +\] +\[ +\cdots +\] +\[ +L_{j-1}=s_{j-1}G+c_{j-1}P_{j-1} +\] +\[ +R_{j-1}=s_{j-1}H_p\left(P_{j-1}\right)+c_{j-1}\cdot I +\] +\[ +c_{j}=h\left(\mathfrak{m},L_{j-1},\ R_{j-1}\right) +\] + so that $c_{1},...,c_{n}$ are defined. + +Let $s_{j}=\alpha-c_{j}\cdot x_j\ mod\ l$, ($l$ being the ed25519 +curve order) hence $\alpha=s_{j}+c_{j}x_j\ mod\ l$ so that +\[ +L_{j}=\alpha G=s_{j}G+c_{j}x_jG=s_{j}G+c_{j}P_{j} +\] +\[ +R_{j}=\alpha +H_p\left(P_{j}\right)=s_{j}H_p\left(P_{j}\right)+c_{j}I +\] +and +\[ +c_{j+1}=h\left(\mathfrak{m},\ L_{j},\ R_{j}\right) +\] + and thus, given a single $c_{i}$ value, the $P_{j}$ values, the +key image $I$, and all the $s_{j}$ values, all the other $c_{k},\ k\neq i$ +can be recovered by an observer. The signature therefore becomes: +\[ +\sigma=\left(I,c_{1},s_{1},...,s_{n}\right) +\] + which represents a space savings over \cite[4.4]{CN} where the ring signature would instead look like: + \[ +\sigma=\left(I,c_{1}, ..., c_{n},s_{1},...,s_{n}\right) +\] +\textbf{Verification }proceeds as follows. An observer computes $L_{i},R_{i},$ +and $c_{i}$ for all $i$ and checks that $c_{n+1}=c_{1}$. Then the +verifier checks that +\[ +c_{i+1}=h\left(\mathfrak{m},L_{i},R_{i}\right) +\] + for all $i\mod n$ + +\textbf{LINK}: Signatures with duplicate key images $I$ are rejected. + +Note that proofs of unforgeability, anonymity, and linkability +hold for the above protocol which are only insignificant modifications to the proofs +given in \cite{LWW}. I will give a more generalized version of these +proofs for the MLSAG's. +\subsection{\label{sub:MLSAG-Description}MLSAG Description} + + +For the Ring CT protocol, which will be described in section +\ref{sec:Ring-CT-ForMonero}, I require a generalization of the Back +LSAG signatures described in the previous section which allows for key-vectors (Definition +\ref{def:A-key-vector-is}) rather than just keys. + + +Suppose that each signer of a (generalized) ring containing $n$ +members has exactly $m$ keys $\left\{ P_{i}^{j}\right\} _{j=1,...,m}^{i=1,...,n}$. +The intent of the MLSAG ring signature is the following: +\begin{itemize} +\item To prove that one of the $n$ signers knows the secret keys to their entire key vector. +\item To enforce that if the signer uses any one of their $m$ signing keys in another MLSAG +signature, then the two rings are linked, and the second such MLSAG signature (ordered by the Monero block chain) is discarded. +\end{itemize} + +The algorithm proceeds as follows: Let $\mathfrak{m}$ be a given +message. Let $\pi$ be a secret index corresponding to the signer +of the generalized ring. For $j=1,...,m$, let $I_{j}=x_{j}H\left(P_{\pi}^{j}\right)$, +and for $j=1,...,m$, $i=1,...,\hat{\pi},...n$ (where $\hat{\pi}$ +means omit the index $\pi$) let $s_{i}^{j}$ be some random scalars (elements of $\mathbb{Z}_q$). +Now, in a manner analogous to subsection \ref{sub:BackLSAG}, +define +\[ +L_{\pi}^{j}=\alpha_{j}G +\] +\[ +R_{\pi}^{j}=\alpha_{j}H\left(P_{\pi}^{j}\right) +\] + for random scalars $\alpha_j$ and $j=1,...,m$. Now, again analogously +to section \ref{sub:BackLSAG}, set: +\[ +c_{\pi+1}=H\left(\mathfrak{m},L_{\pi}^{1},R_{\pi}^{1},...,L_{\pi}^{m},R_{\pi}^{m}\right). +\] +\[ +L_{\pi+1}^{j}=s_{\pi+1}^{j}G+c_{\pi+1}P_{\pi+1}^{j} +\] +\[ +R_{\pi+1}^{j}=s_{\pi+1}^{j}H\left(P_{\pi+1}^{j}\right)+c_{\pi+1}I_{j} +\] + and repeat this, incrementing $i$ modulo $n$ until we arrive at +\[ +L_{\pi-1}^{j}=s_{i-1}^{j}G+c_{i-1}P_{i-1}^{j} +\] +\[ +R_{\pi-1}^{j}=s_{i-1}^{j}H\left(P_{i-1}^{j}\right)+c_{i-1}\cdot I_{j} +\] +\[ +c_{\pi}=H\left(\mathfrak{m},L_{\pi-1}^{1},R_{\pi-1}^{1},...,L_{\pi-1}^{m},R_{\pi-1}^{m}\right). +\] + Finally, solve for each $s_{\pi}^{j}$ using $\alpha_{j}=s_{\pi}^{j}+c_{\pi}x_{j} \mod \ell$. +The signature is then given as $\left(I_{1},...,I_{m},c_{1},s_{1}^{1},...,s_{1}^{m},s_{2}^{1},...,s_{2}^{m},...,s_{n}^{1},...,s_{n}^{m}\right)$, +so the complexity is $O\left(m\left(n+1\right)\right).$ +Verification +proceeds by regenerating all the $L_{i}^{j},R_{i}^{j}$ starting from +$i=1$ as in section \ref{sub:BackLSAG} (which is the special case that $m=1$) and verifying +the hash $c_{n+1}=c_{1}.$ +If these are being used in a blockchain setting such as Monero, signatures with key images $I_j$ which have already appeared are then rejected. +One can easily show, in a manner similar to \cite{LWW}: +\begin{itemize} +\item The probability of a signer generating a valid signature without knowing +all ``$m$'' private keys belonging to their key vector for index $\pi$ is negligible. +\item The probability of a signer not signing for any key of index $\pi$ +is negligible. (In other words, the key images in the signature necessarily +all come from index $\pi$.) +\item If a signer signs two rings using at least one of the same public keys, then the two rings are linked. +\end{itemize} +I expand on these points below with security proofs. + + +\subsection{MLSAG Security Model} + +An MLSAG will satisfy the following three properties of Unforgeability, +Linkability, and Signer Ambiguity which are very similar to the definitions +given in \cite{LWW}. +\begin{defn} +\label{def:(Unforgeability)--An}(Unforgeability) % +{} An MLSAG signature scheme is unforgeable if for any probabilistic polynomial time (PPT) algorithm +$\mathcal{A}$ with signing oracle $\mathcal{SO}$ producing valid +signatures, given a list of $n$ public key vectors chosen by $\mathcal{A}$, +then $\mathcal{A}$ can only with negligible probability produce a +valid signature when $\mathcal{A}$ does not know one of the corresponding +private key vectors. +\end{defn} +\begin{rem} +In the following definition, note that I include rejecting duplicate +key images as part of the verification criteria for the MLSAG, which gives a slightly different Linkability definition than the one in \cite{LWW}. +\end{rem} +\begin{defn} +\label{def:(Linkability)}(Linkability) Let $L$ be the set of all +public keys in a given setting (e.g. in a given blockchain). An MLSAG signature scheme on $L$ is key-image +linked if the probability of a PPT adversary $\mathcal{A}$ creating +two signatures $\sigma,\sigma^{\prime}$ signed with respect to key-vectors +$\overline{y}$ and $\overline{y}^{\prime}$ each containing the same +public key $y_{i}=y$$_{i}^{\prime}$ in $L$ and each verifying without being marked duplicate, +is negligible. % +\end{defn} +\begin{defn} +\label{def:(Signer-Ambiguity-)}(Signer Ambiguity % +) An MLSAG signature scheme is said to be signer ambiguous if given +any verifying signature $\sigma$ on key-vectors $\left(\overline{y}_{1},...,\overline{y}_{n}\right)$ +and any set of $t$ private keys, none of the same index, nor of the +secret index, then the probability of guessing the secret key is less +than $\frac{1}{n-t}+\frac{1}{Q\left(k\right)}$ +\end{defn} +Proofs of the above definitions for the MLSAG signatures are given in the appendix. + +\section{\label{sec:Background-on-ConfidentialT}Background on Confidential +Transactions} + + +\subsection{Confidential Transactions in Bitcoin} + +In \cite{GM}, Greg Maxwell describes Confidential Transactions which +are a way to send Bitcoin transactions with the amounts hidden. The +basic idea is to use a Pedersen Commitment and the method is well +described in the cited source. In this paper I make a slight modification +the the Confidential Transactions machinery in that rather than taking +the commitments to sum to zero, I instead sign for the commitment, +to prove I know a private key. This is described in more detail in +the next section. + + +\subsection{Modification for Ring Signatures} + +Let $G$ be the ed25519 basepoint. Let\footnote{$H=MiniNero.getHForCT()$ in terms of the code at \cite{Snoe}} +\[ +H=toPoint\left(cn\_fast\_hash\left(G\right)\right) +\] +Note that not every hash gives a point in the group of the basepoint (i.e. $H=\psi G$ for some unknown $\psi$) (which is contrary to what happens in secp256k1, the curve used by Bitcoin). However, it seems that choosing the basepoint itself works (I previously used H(123456G) which seemed more secure to me, but the basepoint is certainly a more natural choice). +Choosing $H = \gamma G$ for some unknown $\gamma$ is necessary so that all the usual elliptic curve math holds. + +Under the discrete +logarithm assumption on ed25519, the probability of an adversary discovering $\gamma$ +is negligible. +Define $C\left(a,x\right)=xG+aH$, the commitment to the value $a$ +with mask $x$. Note that as long as $log_{G}H$ is unknown, and if +$a\neq0$, then $log_{G}C\left(a,x\right)$ is unknown. On the other +hand, if $a=0$, then $log_{G}C\left(a,x\right)=x$, so it is possible +to sign with sk-pk keypair $\left(x,C\left(0,x\right)\right).$ + +In \cite{GM}, there are input commitments, output commitments, and +the network checks that +\[ +\sum Inputs=\sum Outputs. +\] + However, this does not suffice in Monero: Since a given transaction +contains multiple possible inputs $P_{i},i=1,...,n$, only one of +which belong to the sender, (see \cite[4.4]{CN}), then if we are +able to check the above equality, it must be possible for the network +to see which $P_{i}$ belongs to the sender of the transaction. This +is undesirable, since it removes the anonymity provided by the ring +signatures. Thus instead, commitments for the inputs and outputs are +created as follows (suppose first that there is only one input) + +\[ +C_{in}=x_{c}G+aH +\] +\[ +C_{out-1}=y_{1}G+b_{1}H +\] +\[ +C_{out-2}=y_{2}G+b_{2}H +\] + such that $x_{c}=y_{1}+y_{2}+z$, $x_{c}-y_{1}-y_{2}=z$, $y_{i}$ +are mask values, $z>0$ and $a=b_{1}+b_{2}.$ Here $x_{c}$ is a special +private key the ``amount key'' known only to the sender, and to +the person who sent them their coins, and must be different than their +usual private key. In this case, +\[ +C_{in}-\sum_{i=1}^{2}C_{out-i} +\] +\[ +=x_{c}G+aH-y_{1}G-b_{1}H-y_{2}G-b_{2}H +\] +\[ +=zG. +\] +Thus, the above summation becomes a commitment to $0$, with $sk=z$, +and $pk=zG$, rather than an actual equation summing to zero. Note +that $z$ is not computable to the originator of $x_{c}$'s coins, +unless they know both of the $y_{1},y_{2}$, but even this can be simply mitigated by including an additional change address (the usual case is that the second commitment, with $y_2$ as mask, is sent to yourself as change). + +Since it is undesirable to show which input belongs to the sender, +a ring signature consisting of all the input commitments $C_{i},i=1,...,s,...,n$ +(where $s$ is the secret index of the commitment of the sender), +adding the corresponding pubkey (so commitments and pubkeys are paired +$\left(C_{i},P_{i}\right)$ only being allowed to be spent together) +and subtracting $\sum C_{out}$ is created: +\[ +\left\{ P_{1}+C_{1,in}-\sum_{j}C_{j,out},...,P_{s}+C_{s,in}-\sum_{j}C_{j,out},...,P_{n}+C_{n,in}-\sum_{j}C_{j,out}\right\} . +\] + This is a ring signature which can be signed since we know one of +the private keys (namely $z+x^{\prime}$ with $z$ +as above and $x^{\prime}G=P_{s}$). In fact, since we know, for each $i$, both the private key for $P_{i}$ and the private key for $P_{i}+C_{i,in}-\sum_{j}C_{j,out}$, +we can perform a signature as in section \ref{sub:MLSAG-Description}. This precise details are described in Definition \ref{RCTProtocol}. + +As noted in \cite{GM}, it is important to prove that the output amounts\footnote{Since input commitments could potentially be just inherited from the +previous transaction, it suffices to consider the output amounts.} +$b_{1},...b_{n}$ all lie in a range of positive values, e.g. $(0,2^{16}).$ +This can be accomplished essentially the same way as in \cite{GM} and is described in more detail in section \ref{AgSchnorr}. + +Finally, note that in the above, I have not made any mention of the tag-linkability property which is used in Monero and Cryptonote to prevent double-spends. The tag-linkability property here will result from combining the above discussion with the MLSAG signatures as described in Definition \ref{RCTProtocol}. + + +\section{\label{sec:Ring-CT-ForMonero}Ring CT For Monero Protocol} + + +\subsection{Protocol Description} +\begin{defn} +\label{RCTProtocol}(Tag-Linkable Ring-CT with +Multiple Inputs and One-time Keys) \end{defn} +\begin{itemize} +\item Let $\left\{ \left(P_{\pi}^{1},C_{\pi}^{1}\right),...,\left(P_{\pi}^{m},C_{\pi}^{m}\right)\right\} $ +be a collection of addresses / commitments with corresponding secret +keys $x_{j},\ j=1,...,m$. +\item Find $q+1$ collections $\left\{ \left(P_{i}^{1},C_{i}^{1}\right),...,\left(P_{i}^{m},C_{i}^{m}\right)\right\} ,i=1,...,q+1$ +which are not already tag linked in the sense of \cite[page 6]{FS}. +\item Decide on a set of output addresses $\left(Q_{i},C_{i,out}\right)$ +such that $\sum_{j=1}^{m}C_{\pi}^{j}-\sum_{i}C_{i,out}$ is a commitment +to zero. +\item Let +\[ +\mbox{\ensuremath{\mathfrak{R}}}\coloneqq\left\{ \left\{ \left(P_{1}^{1},C_{1}^{1}\right),...,\left(P_{1}^{m},C_{1}^{m}\right),\left(\sum_{j}P_{1}^{j}+\sum_{j=1}^{m}C_{1}^{j}-\sum_{i}C_{i,out}\right)\right\} ,\right. +\] +\[ +..., +\] +\[ +\left.\left\{ \left(P_{q+1}^{1},C_{q+1}^{1}\right),...,\left(P_{q+1}^{m},C_{q+1}^{m}\right),\left(\sum_{j}P_{q+1}^{j}+\sum_{j=1}^{m}C_{q+1}^{j}-\sum_{i}C_{i,out}\right)\right\} \right\} . +\] + be the generalized ring which we wish to sign. Note that the last +column is a Ring-CT ring in the sense of section \ref{sec:Ring-CT-ForMonero}. +\item Compute the MLSAG signature $\Sigma$ on $\mathfrak{R}.$ +\end{itemize} +In this case, by Theorem \ref{thm:Unforgeability}, $P_{\pi}^{j},j=1,...,m$ cannot be the signer of any +additional non-linked Ring Signatures in the given superset $\mathcal{P}$ +of all such pairs $\mathcal{P}=\left\{ \left(P,C\right)\right\} $ +after signing $\Sigma$. +\begin{rem} +Space complexity of the above protocol. Note that the size of the +signature $\Sigma$ on $\mathfrak{R}$ according to definition \ref{RCTProtocol} +is actually smaller, for $m>1$, than a current CryptoNote \cite{CN} +ring signature based transaction which includes multiple inputs. This +is because of the size improvements, given by \cite{LWW}, to each +column. Note also, it is probably not necessary to include the key-image +of the commitment entry of the above signature. Further size optimizations +are likely possible.\end{rem} + +\subsection{Conversion from Visible Denominations to Commitments} +\label{conversion} + +As Monero currently uses Blockchain visible scalars to represent amounts, it is important that there is a way to convert from visible amounts to commitments while preserving anonymity. In fact, this is not difficult. Given a pair $(P, a)$ where $P$ is a public key and $a$ represents an amount, this may be used as the input to a transaction as $(P, aH)$, and it must be checked by the verifier that the input amount $a$ multiplied by the masking point $H$, indeed gives $aH$. Thus at the first step, the input amounts will not be hidden, but the outputs of this transaction can be hidden, and all the necessary relations outlined in section \ref{sec:Ring-CT-ForMonero} hold. Note that a range proof is not necessary for such an input. +\begin{rem} +The obvious benefit of this method of converting from visible amounts to commitments is that the amount of coins generated by the mining process is trustlessly verifiable. This is an advantage of the Ring CT protocol over payment schemes such as \cite{Z} which rely on a trusted setup phase. +\end{rem} +\subsection{Transaction Fees} +As Monero is strongly decentralized (i.e. proof of work) it is necessary to pay miners a transaction fee for each transaction. This helps with the network security to prevent blockchain bloat. These fees must be paid "unmasked" i.e. just as $bH$, rather than $xG+bH$, and for some standardized amount $b$ so that the miner can verify that $b\cdot H = bH$ and thus there is enough money for the transaction fee while still having the equations in terms of $H$ so the necessary relations of section \ref{sec:Ring-CT-ForMonero} hold. +\subsection{Ring Multisignature} +Note that a simple version of a $t$ of $m$ of $n$ ring- multisignature can be done with the MLSAG signatures. This allows a group of $m$ participants to create a multi-signature such that $t$ out of $m$ must sign for the signature to be accepted as valid, and in addition, it is signer ambiguous which $m$ keys are the participants out of the $n$ keys. +\begin{itemize} + \item The $n$ participants in the multisignature create a shared secret $x_e$ and public key $P_e$ and share multisig key-images + \[ +I_j = x_e H(P_e | P_j) + \] + with $P_j$ the public key of the participant. + \item Any participant of the multisignature selects $n-m$ additional public keys on the block-chain and creates an MLSAG signature with the first row the total $n$ keys, and the second row having each entry the shared key $P_e$. + \item Each signer transmitting part of the multisignature provides the initial $I_j,\ j=1,...,m$ so that the signature is accepted after $t$ verifying signatures have been transmitted on the blockchain, each corresponding to one of the key images $I_j$. +\end{itemize} + +An expanded writeup of the ring-multisignature is in the works. + +\section{Aggregate Schnorr Range Proofs} +\label{AgSchnorr} +In \cite{GM}, the confidential transactions without ring signatures uses a type of ring signature based on \cite{abe} called a Borromean ring signature, which helps to prove a committed value lies within a certain range. In this article, I will outline an alternative method, inspired by \cite{herranz}, which has the same space savings, but perhaps simpler security proofs. The motivation for this is as follows: Suppose that a given transaction has input commitments +\[ + C_{in} = a_{in} G + 10 H +\] +and output commitments +\[ + C_{out,1} = a_{out,1} G + 5 H,\ C_{out,2} = a_{out,2} G + 5 H +\] +this scenario is valid as it is possible to sign for +\[ + C_{in} - C_{out,1} - C_{out,2} = \left(a_{in} - a_{out,1} - a_{out,2} \right) G +\] +However, note that (without range proofs) it would be possible to alternatively set output commitments +\[ + C_{out,1} = a_{out,1} G - H,\ C_{out,2} = a_{out,2} G + 11 H +\] +as $-1$ is a very large number modulo the curve group order, free money has been created. It is therefore necessary to prove that the $C_{out,i}$ are commitments to values which are positive and lie in a restricted range $[0,2^n]$ for some $n$. +To do this, one decomposes each output value into binary: +\[ + b = b_0 2^0 + b_1 2^1 + b_2 2^2 + \cdots + b_n 2^n +\] +and computes commitments $C_{out,i}^j$ to $b_j \cdot 2^j $ and such that +\[ + C_{out,i}^1 + C_{out,i}^2 + \cdots + C_{out,i}^n = C_{out,i} +\] +Finally, using secret key $b_j$, one computes a ring signature on +\[ + (C_{out,i}^j, C_{out,i}^j - 2^j H) +\] +for all $j$ and provides the $C_{out,i}^j$ to the verifying parties (in this case, the miners). + +For space savings, one can either use a Borromean ring signature (as in \cite{GM}) to combine all of these simple ring signatures, or a type of aggregate ring signature defined as follows: +\subsubsection{ Aggregate Schnorr Non-linkable Ring Signature (ASNL) Generation} +Let $(x_i^j, P_1^j, P_2^j)$ be a set of keys, $j=1,...,n$ with $x_i^j$ the secret key of $P_i^j$ +\begin{itemize} + \item For each $j$, let $i^\prime := i+1\ mod\ 2$, set $\alpha_j$ a random scalar, and compute $L_i^j = \alpha_j G$. + \item Set $c_{i^\prime}^j= H_s(L_i^j)$, where $H_s$ is a cryptographic hash function returning a scalar, and after choosing $s_{i^\prime}^j$ random, compute + \[ +L_{i^\prime}^j = s_{i^\prime} G + c_{i^\prime} H. + \] + \item Set $c_i = H_s(L_{i^\prime}^j)$ and compute + \[ + s_i^j = \alpha - c_i^j x_i \ mod\ \ell + \] + \item Return $(L_1^j, s_2^j)$ for all $j$ and $s = \sum_j s_1^j$. +\end{itemize} + +\subsubsection{ Aggregate Schnorr Non-linkable Ring Signature (ASNL) Verification} +Start with $(P_1^j, P_2^j, L_1^j, s_2^j)$ for $j=1,...,n$ and $s$. +\begin{itemize} + \item For all $j$, compute $c_2^j = H_s (L_1^j)$, $L_2^j = s_2^j G + c_2^j H$, and $c_1^j = H_s(L_2^j)$. + \item If $\sum_{j=1}^n L_1^j = s G + (c_1^j + \cdots + c_n^j) H$ then return $0$ for a valid signature. Otherwise return $-1$. +\end{itemize} + \begin{thm} + The Aggregate Schnorr Non-linkable ring signature is unforgeable under the discrete logarithm assumption. + \end{thm} +\begin{proof} + I sketch a proof in the case $n=2$. The general case is similar. Suppose that an adversary $\mathcal{A}$ is able to forge an ASNL signature on +\[ + \left\{ (x_i^1, P_1^1, P_2^1), (x_i^2, P_1^2, P_2^2) \right\} + \] + with non-negligible probability while knowing at most one of the $x_i^j$ (suppose without loss of generality that $\mathcal{A}$ knows $x_i^1$). For any given such forgery: + \[ + \{s,(P_1^j, P_2^j, L_1^j, s_2^j)\},\ j=1,2, + \] +I solve the discrete logarithm of $P_1^2$ with non-negligible probability. Following the verification algorithm, let $c_1^j = H_s\left(s_2^j G + H_s(L_1^j)H\right)$. It must then be true that +\[ + L_1^1 + L_1^2 = sG + \left(c_1^1 P_1^1 + c_1^2 P_1^2\right). +\] +Supposing that $L_1^1 = a G$ and $L_1^2 = bG$ with $a,b$ known to $\mathcal{A}$, then +\[ + aG + bG - sG - c_1^1 P_1^1 = c_1^2 P_1^2 +\] +so, as $c_1^2$ is determined by the verification protocol, it must be the case that $\mathcal{A}$ knows the private key of $P_1^2$, +\[ + x_1^2 := \frac{a+b-s-c_1^1 x_1^1}{c_1^2} \mod \ell +\] + This contradicts the discrete logarithm assumption for the given group. +\end{proof} +\subsection{Representing Amounts } +Amounts in the Ring CT protocol be represented in a similar manner as in \cite{GM}, however modified slightly to fit Monero. +CryptoNote coins organize denominations of coins into a databases of indices, so that they may be referenced in order of their appearance as inputs for ring signatures. As all values in CryptoNote coins are represented as 64-bit unsigned integers, we can use a range proof over the entire register to encode the output amount to the recipient. Beneficially, this also allows all outputs to be mixed with each other, so only a single index of outputs in order of appearance is required. A range proof of this is approximately 5 kilobytes. Ring signatures for inputs then become much more resilient to analysis, as the anonymity set is widely expanded. + +While the range proofs are large, using a transaction hashing scheme that signs the transaction "prefix" (both input indices and outputs) and stores the range proof, along with ring signatures, separately enables large amounts of space saving when syncing to a checkpoint or operating as an SPV node. Similar to Sidechains Elements \cite{El}, we would store +$H(H(prefix) || H(signatures))$ in the merkle tree. Then, nodes syncing to and trusting a checkpoint need only download the prefix and a hash of the signatures, effectively reducing the amount of bandwidth require to sync dramatically. Because the transaction prefix uses a varint for the outputs it references in its ring signatures and outputs funds to single public keys, they are miniscule in comparison to the ring signature data1in the inputs and range proofs. Later, the ring signatures may even be pruned from the database by some nodes to further save space, storing instead only the comparatively small UTXO set. +\subsubsection{Passing Amounts to Receiver} +Now, given any output amount, $b = b_0 2^0 + b_1 2^1 + \cdots b_n 2^n $, a sender computes a new private /public key pair and corresponding shared ECDH secret $ss$ and makes the following information available in their transaction: +\begin{itemize} + \item $C_j = a_j G + (b_j 2^j) H$ where $a_i$ are some random numbers for $j=0,...,n$. + \item The data $\left\{(L_1^i, s_2^j),s\right\}$. + \item ECDH public key and $a + ss\ mod\ \ell$ where $a = a_0 + \cdots + a_n$. +\end{itemize} +The receiver then: +\begin{itemize} + \item Computes their shared secret $ss$ and computes $a$ from $a + ss\ mod\ \ell$. + \item Computes $C = \sum C_i$, computes $C - aG = bH$, and finds $b$ by comparing to all $bH$ in the given range $[0, 2^n]$. (In practice this will be a quick 500 kilobyte lookup with $n = 14$ as in the previous section. If on the other hand $2^{32}$ were to be chosen as the upper limit value, as in \cite{GM}, the search would become computationally intensive). +\end{itemize} + + +\section{Conclusion} +The Ring Confidential Transactions protocol provides a strongly decentralized cryptocurrency (i.e. there is no privileged party) which has provable security estimates regarding the hiding of amounts, origins and destinations. In addition, coin generation in the Ring Confidential Transactions protocol is trustless and verifiably secure. These five factors are a necessity of a cash-like crypto-currency such as Monero. + +\bibliographystyle{plain} +\bibliography{biblio} + +\appendix + +\section{Appendix: Security Proofs} + +\subsection{MLSAG Unforgeability} + +This follows similarly to \cite[Theorem 1]{LWW}. Let $H_{1}$ and +$H_{2}$ random oracles, and $\mathcal{SO}$ be a signing oracle which +returns valid MLSAG signatures. Assume there is a probabilistic polynomial +time (PPT) adversary $\mathcal{A}$ with the ability to forge an MLSAG +from a list of key vectors $L$ with non-negligible probability +\[ +Pr\left(\mathcal{A}\left(\mathcal{L}\right)\to\left(m,\sigma\right):Ver\left(L,m,\sigma\right)=True\right)>\frac{1}{Q_{1}\left(k\right)} +\] + where $Q_{1}$ is a polynomial inputting a security parameter $k$ +and where $\left(m,\sigma\right)$ is not one of the signatures returned +by $\mathcal{S}\mathcal{O}$. Assume that $\mathcal{A}$ makes no +more than $q_{H}+nq_{S}$ (with $n$ the number of keys in $\mathcal{L}$) +queries to the signing oracles $H_{1},H_{2}$ and $\mathcal{SO}$ +respectively. The oracles $H_{1}$ and $H_{2}$ are assumed independent +and random and are consistent given duplicate queries. The signing +oracle $\mathcal{SO}$ is also allowed to query $H_{1}$ and $H_{2}$. +Given $\mathcal{A}$, I will show it is possible to create a PPT adversary +$\mathcal{M}$ which uses $\mathcal{A}$ to find the discrete logarithm +of one of the keys in $\mathcal{L}$. + +If $L$ is a set of key vectors $\left\{ \overline{y_{1}},...,\overline{y_{n}}\right\} $ +each of size $r$, (i.e. $\overline{y_{i}}=\left(y_{1}^{i},...,y_{r}^{i}\right)$ +with $y_{1},...,y_{r}$ public keys) then a forged signature +\[ +\sigma=\left(c_{1},s_{1},...,s_{n},y_{0}\right) +\] + produced by $\mathcal{A}$ must satisfy +\[ +c_{i+1}=H\left(\mathfrak{m},L_{i}^{1},R_{i}^{1},...,L_{i}^{m},R_{i}^{m}\right) +\] + where the $i$ are taken mod $n$, and the $L_{i}^{j}$, $R_{i}^{j}$ +are defined as in section \ref{sub:MLSAG-Description}. The new adversary $\mathcal{M}$ +may call $\mathcal{A}$ to forge signatures a polynomial number of +times and will record each Turing script $\mathcal{T}$ whether +or not the forgery is successful. +\begin{lem} +\label{lem:RewindingLemma}\cite[Lemma 1]{LWW} % +{} Let $\mathcal{M}$ invoke $\mathcal{A}$ to obtain a transcript $\mathcal{T}.$ +If $\mathcal{T}$ is successful, then $\mathcal{M}$ rewinds $\mathcal{T}$ +to a header $H$ and re-simulates $\mathcal{A}$ to obtain transcript +$\mathcal{T}^{\prime}$ . If $Pr\left(\mathcal{T}\ \mbox{succeeds}\right)=\epsilon$ +, then $Pr\left(\mathcal{T}^{\prime}\mbox{ succeeds}\right)=\epsilon.$ \end{lem} +\begin{proof} +Follows easily from the cited Theorem. \end{proof} +\begin{thm} +\label{thm:Unforgeability}The probability that an adversary $\mathcal{A}$ +forges a verifying MLSAG signature is negligible under the discrete +logarithm assumption. +\end{thm} +\begin{proof} +I follow the notation introduced above. Similarly to \cite[Theorem 1]{LWW}, +since the probability of guessing the output of a random oracle is +negligible, therefore, for each successful forgery $\mathcal{A}$ completes +with transcript $\mathcal{T}$, there are $m_{\mathcal{T}}$ queries +to $H_{1}$ matching the $n$ queries used to verify the signature. +Thus let $X_{i_{1}},...,X_{i_{m}}$ denote these queries used +in verification for the $i^{th}$ such forgery and let $\pi$ be the +index corresponding to the last such verification query for a given +forgery +\[ +X_{i_{m}}=H_{1}\left(m,L_{\pi-1}^{1},R_{\pi-1}^{1},...,L_{\pi-1}^{m_{\mathcal{T}}},R_{\pi-1}^{m_{\mathcal{T}}}\right). +\] +(Intuitively, $\pi$ corresponds to what would be the secret index +of the forged signature, since it corresponds to the last call to +the random oracle for the given signature). + +An attempted forgery $\sigma$ produced by $\mathcal{A}$ is an $\left(\ell,\pi\right)$-forgery +if $i_{1}=\ell$ and $\pi$ is as above (so this forgery corresponds +to queries $\ell$ through $\ell+\pi$). By assumption, there exists +a pair $\left(\ell,\pi\right)$ such that the probability that the +corresponding transcript $\mathcal{T}$ gives a successful forgery, +$\epsilon_{\ell,\pi}\left(\mathcal{T}\right)$, satisfies +\[ +\epsilon_{\ell,\pi}\ge\frac{1}{m_{\mathcal{T}}\left(q_{H}+m_{\mathcal{T}}q_{S}\right)}\cdot\frac{1}{Q_{1}\left(k\right)}\ge\frac{1}{n\left(q_{H}+nq_{S}\right)}\cdot\frac{1}{Q_{1}\left(k\right)}. +\] + Now, rewinding $\mathcal{T}$ to just before the $\ell^{th}$ query, +and again attempting a forgery on the same set of keys, (and letting +$H_{1}$ compute new coin flips for all of it's succeeding queries) +then by Lemma \ref{lem:RewindingLemma}, it follows that the probability +that $\mathcal{\mathcal{T}^{\prime}}$ is also a successful forgery +satisfies +\[ +\epsilon_{\ell,\pi}\left(\mathcal{T}^{\prime}\right)\ge\frac{1}{n\left(q_{H}+nq_{S}\right)}\cdot\frac{1}{Q_{1}\left(k\right)}. +\] + Therefore, the probability that both $\mathcal{T}$ and $\mathcal{T}^{\prime}$ +correspond to verifying forgeries $\sigma$ and $\sigma^{\prime}$ +is non-negligible: +\[ +\epsilon_{l,\pi}\left(\mathcal{T\ }and\ \mathcal{T}^{\prime}\right)\ge\left(\epsilon_{l,\pi}\left(\mathcal{T}\right)\right)^{2}. +\] + + +As new coin-flips have been computed for the random oracle outputs +of $H_{1},$ it follows that with overwhelming probability there is +$j$ such that $s_{\pi}^{j}\neq s_{\pi}^{\prime j}$ and $c_{\pi}\neq c_{\pi+1}$. +Thus we can solve for the private key of index $\pi$: +\[ +x_{\pi}^{j}=\frac{s_{\pi}^{\prime j}-s_{\pi}^{j}}{c_{\pi}-c_{\pi}^{\prime}}\ mod\ q +\] + which contradicts the discrete logarithm assumption. +\end{proof} + +\subsection{MLSAG Linkability} +\begin{thm} +(Key-Image Linkability) The probability that a PPT adversary $\mathcal{A}$ +can create two verifying (and unlinked in the given setting) signatures $\sigma,\sigma^{\prime}$ signed +with respect to key vectors $\overline{y}$ and $\overline{y}^{\prime}$respectively +such that there exists a public key $y$ in both $\overline{y}$ and +$\overline{y}^{\prime}$ is negligible. \end{thm} +\begin{proof} +Suppose to the contrary that $\mathcal{A}$ has created two verifying +signatures $\sigma$ and $\sigma^{\prime}$ both signed with respect to key +vectors $\overline{y}$ and $\overline{y}^{\prime}$ respectively such +that there exists a public key $y$ in both $\overline{y}$ and $\overline{y}^{\prime}.$ +Let $y$ appear as element $j$ of $\overline{y}$, and as element +$j^{\prime}$ element of $\overline{y}^{\prime}.$ By Theorem \ref{thm:Unforgeability}, +it holds with overwhelming probability that there exists indices $\pi$ +and $\pi^{\prime}$ for the public keys in $\sigma$ and $\sigma^{\prime}$ +respectively such that +\[ +L_{\pi}^{j}=s_{\pi}^{j}G+c_{\pi}y_{\pi}^{j} +\] +\[ +R_{\pi}^{j}=s_{\pi}^{j}H\left(y_{\pi}^{j}\right)+c_{\pi}I_{j} +\] + and + +\[ +L_{\pi^{\prime}}^{j\prime}=s_{\pi^{\prime}}^{j^{\prime}}G+c_{\pi^{\prime}}y_{\pi^{\prime}}^{j^{\prime}} +\] +\[ +R_{\pi^{\prime}}^{j^{\prime}}=s_{\pi^{\prime}}^{j^{\prime}}H\left(y_{\pi^{\prime}}^{j^{\prime}}\right)+c_{\pi^{\prime}}I_{j^{\prime}} +\] + with +\[ +log_{G}L_{\pi}^{j}=log_{H\left(y_{\pi}^{j}\right)}R_{\pi}^{j} +\] + and +\[ +log_{G}L_{\pi^{\prime}}^{j^{\prime}}=log_{H\left(y_{\pi^{\prime}}^{j^{\prime}}\right)}R_{\pi^{\prime}}^{j^{\prime}} +\] +Letting $x$ denote the private key of $y,$ $y=xG$, then after solving +the above for $I_{j}$ and $I_{j^{\prime}}$ it follows that $I_{j}=xH\left(y_{\pi}^{j}\right)=xH\left(y\right)$ +and similarly $I_{j^{\prime}}=xH\left(y\right).$ Thus the two signatures +include $I_{j}=I_{j^{\prime}}$, and therefore, since duplicate key images are rejected, one of them must not verify. +\end{proof} +\subsection{MLSAG Anonymity} +To prove the anonymity of the above protocol in the random oracle +model, let $H_{1},H_{2}$ be random oracles modeling discrete hash +functions. Let $\mathcal{A}$ be an adversary against anonymity. I +construct an adversary $\mathcal{M}$ against the Decisional Diffie Helman +(DDH) assumption as follows. +The DDH asumption says that given a +tuple $\left(G,aG,bG,\gamma G\right)$, the probability of determining +whether $\gamma G=abG$ is negligible. +\begin{thm} +\label{thm:Ring-CT-protocol}Ring CT protocol is signer-ambiguous +under the Decisional Diffie-Helman assumption. \end{thm} +%asdf stopped editing here +\begin{proof} +(Similar proof to \cite[Theorem 2]{LWW}) Assume that the Decisional Diffie-Helman problem is hard in the cyclic group generated by $G$ and suppose there exists a PPT +adversary $\mathcal{A}$ against signer ambiguity. Thus given a list +$L$ of $n$ public key-vectors of length $m$, a set of $t$ private +keys $\mathcal{D}_{t}=\left\{ x_{1},...,x_{t}\right\} $, a valid +signature $\sigma$ on $L$ signed by a user with respect to a key-vector +$\overline{y}$ such that the corresponding private key-vector $\overline{x}=\left(x_{1}^{\pi},...,x_{m}^{\pi}\right)$ +satisfies $x_{j}^{\pi}\notin\mathcal{D}_{t}$, then $\mathcal{A}$ +can decide $\pi$ with probability +\[ +Pr\left(\mathcal{A}\to\pi\right)>\frac{1}{n-t}+\frac{1}{Q\left(k\right)} +\] + for some polynomial $Q\left(k\right)$. I construct a PPT adversary +$\mathcal{M}$ which takes as inputs a tuple +$\left(G,aG,bG,c_{i}G\right)$ where $i\in \{0,1\}$ is randomly chosen (and not a priori known to $\mathcal{M}$), $c_{1}=ab$, and $c_{0}$ is a random scalar, and outputs $i$ with probability +\[ +Pr\left(\mathcal{M}\left(G, aG,bG,c_{i}G\right)\to i\right)\ge\frac{1}{2}+\frac{1}{Q_{2}\left(k\right)} +\] + for some polynomial $Q_{2}\left(k\right)$. + +Consider an algorithm SIMNIZKP (similar to the one defined in \cite{FS}) which takes +as input scalars $a$, $c$ , a private key vector $\overline{x}$, +a set of public key-vectors $\overline{y}_{i},i=1,...,m$, an index +$\pi$, and a message $\mathfrak{m}$ and acts on these as follows: + +1. Generate random scalars $s_{1},...,s_{m}$ and, a random scalar +$c_{\pi}\leftarrow H$. + +2. For $j$ indexing $\overline{x}$, set +\[ +L_{\pi}^{1}=aG +\] +\[ +R_{\pi}^{1}=cG +\] + and for all other $j$ +\[ +L_{\pi}^{j}=s_{\pi}^{j}G+c_{\pi}y_{\pi}^{j} +\] +\[ +R_{\pi}^{j}=s_{\pi}^{j}H\left(y_{\pi}^{j}\right)+c_{\pi}x^{j}H\left(y_{\pi}^{j}\right) +\] + +3. Compute a random output from the random oracle +\[ +c_{\pi+1}\leftarrow H\left(\mathfrak{m},L_{\pi}^{1},R_{\pi}^{1},...,L_{\pi}^{m},R_{\pi}^{m}\right). +\] + +4. For each $i$, working mod $m$, compute +\[ +L_{i}^{j}=s_{i}^{j}G+c_{i}y_{\pi}^{j} +\] +\[ +R_{i}^{j}=s_{i}^{j}H\left(y_{i}^{j}\right)+c_{i}x^{j}H\left(y_{i}^{j}\right) +\] +\[ +c_{i+1}\leftarrow H\left(\mathfrak{m},L_{i}^{1},R_{i}^{1},...,L_{i}^{m}+R_{i}^{m}\right). +\] + and note that at the last step when $i=\pi-1$, then $c_{i+1}$ +is already determined, to maintain consistency with the random oracle +output. + +Note that regardless of whether $\overline{x}$ is the actual private +key corresponding to $\overline{y},$ due to the fact that consistency +is maintained by the random oracles in subsequent calls, the above +signature verifies. If $\overline{x}$ is actually the private key-vector +of $\overline{y}$ , then there is no difference between SIMNIZKP +and an actual signature. + +Finally, given a tuple $\left(G,aG,bG,c_{i}G\right)$ where $a,b$ +are randomly selected scalars, with $c_{1}=ab$, $c_{0}$ a random +element, $i\in\left\{ 0,1\right\} $, $\mathcal{M}$ takes the following steps to solve the Decisional Diffie +Helman Problem with non-negligible probability. +$\mathcal{M}$ grabs +a random $\gamma\leftarrow H$ from the random oracle and takes a +private / public key-vector pair $\left(\overline{x},\overline{y}\right)$, +and then computes $s$ such that $a=s+\gamma x$. Now $\mathcal{M}$ +performs SIMNIZKP with arbitrarily selected key-vectors $\left\{ \overline{y_{i}}\right\} _{i=1,...,n}$ +such that $\overline{y}=\overline{y}_{\pi},$ $a\to a$, $c_{i}\to c$ +some message $\mathfrak{m}$, and $\overline{x}\to\overline{x}$. + +If it is the case that $i=1$, then $c=ab$, then +\[ +log_{G}aG=log_{bG}cG=a +\] + and due to the fact that $\mathcal{A}$ is assumed to be able to +find $\pi$ with non-negligible probability, then there is a non-negligible +probability over $\frac{1}{2}$ that $\mathcal{A}$ returns $1$ (upon +which $\mathcal{M}$ returns $1$). If $i=0$, then $\mathcal{A}$ +returns $1$ only with probability $\frac{1}{2}$, and so for some +non-negligible probability over $\frac{1}{2}$, $\mathcal{M}$ returns +the same value as $\mathcal{A}$, and thus solves the Decisional Diffie-Helman problem for randomly chosen scalars with non-negligible probability +over $\frac{1}{2}$, which is a contradiction. +\end{proof} + +\section{Ring CT Demo Code} +In the repository at \cite{Snoe} I have created a simple demonstration of the Ring Confidential Transactions protocol utilizing the MLSAG signatures of section \ref{MLSAGsection} and the ASNL signatures of section \ref{AgSchnorr}: +\begin{verbatim} + H_ct = RingCT.getHForCT() +print("H", H_ct) +sr, Pr = PaperWallet.skpkGen() #receivers private/ public +se, pe, ss = ecdh.ecdhgen(Pr) #compute shared secret ss +digits = 14 #in practice it will be 14 +print("inputs") +Cia, L1a, s2a, sa, ska = RingCT.genRangeProof(10000, digits) +print("outputs") +Cib, L1b, s2b, sb, skb = RingCT.genRangeProof(7000, digits) +Cic, L1c, s2c, sc, skc = RingCT.genRangeProof(3000, digits) +print("verifying range proofs of outputs") +RingCT.verRangeProof(Cib, L1b, s2b, sb) +RingCT.verRangeProof(Cic, L1c, s2c, sc) +x, P1 = PaperWallet.skpkGen() +P2 = PaperWallet.pkGen() +C2 = PaperWallet.pkGen() +#some random commitment grabbed from the blockchain +ind = 0 +Ca = RingCT.sumCi(Cia) +Cb = RingCT.sumCi(Cib) +Cc = RingCT.sumCi(Cic) +sk = [x, MiniNero.sc_sub_keys(ska, MiniNero.sc_add_keys(skb, skc))] +pk = [[P1, P2], [MiniNero.subKeys(Ca, MiniNero.addKeys(Cb, Cc)), \ +MiniNero.subKeys(C2, MiniNero.addKeys(Cb, Cc)) ] ] +II, cc, ssVal = MLSAG.MLSAG_Sign(pk, sk, ind) +print("Sig verified?", MLSAG.MLSAG_Ver(pk, II, cc, ssVal) ) +print("Finding received amount corresponding to Cib") +RingCT.ComputeReceivedAmount(pe, sr, MiniNero.addScalars(ss, skb), Cib) +print("Finding received amount corresponding to Cic") +RingCT.ComputeReceivedAmount(pe, sr, MiniNero.addScalars(ss, skc), Cic) + +\end{verbatim} +Here is an example transaction with input $10,000$ and outputs $3,000$ and $7,000$. +\begin{verbatim} + ('H', '61fe7f0f5a607a33427d01dd1fded5ffa03fae2e9df9ebccf2e0a2f5bd77a204') +inputs +('b, b in binary', 10000, [0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 1]) +Generating Aggregate Schnorr Non-linkable Ring Signature +outputs +('b, b in binary', 7000, [0, 0, 0, 1, 1, 0, 1, 0, 1, 1, 0, 1, 1, 0]) +Generating Aggregate Schnorr Non-linkable Ring Signature +('b, b in binary', 3000, [0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 0, 0]) +Generating Aggregate Schnorr Non-linkable Ring Signature +verifying range proofs of outputs +Verifying Aggregate Schnorr Non-linkable Ring Signature +Verified +Verifying Aggregate Schnorr Non-linkable Ring Signature +Verified +('Generating MLSAG sig of dimensions ', 2, 'x ', 2) +('verifying MLSAG sig of dimensions ', 2, 'x ', 2) +('c', +['80a3cfd06dd2862307cd75c2a1566f20cd743dbb0b9feb22d79dcbecb9023f42', +'a9b7342ba7bf2f102505ca19dab734fde638916c0a29f5b30e49833ab51393ea', +'80a3cfd06dd2862307cd75c2a1566f20cd743dbb0b9feb22d79dcbecb9023f42']) +('sig verifies?', True) +('Sig verified?', True) +Finding received amount corresponding to Cib +('received ', 7000, +'a488ec68732fb551841c2c6dcc7ffac895d98ec7e9378275ed20ea12805fc18e') +Finding received amount corresponding to Cic +('received ',3000, +'1b46626858e130a0f3884c74c9fdeabc4d812c519103ea16a35a3f82a3d0ed6d') +\end{verbatim} + + + + +\end{document} diff --git a/publications/MRL-0005 - Ring Signature Confidential Transactions for Monero/biblio.bib b/publications/MRL-0005 - Ring Signature Confidential Transactions for Monero/biblio.bib index e69de29..29446cb 100644 --- a/publications/MRL-0005 - Ring Signature Confidential Transactions for Monero/biblio.bib +++ b/publications/MRL-0005 - Ring Signature Confidential Transactions for Monero/biblio.bib @@ -0,0 +1,145 @@ +@article{abe, + title={1-out-of-n signatures from a variety of keys}, + author={Abe, Masayuki and Ohkubo, Miyako and Suzuki, Koutarou}, + journal={Advances in Cryptology?Asiacrypt 2002}, + pages={415--432}, + year={2002}, + publisher={Springer Berlin Heidelberg} +} + + + +@misc{B, + author = {Back, Adam}, + title = {Ring Signature Efficiency}, + howpublished = {\url{https://bitcointalk.org/index.php?topic=972541.msg10619684\#msg10619684}}, + + year = {2015}, + note = "[Online; accessed 1-May-2015]" +} + + +@misc{B2, + author = {Back, Adam}, + title = {Bitcoins With Homomorphic Value (Validatable But Encrypted)}, + howpublished = {\url{https://bitcointalk.org/index.php?topic=305791.0}}, + year = {2013}, + note = "[Online; accessed 1-May-2015]" +} + + + +@article{CN, + title={Cryptonote v 2. 0}, + author={van Saberhagen, Nicolas}, + journal={HYPERLINK \url{https://cryptonote.org/whitepaper.pdf}}, + year={2013} +} + + +@article{DASH, + title={Darkcoin: PeertoPeer CryptoCurrency with Anonymous Blockchain Transactions and an Improved ProofofWork System}, + author={Duffield, Evan and Hagan, Kyle}, + year={2014} +} + +@incollection{FS, + title={Traceable ring signature}, + author={Fujisaki, Eiichiro and Suzuki, Koutarou}, + booktitle={Public Key Cryptography--PKC 2007}, + pages={181--200}, + year={2007}, + publisher={Springer} +} + +@misc{GMc, + title={CoinJoin: Bitcoin privacy for the real world, August 2013}, + author={Maxwell, Greg}, + howpublished = {Bitcoin Forum. \url{https://bitcointalk.org/index.php?topic=279249.0}}, + year = {2013}, + note = "[Online; accessed 1-July-2015]" +} + + +@misc{GM, + title={{Confidential Transactions}}, + author={Maxwell, Greg}, + howpublished = {\url{https://people.xiph.org/~greg/confidential_values.txt}}, + year = {2015}, + note = "[Online; accessed 1-June-2015]" +} + +@misc{herranz, + author = "Herranz, Javier", + title = "Aggregate Signatures", + month = "oct", + year = "2005", + howpublished={\url{http://www.iiia.csic.es/~jherranz/papers/Nijmegen_seminar_aggregate.pdf}} +} + +@inproceedings{LWW, + title={Linkable spontaneous anonymous group signature for ad hoc groups}, + author={Liu, Joseph K and Wei, Victor K and Wong, Duncan S}, + booktitle={Information Security and Privacy}, + pages={325--335}, + year={2004}, + organization={Springer} +} + +@misc {mrl4, + author = {Adam Mackenzie and Surae Noether and Monero Core Team}, + title = "Improving Obfuscation in the CryptoNote Protocol", + month = "January", + year = "2015", + howpublished = {\url{"https://lab.getmonero.org/pubs/MRL-0004.pdf"}} +} + +@incollection{RST, + title={How to leak a secret}, + author={Rivest, Ronald L and Shamir, Adi and Tauman, Yael}, + booktitle={Advances in Cryptology???ASIACRYPT 2001}, + pages={552--565}, + year={2001}, + publisher={Springer} +} + +@misc{Snoe, + author = {Noether, Shen}, + title = {MiniNero}, + year = {2015}, + publisher = {GitHub}, + journal = {GitHub repository}, + howpublished = {\url{https://github.com/ShenNoether/MiniNero}}, + commit = {e2dae45626295c9c49661ab227ee9823b79a6960} +} + +@misc{El, + author = {Maxwell, Greg}, + title = {Elements Project}, + year = {2015}, + publisher = {GitHub}, + journal = {GitHub repository}, + howpublished = {\url{https://github.com/ShenNoether/MiniNero}}, + commit = {8c323e0accaad3a1e17296448931ce1d557d9bc5} +} + + +@article{SN, + title={Bitcoin: A peer-to-peer electronic cash system}, + author={Nakamoto, Satoshi}, + journal={Consulted}, + volume={1}, + number={2012}, + pages={28}, + year={2008} +} + +@inproceedings{Z, + title={Zerocash: Decentralized anonymous payments from Bitcoin}, + author={Ben Sasson, Eli and Chiesa, Alessandro and Garman, Christina and Green, Matthew and Miers, Ian and Tromer, Eran and Virza, Madars}, + booktitle={Security and Privacy (SP), 2014 IEEE Symposium on}, + pages={459--474}, + year={2014}, + organization={IEEE} +} + diff --git a/publications/MRL-0005 - Ring Signature Confidential Transactions for Monero/mrl.cls b/publications/MRL-0005 - Ring Signature Confidential Transactions for Monero/mrl.cls index 563f82c..6a23a56 100644 --- a/publications/MRL-0005 - Ring Signature Confidential Transactions for Monero/mrl.cls +++ b/publications/MRL-0005 - Ring Signature Confidential Transactions for Monero/mrl.cls @@ -579,7 +579,6 @@ \def\runtitle#1{\gdef\@runtitle{#1}} \def\runauthor#1{\gdef\@runauthor{#1}\global\let\copauthor\@runauthor} -\def\@runauthor{} \def\@lastpage{0} \def\thepage@fmt#1{Page #1 of \@lastpage} @@ -847,6 +846,7 @@ \setattribute{address} {text} {Author details} \setattribute{corref} {text} {Correspondence: } \setattribute{authorinfo} {text} {} + \setattribute{presentaddress} {text} {\textit{Present address: }} \setattribute{copyright} {text} {\copyright\,\textit{\journal@name}} \setattribute{runninghead} {text} {\copyright\,\textit{\journal@name} \hfill \thepage@fmt{\thepage}} diff --git a/publications/MRL-0005 - Ring Signature Confidential Transactions.pdf b/publications/MRL-0005 - Ring Signature Confidential Transactions.pdf new file mode 100644 index 0000000..5c4b98e Binary files /dev/null and b/publications/MRL-0005 - Ring Signature Confidential Transactions.pdf differ diff --git a/source-code/MiniNero/ASNL.py b/source-code/MiniNero/ASNL.py new file mode 100644 index 0000000..e37c954 --- /dev/null +++ b/source-code/MiniNero/ASNL.py @@ -0,0 +1,113 @@ +#see the aggregate schnorr pdf contained in this repository for an explanation. +import MiniNero +import MLSAG +import LLW_Sigs +import PaperWallet +import Crypto.Random.random as rand +import binascii + +b = 256 +q = 2**255 - 19 +l = 2**252 + 27742317777372353535851937790883648493 + + +def GenSchnorr(hash_prefix, pub, sec, k): + #modified from original algorithm to match Monero better + #see the ag schnorr pdf for original alg. + #Note in Monero, hash prefix is always 32 bytes.. + #hash_prefix = binascii.hexlify(prefix) + #k = PaperWallet.skGen() #comment for testing + comm = MiniNero.scalarmultBase(k) + print("comm", "hash_prefix", comm, hash_prefix) + if MiniNero.scalarmultBase(sec) != pub: + print"error in genSchnorr" + return -1 + if MiniNero.sc_check(sec) == False: + print "fail in geSchnorr" + return -1 + c = MiniNero.sc_reduce_key(MiniNero.cn_fast_hash(hash_prefix + pub + comm)) + r = MiniNero.sc_sub_keys(k, MiniNero.sc_mul_keys(c, sec)) + #uncomment to test malleability + c = MiniNero.sc_reduce_key(MiniNero.cn_fast_hash(hash_prefix + pub + comm)) + r = MiniNero.sc_unreduce_key(MiniNero.sc_sub_keys(k, MiniNero.sc_mul_keys(c, sec))) + + return r, c + +def VerSchnorr(hash_prefix, pub, r, c): + #hash_prefix = binascii.hexlify(prefix) + check1 = MiniNero.toPoint(pub) + comm = MiniNero.addKeys(MiniNero.scalarmultKey(pub,c), MiniNero.scalarmultBase(r)) + c2 = MiniNero.cn_fast_hash(hash_prefix + pub + comm) + print(MiniNero.sc_sub_keys(c, c2) == "0000000000000000000000000000000000000000000000000000000000000000") + return (MiniNero.sc_sub_keys(c, c2) == "0000000000000000000000000000000000000000000000000000000000000000") + +def GenSchnorrNonLinkable(x, P1, P2, index): + if index == 0: + a = PaperWallet.skGen() + L1 = MiniNero.scalarmultBase(a) + s2 = PaperWallet.skGen() + c2 = MiniNero.cn_fast_hash(L1) + L2 = MiniNero.addKeys(MiniNero.scalarmultBase(s2), MiniNero.scalarmultKey(P2, c2)) + c1 = MiniNero.cn_fast_hash(L2) + s1 = MiniNero.sc_mulsub_keys(a, x, c1) + if index == 1: + a = PaperWallet.skGen() + L2 = MiniNero.scalarmultBase(a) + s1 = PaperWallet.skGen() + c1 = MiniNero.cn_fast_hash(L2) + L1 = MiniNero.addKeys(MiniNero.scalarmultBase(s1), MiniNero.scalarmultKey(P1, c1)) + c2 = MiniNero.cn_fast_hash(L1) + s2 = MiniNero.sc_mulsub_keys(a, x, c2) + return L1, s1, s2, + +def VerSchnorrNonLinkable(P1, P2, L1, s1, s2): + c2 = MiniNero.cn_fast_hash(L1) + L2 = MiniNero.addKeys(MiniNero.scalarmultBase(s2), MiniNero.scalarmultKey(P2, c2)) + c1 = MiniNero.cn_fast_hash(L2) + L1p = MiniNero.addKeys(MiniNero.scalarmultBase(s1), MiniNero.scalarmultKey(P1, c1)) + if L1 == L1p: + print"Verified" + return 0 + else: + print "Didn't verify" + print(L1,"!=", L1p) + return -1 + + + +def GenASNL(x, P1, P2, indices): + #Aggregate Schnorr Non-Linkable + #x, P1, P2, are key vectors here, but actually you + #indices specifices which column of the given row of the key vector you sign. + #the key vector with the first or second key + n = len(x) + print("Generating Aggregate Schnorr Non-linkable Ring Signature") + L1 = [None] * n + s1 = [None] * n + s2 = [None] * n + s = MiniNero.intToHex(0) + for j in range(0, n): + L1[j], s1[j], s2[j] = GenSchnorrNonLinkable(x[j], P1[j], P2[j], indices[j]) + s = MiniNero.sc_add_keys(s, s1[j]) + return L1, s2, s + +def VerASNL(P1, P2, L1, s2, s): + #Aggregate Schnorr Non-Linkable + print("Verifying Aggregate Schnorr Non-linkable Ring Signature") + n = len(P1) + LHS = MiniNero.scalarmultBase(MiniNero.intToHex(0)) + RHS = MiniNero.scalarmultBase(s) + for j in range(0, n): + c2 = MiniNero.cn_fast_hash(L1[j]) + L2 = MiniNero.addKeys(MiniNero.scalarmultBase(s2[j]), MiniNero.scalarmultKey(P2[j], c2)) + LHS = MiniNero.addKeys(LHS, L1[j]) + c1 = MiniNero.cn_fast_hash(L2) + RHS = MiniNero.addKeys(RHS, MiniNero.scalarmultKey(P1[j], c1)) + if LHS == RHS: + print"Verified" + return 0 + else: + print "Didn't verify" + print(LHS,"!=", RHS) + return -1 + diff --git a/source-code/MiniNero/AggregateSchnorrCT.hash b/source-code/MiniNero/AggregateSchnorrCT.hash new file mode 100644 index 0000000..e9925a6 --- /dev/null +++ b/source-code/MiniNero/AggregateSchnorrCT.hash @@ -0,0 +1,5 @@ +9 +0 +('checksum', '7$Z:') +1B2yLX66Q3K49NJnNF9h6Yv4aB4oUxbPC5 +https://blockchain.info/address/1B2yLX66Q3K49NJnNF9h6Yv4aB4oUxbPC5 diff --git a/source-code/MiniNero/AggregateSchnorrCT_copy.pdf b/source-code/MiniNero/AggregateSchnorrCT_copy.pdf new file mode 100644 index 0000000..eb48024 Binary files /dev/null and b/source-code/MiniNero/AggregateSchnorrCT_copy.pdf differ diff --git a/source-code/MiniNero/Dec23Overleaf.hash b/source-code/MiniNero/Dec23Overleaf.hash new file mode 100644 index 0000000..ebc9a25 --- /dev/null +++ b/source-code/MiniNero/Dec23Overleaf.hash @@ -0,0 +1,6 @@ +592 +0 +(0, 'Yb\x02\xaao\xfca\xd8%\t\x10\xc1M\xbfY\x1b+\xf21F', 'here') +('checksum', '\xad\x80?[') +199cYxSJyKmkZFET9gtm3WzDHu7MpwHGTU +https://blockchain.info/address/199cYxSJyKmkZFET9gtm3WzDHu7MpwHGTU diff --git a/source-code/MiniNero/Deterministic.py b/source-code/MiniNero/Deterministic.py new file mode 100644 index 0000000..a0ebc08 --- /dev/null +++ b/source-code/MiniNero/Deterministic.py @@ -0,0 +1,52 @@ +#monero determinstic vk wallet test code, shen noether mrl +#use at your own risk +import Crypto.Random.random as rand +import MiniNero +import mnemonic + +def deterministicVK(): + while True: + print('.'), + tmp = MiniNero.intToHex(rand.getrandbits(64 * 8)) # 8 bits to a byte ... + sk = MiniNero.sc_reduce_key(MiniNero.cn_fast_hash(tmp)) + + + #s = "3c817618dcbfed122a64e592bb441d73300da9123686224a84e0eab1f075117e"; for testing + #sk = MiniNero.sc_reduce_key(s) + vk = MiniNero.getViewMM(sk) #note this is the sc_reduced version.. + worked = 1 + try: + MiniNero.toPoint(vk) + except: + worked =0 + print("bad vk") + if vk == MiniNero.sc_reduce_key(vk) and worked == 1: #already reduced + vk on curve + break + + print("found keys") + print("secret spend key:", sk) + print("secret view key:", vk) + vk2 = MiniNero.cn_fast_hash(MiniNero.scalarmultKey(vk, 2)) + print("secret view key2:", vk2) + vk3 = MiniNero.cn_fast_hash(MiniNero.scalarmultKey(vk, 3)) + print("secret view key3:", vk3) + + pk = MiniNero.publicFromSecret(sk) + print("public spend key:", pk) + pvk = MiniNero.publicFromSecret(vk) + print("public view key:", pvk) + pvk2 = MiniNero.publicFromSecret(vk2) + print("public view key2:", pvk2) + pvk3 = MiniNero.publicFromSecret(vk3) + print("public view key3:", pvk3) + + addr = MiniNero.getAddrMM(sk) + print("in future this will get all addresses") + print("receiving address", addr) + wl = mnemonic.mn_encode(s) + cks = MiniNero.electrumChecksum(wl) + print(cks) + print("mnemonic:", wl + " " + cks) + +deterministicVK() + diff --git a/source-code/MiniNero/Ecdh.py b/source-code/MiniNero/Ecdh.py new file mode 100644 index 0000000..07f1ca7 --- /dev/null +++ b/source-code/MiniNero/Ecdh.py @@ -0,0 +1,17 @@ +#Elliptic Curve Diffie Helman with ed25519 +#ecdhgen and ecdhretrieve translated into MiniNero from implementation by TacoTime +import MiniNero +import PaperWallet +def ecdhGen(P): + ephembytes, ephempub = PaperWallet.skpkGen() + sspub = MiniNero.scalarmultKey(P, ephembytes) #(receiver pub) * (sender ecdh sk) + ss1 = MiniNero.cn_fast_hash(sspub) + ss2 = MiniNero.cn_fast_hash(ss1) + return ephembytes, ephempub, ss1, ss2 + +def ecdhRetrieve(x, pk): + sspub = MiniNero.scalarmultKey(pk, x) + ss1 = MiniNero.cn_fast_hash(sspub) + ss2 = MiniNero.cn_fast_hash(ss1) + return ss1, ss2 + diff --git a/source-code/MiniNero/FS_Signatures.py b/source-code/MiniNero/FS_Signatures.py new file mode 100644 index 0000000..94387d0 --- /dev/null +++ b/source-code/MiniNero/FS_Signatures.py @@ -0,0 +1,2 @@ +import MiniNero +import PaperWallet diff --git a/source-code/MiniNero/GenLookup.py b/source-code/MiniNero/GenLookup.py new file mode 100644 index 0000000..52e5e4c --- /dev/null +++ b/source-code/MiniNero/GenLookup.py @@ -0,0 +1,9 @@ +import MiniNero +def getHForCT(): + A = MiniNero.publicFromInt(123456) + return MiniNero.hashToPoint_ct(A) + +H = getHForCT() +for i in range(0, 2**14): + print(MiniNero.scalarmultKeyInt(H, i)) + diff --git a/source-code/MiniNero/Keccak.py b/source-code/MiniNero/Keccak.py new file mode 100644 index 0000000..1abbcc1 --- /dev/null +++ b/source-code/MiniNero/Keccak.py @@ -0,0 +1,348 @@ +#! /usr/bin/pythonw +# The Keccak sponge function, designed by Guido Bertoni, Joan Daemen, +# questions, please refer to our website: http://keccak.noekeon.org/ +# +# Implementation by Renaud Bauvin, +# hereby denoted as "the implementer". +# +# To the extent possible under law, the implementer has waived all copyright +# and related or neighboring rights to the source code in this file. +# http://creativecommons.org/publicdomain/zero/1.0/ + +import math + +class KeccakError(Exception): + """Class of error used in the Keccak implementation + + Use: raise KeccakError.KeccakError("Text to be displayed")""" + + def __init__(self, value): + self.value = value + def __str__(self): + return repr(self.value) + + +class Keccak: + """ + Class implementing the Keccak sponge function + """ + def __init__(self, b=1600): + """Constructor: + + b: parameter b, must be 25, 50, 100, 200, 400, 800 or 1600 (default value)""" + self.setB(b) + + def setB(self,b): + """Set the value of the parameter b (and thus w,l and nr) + + b: parameter b, must be choosen among [25, 50, 100, 200, 400, 800, 1600] + """ + + if b not in [25, 50, 100, 200, 400, 800, 1600]: + raise KeccakError.KeccakError('b value not supported - use 25, 50, 100, 200, 400, 800 or 1600') + + # Update all the parameters based on the used value of b + self.b=b + self.w=b//25 + self.l=int(math.log(self.w,2)) + self.nr=12+2*self.l + + # Constants + + ## Round constants + RC=[0x0000000000000001, + 0x0000000000008082, + 0x800000000000808A, + 0x8000000080008000, + 0x000000000000808B, + 0x0000000080000001, + 0x8000000080008081, + 0x8000000000008009, + 0x000000000000008A, + 0x0000000000000088, + 0x0000000080008009, + 0x000000008000000A, + 0x000000008000808B, + 0x800000000000008B, + 0x8000000000008089, + 0x8000000000008003, + 0x8000000000008002, + 0x8000000000000080, + 0x000000000000800A, + 0x800000008000000A, + 0x8000000080008081, + 0x8000000000008080, + 0x0000000080000001, + 0x8000000080008008] + + ## Rotation offsets + r=[[0, 36, 3, 41, 18] , + [1, 44, 10, 45, 2] , + [62, 6, 43, 15, 61] , + [28, 55, 25, 21, 56] , + [27, 20, 39, 8, 14] ] + + ## Generic utility functions + + def rot(self,x,n): + """Bitwise rotation (to the left) of n bits considering the \ + string of bits is w bits long""" + + n = n%self.w + return ((x>>(self.w-n))+(x< Table (and vice-versa) + + def convertStrToTable(self,string): + + + #Check that input paramaters + if self.w%8!= 0: + raise KeccakError("w is not a multiple of 8") + if len(string)!=2*(self.b)//8: + raise KeccakError.KeccakError("string can't be divided in 25 blocks of w bits\ + i.e. string must have exactly b bits") + + #Convert + output=[[0,0,0,0,0], + [0,0,0,0,0], + [0,0,0,0,0], + [0,0,0,0,0], + [0,0,0,0,0]] + for x in range(5): + for y in range(5): + offset=2*((5*y+x)*self.w)//8 + output[x][y]=self.fromHexStringToLane(string[offset:offset+(2*self.w//8)]) + return output + + def convertTableToStr(self,table): + + #Check input format + if self.w%8!= 0: + raise KeccakError.KeccakError("w is not a multiple of 8") + if (len(table)!=5) or (False in [len(row)==5 for row in table]): + raise KeccakError.KeccakError("table must b") + + #Convert + output=['']*25 + for x in range(5): + for y in range(5): + output[5*y+x]=self.fromLaneToHexString(table[x][y]) + output =''.join(output).upper() + return output + + def Round(self,A,RCfixed): + """Perform one round of computation as defined in the Keccak-f permutation + + """ + + #Initialisation of temporary variables + B=[[0,0,0,0,0], + [0,0,0,0,0], + [0,0,0,0,0], + [0,0,0,0,0], + [0,0,0,0,0]] + C= [0,0,0,0,0] + D= [0,0,0,0,0] + + #Theta step + for x in range(5): + C[x] = A[x][0]^A[x][1]^A[x][2]^A[x][3]^A[x][4] + + for x in range(5): + D[x] = C[(x-1)%5]^self.rot(C[(x+1)%5],1) + + for x in range(5): + for y in range(5): + A[x][y] = A[x][y]^D[x] + + #Rho and Pi steps + for x in range(5): + for y in range(5): + B[y][(2*x+3*y)%5] = self.rot(A[x][y], self.r[x][y]) + + #Chi step + for x in range(5): + for y in range(5): + A[x][y] = B[x][y]^((~B[(x+1)%5][y]) & B[(x+2)%5][y]) + + #Iota step + A[0][0] = A[0][0]^RCfixed + + return A + + def KeccakF(self,A, verbose=False): + """Perform Keccak-f function on the state A + + verbose: a boolean flag activating the printing of intermediate computations + """ + + if verbose: + self.printState(A,"Before first round") + + for i in range(self.nr): + #NB: result is truncated to lane size + A = self.Round(A,self.RC[i]%(1<(len(my_string)//2*8): + raise KeccakError.KeccakError("the string is too short to contain the number of bits announced") + + nr_bytes_filled=my_string_length//8 + nbr_bits_filled=my_string_length%8 + l = my_string_length % n + if ((n-8) <= l <= (n-2)): + if (nbr_bits_filled == 0): + my_byte = 0 + else: + my_byte=int(my_string[nr_bytes_filled*2:nr_bytes_filled*2+2],16) + my_byte=(my_byte>>(8-nbr_bits_filled)) + my_byte=my_byte+2**(nbr_bits_filled)+2**7 + my_byte="%02X" % my_byte + my_string=my_string[0:nr_bytes_filled*2]+my_byte + else: + if (nbr_bits_filled == 0): + my_byte = 0 + else: + my_byte=int(my_string[nr_bytes_filled*2:nr_bytes_filled*2+2],16) + my_byte=(my_byte>>(8-nbr_bits_filled)) + my_byte=my_byte+2**(nbr_bits_filled) + my_byte="%02X" % my_byte + my_string=my_string[0:nr_bytes_filled*2]+my_byte + while((8*len(my_string)//2)%n < (n-8)): + my_string=my_string+'00' + my_string = my_string+'80' + + return my_string + + def Keccak(self,M,r=1024,c=512,n=1024,verbose=False): + """Compute the Keccak[r,c,d] sponge function on message M + + M: message pair (length in bits, string of hex characters ('9AFC...') + r: bitrate in bits (defautl: 1024) + c: capacity in bits (default: 576) + n: length of output in bits (default: 1024), + verbose: print the details of computations(default:False) + """ + + #Check the inputs + if (r<0) or (r%8!=0): + raise KeccakError.KeccakError('r must be a multiple of 8 in this implementation') + if (n%8!=0): + raise KeccakError.KeccakError('outputLength must be a multiple of 8') + self.setB(r+c) + + if verbose: + print("Create a Keccak function with (r=%d, c=%d (i.e. w=%d))" % (r,c,(r+c)//25)) + + #Compute lane length (in bits) + w=(r+c)//25 + + # Initialisation of state + S=[[0,0,0,0,0], + [0,0,0,0,0], + [0,0,0,0,0], + [0,0,0,0,0], + [0,0,0,0,0]] + + #Padding of messages + P = self.pad10star1(M, r) + + if verbose: + print("String ready to be absorbed: %s (will be completed by %d x '00')" % (P, c//8)) + + #Absorbing phase + for i in range((len(P)*8//2)//r): + Pi=self.convertStrToTable(P[i*(2*r//8):(i+1)*(2*r//8)]+'00'*(c//8)) + + for y in range(5): + for x in range(5): + S[x][y] = S[x][y]^Pi[x][y] + S = self.KeccakF(S, verbose) + + if verbose: + print("Value after absorption : %s" % (self.convertTableToStr(S))) + + #Squeezing phase + Z = '' + outputLength = n + while outputLength>0: + string=self.convertTableToStr(S) + Z = Z + string[:r*2//8] + outputLength -= r + if outputLength>0: + S = self.KeccakF(S, verbose) + + # NB: done by block of length r, could have to be cut if outputLength + # is not a multiple of r + + if verbose: + print("Value after squeezing : %s" % (self.convertTableToStr(S))) + + return Z[:2*n//8] diff --git a/source-code/MiniNero/Keccak.txt b/source-code/MiniNero/Keccak.txt new file mode 100644 index 0000000..0750173 --- /dev/null +++ b/source-code/MiniNero/Keccak.txt @@ -0,0 +1,96 @@ +Content +------- + +List of files: + - Keccak.py : the Keccak and KeccakError classes + - demo_KeccakF.py : example of use of Keccak_f function on a 0-filled 5×5 matrix + - demo_TestVectors.py : verification of Short/Long test vectors. The test vectors must be copied in the same location as the Python files + + +Few words of explanation +------------------------ + +The Keccak module is stateless. It takes your inputs, performs the computation and returns the result. + + +Typical uses +------------ + +1) Compute a hash using Keccak[r=1152, c=448] (224 bits of output) on '00112233445566778899AABBCCDDEEFF' (8*16bits=128 bits) + +>>> import Keccak +>>> myKeccak=Keccak.Keccak() +>>> myKeccak.Keccak((128,'00112233445566778899AABBCCDDEEFF'),1152,448,224,True) + +Create a Keccak function with (r=1152, c=448 (i.e. w=64)) + +String ready to be absorbed: 00112233445566778899AABBCCDDEEFF0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080 (will be completed by 56 x '00') + +Current value of state: Before first round + ['0x7766554433221100', '0xffeeddccbbaa9988', '0x1', '0x0', '0x0'] + ['0x0', '0x0', '0x0', '0x0', '0x0'] + ['0x0', '0x0', '0x0', '0x0', '0x0'] + ['0x0', '0x0', '0x8000000000000000', '0x0', '0x0'] + ['0x0', '0x0', '0x0', '0x0', '0x0'] +Current value of state: Satus end of round #1/24 + ['0xdc77ae5456dd06dd', '0x2110377665444332', '0x7e6e5e6e7e6e5e6e', '0x8019e64c44470000', '0xba208b329807a91'] + ['0x5669988982a11005', '0xa8864666600eeaaa', '0xe3304ddaaffcc99e', '0x42206eecc2a88664', '0xb77bbffbb77bbffb'] + ['0x1111111110111117', '0x371dfb48ae8462d1', '0x224555108b45ff10', '0xddba8867553200ef', '0x4c3bf7a26e19d5e'] + ['0xcb3621d00772611c', '0x13f17c0eb95b8bb5', '0x985510cc88440ddd', '0x2cd47cc54bb25aa3', '0x35c1100ff8899883'] + ['0x5deab70448bfe251', '0x88a62388992232cc', '0x7788547722dd0032', '0x8804819c9915908c', '0xdd995510cc88440d'] +<...> +Current value of state: Satus end of round #24/24 + ['0xd89c919ce8078903', '0x92ff885abc7f0af9', '0xa0cdebf3ae8d1078', '0xde568902e183b3ce', '0xe3d1096857dc5b35'] + ['0xc5f432f2633d3da0', '0x6a0094e2d96f8f35', '0xff92be8c648edc5a', '0xb87fe7012b84523a', '0xb8b7e144e77b3096'] + ['0xf4832b396a99f318', '0xd8c10bcbaed2e2cf', '0x7d0f5ff34fc95a2e', '0x404281a6b9b3c2a2', '0xa758a863c74aecbe'] + ['0x5b0f0672fcebc63e', '0xfca88e2204aa233e', '0xb62ef1ba33bc5a69', '0x795abef031f2d7dd', '0x7b7dc16e91fff6cd'] + ['0x677823df6ebd0544', '0xd2a1fc63c7702e0e', '0x49b07e16adc62d95', '0x6bdb0b4f074e8b2b', '0xc27f39383b4799b5'] + +Value after absorption : 038907E89C919CD8F90A7FBC5A88FF9278108DAEF3EBCDA0CEB383E1028956DE355BDC576809D1E3A03D3D63F232F4C5358F6FD9E294006A5ADC8E648CBE92FF3A52842B01E77FB896307BE744E1B7B818F3996A392B83F4CFE2D2AECB0BC1D82E5AC94FF35F0F7DA2C2B3B9A6814240BEEC4AC763A858A73EC6EBFC72060F5B3E23AA04228EA8FC695ABC33BAF12EB6DDD7F231F0BE5A79CDF6FF916EC17D7B4405BD6EDF2378670E2E70C763FCA1D2952DC6AD167EB0492B8B4E074F0BDB6BB599473B38397FC2 + +Value after squeezing : 038907E89C919CD8F90A7FBC5A88FF9278108DAEF3EBCDA0CEB383E1028956DE355BDC576809D1E3A03D3D63F232F4C5358F6FD9E294006A5ADC8E648CBE92FF3A52842B01E77FB896307BE744E1B7B818F3996A392B83F4CFE2D2AECB0BC1D82E5AC94FF35F0F7DA2C2B3B9A6814240BEEC4AC763A858A73EC6EBFC72060F5B3E23AA04228EA8FC695ABC33BAF12EB6DDD7F231F0BE5A79CDF6FF916EC17D7B4405BD6EDF2378670E2E70C763FCA1D2952DC6AD167EB0492B8B4E074F0BDB6BB599473B38397FC2 + +'038907E89C919CD8F90A7FBC5A88FF9278108DAEF3EBCDA0CEB383E1' + + +2) Computation of the Keccak-f function on an all-zero state + +>>> import Keccak +>>> A=[[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]] +>>> myKeccak=Keccak.Keccak(1600) +>>> myKeccak.Keccakf(A, True) +>>> myKeccak.printState(A,'Final result') + +Current value of state: Before first round + ['0x0', '0x0', '0x0', '0x0', '0x0'] + ['0x0', '0x0', '0x0', '0x0', '0x0'] + ['0x0', '0x0', '0x0', '0x0', '0x0'] + ['0x0', '0x0', '0x0', '0x0', '0x0'] + ['0x0', '0x0', '0x0', '0x0', '0x0'] +Current value of state: Satus end of round #1/24 + ['0x1L', '0x0L', '0x0L', '0x0L', '0x0L'] + ['0x0L', '0x0L', '0x0L', '0x0L', '0x0L'] + ['0x0L', '0x0L', '0x0L', '0x0L', '0x0L'] + ['0x0L', '0x0L', '0x0L', '0x0L', '0x0L'] + ['0x0L', '0x0L', '0x0L', '0x0L', '0x0L'] +<...> +Current value of state: Satus end of round #24/24 + ['0xf1258f7940e1dde7L', '0x84d5ccf933c0478aL', '0xd598261ea65aa9eeL', '0xbd1547306f80494dL', '0x8b284e056253d057L'] + ['0xff97a42d7f8e6fd4L', '0x90fee5a0a44647c4L', '0x8c5bda0cd6192e76L', '0xad30a6f71b19059cL', '0x30935ab7d08ffc64L'] + ['0xeb5aa93f2317d635L', '0xa9a6e6260d712103L', '0x81a57c16dbcf555fL', '0x43b831cd0347c826L', '0x1f22f1a11a5569fL'] + ['0x5e5635a21d9ae61L', '0x64befef28cc970f2L', '0x613670957bc46611L', '0xb87c5a554fd00ecbL', '0x8c3ee88a1ccf32c8L'] + ['0x940c7922ae3a2614L', '0x1841f924a2c509e4L', '0x16f53526e70465c2L', '0x75f644e97f30a13bL', '0xeaf1ff7b5ceca249L'] + +[[17376452488221285863L, 18417369716475457492L, 16959053435453822517L, 424854978622500449L, 10668034807192757780L], [9571781953733 +019530L, 10448040663659726788L, 12224711289652453635L, 7259519967065370866L, 1747952066141424100L], [15391093639620504046L, 101139 +17136857017974L, 9342009439668884831L, 7004910057750291985L, 1654286879329379778L], [13624874521033984333L, 12479658147685402012L, + 4879704952849025062L, 13293599522548616907L, 8500057116360352059L], [10027350355371872343L, 3500241080921619556L, 140226327413610 +143L, 10105770293752443592L, 16929593379567477321L]] + + + + + + + + diff --git a/source-code/MiniNero/Knapsack.py b/source-code/MiniNero/Knapsack.py new file mode 100644 index 0000000..1cb410c --- /dev/null +++ b/source-code/MiniNero/Knapsack.py @@ -0,0 +1,110 @@ +import Crypto.Random.random as rand +import itertools +import math #for log +import sys +def decomposition(i): + #from stack exchange, don't think it's uniform + while i > 0: + n = rand.randint(1, i) + yield n + i -= n + +def Decomposition(i): + while True: + l = list(decomposition(i)) + if len(set(l)) == len(l): + return l + +def decomposition2(n, s, d, k): + #home-brewed, returns no duplicates, includes the number d + s = s - 1 + n = n + while True: + a = [d] + nn = n + #a.append(d) + for i in range(0, s): + a.append(rand.randint(0, n)) + a.sort() + #print("a", a) + b = [] + c = [] + while len(a) > 0: + t = a.pop() + #print(t, a) + if t >= d: + b.append(nn - t) + else: + c.append(nn - t) + nn = t + c.append(nn) + tot = b[:] + c[:] + #print("b", b) + if sum(set(tot)) == n and len(c) > int(k): + return sorted(c), sorted(b) + +def decomposition3(n, s, d, k): + #a combination of both methods, designed to get some smaller values + send, change = decomposition2(n, s, d, k) + for i in send: + if i > n / s: + send.remove(i) + send = send + list(Decomposition(i)) + for i in change: + if i > n / (s - 1): + change.remove(i) + change = change + list(Decomposition(i)) + return send, change + +def divv(l, m): + return [a /float( m) for a in l] + +def frexp10(x): + exp = int(math.log10(x)) + return x / 10**exp, exp + + +def decideAmounts(totalInputs, toSend, Partitions, k, fuzz): + #fuzz is an optional amount to fuzz the transaction by + #so if you start with a big obvious number like 2000, it might be fuzzed by up to "fuzz" amount + fz = rand.randint(0, int(fuzz * 1000) ) / 1000.0 + toSend += fz + + + g, ii =frexp10(totalInputs) + ii = 10 ** (-1 * min(ii - 2, 0)) + print("ii", ii) + M = 10 ** (int(math.log(2 ** Partitions) / math.log(10))) * ii + #M = 10 ** M + print("multiplier:", M) + totalInputs = int(totalInputs * M) + toSend = int(toSend * M) + change = totalInputs - toSend + send_amounts, change_amounts = decomposition3(totalInputs, Partitions, toSend, k) + all_amounts = send_amounts[:] + change_amounts[:] + rand.shuffle(all_amounts) + print("") + print("change amounts:", divv(change_amounts, M)) + print("send amounts:", divv(send_amounts, M)) + print("now from the following, how much is sent?") + print("all amounts:", sorted(divv(all_amounts, M))) + print("possible sent amounts:") + amounts = [] + for L in range(0, len(all_amounts)+1): + for subset in itertools.combinations(all_amounts, L): + amounts.append(sum(subset)) + + print("number of possible sent amounts:") + print(len(amounts)) + print("2^N:", 2 ** len(all_amounts)) + print("number of possible sent amounts duplicates removed:") + print(len(list(set(amounts)))) + + + +if len(sys.argv) > 2: + kk = 2 + parts = 7 + kk = rand.randint(1, int(parts / 4)) #how many sends to demand + fuzz = 1 + decideAmounts(float(sys.argv[1]), float(sys.argv[2]), parts, kk, fuzz) diff --git a/source-code/MiniNero/LLW_Sigs.py b/source-code/MiniNero/LLW_Sigs.py new file mode 100644 index 0000000..c7433e4 --- /dev/null +++ b/source-code/MiniNero/LLW_Sigs.py @@ -0,0 +1,55 @@ +#see mrl_notes .. obv this is a work in progress +import MiniNero +import PaperWallet + +def keyImage(x): + HP = MiniNero.hashToPoint_ct(MiniNero.scalarmultBase(x)) + return MiniNero.scalarmultKey(HP, x) + +def LLW_Sig(pk, xx, index ): + n = len(pk) + print("Generating LLW sig of length ", n) + L = [None] * n + R = [None] * n + c= [None] * n + s = [PaperWallet.skGen() for i in range(0, n)] + HP = [MiniNero.hashToPoint_ct(i) for i in pk] + pj = ''.join(pk) + keyimage = keyImage(xx) #ok + s[index] = MiniNero.mul_8(s[index]) + L[index] = MiniNero.scalarmultBase(s[index]) + R[index] = MiniNero.scalarmultKey(HP[index], s[index]) #aH + j = (index + 1) % n + c[j] = MiniNero.cn_fast_hash(pj+L[index]+R[index]) + while j != index: + L[j] = MiniNero.addKeys(MiniNero.scalarmultBase(s[j]), MiniNero.scalarmultKey(pk[j], c[j])) #Lj = sG + cxG + R[j] = MiniNero.addKeys(MiniNero.scalarmultKey(HP[j], s[j]), MiniNero.scalarmultKey(keyimage, c[j])) #Rj = sH + cxH + cj = (j + 1) % n + c[cj] = MiniNero.cn_fast_hash(pj + L[j] + R[j]) #c j+1 = H(pk + Lj + Rj + j = cj #increment j + s[index] = MiniNero.sc_mulsub_keys(s[index], c[index], xx) #si = a - c x so a = s + c x + print("sigma = ", keyimage, c[0], s[:]) + return keyimage, c[0], s[:] + +def LLW_Ver(pk, keyimage, c1, s): + n= len(pk) #ok + print("verifying LLW sig of length", n) + L = [None]*n + R = [None]*n + c= [None]*(n+1) + pj = ''.join(pk) + HP = [MiniNero.hashToPoint_ct(i) for i in pk] + c[0] = c1 + j = 0 + while j < n: + L[j] = MiniNero.addKeys(MiniNero.scalarmultBase(s[j]), MiniNero.scalarmultKey(pk[j], c[j])) + R[j] = MiniNero.addKeys(MiniNero.scalarmultKey(HP[j], s[j]), MiniNero.scalarmultKey(keyimage, c[j])) + cj = j + 1 + c[cj] = MiniNero.cn_fast_hash(pj + L[j] + R[j]) + j = cj + rv = (c[0] == c[n]) + print("sig verifies complete", rv) + print("c", c) + print("L", L) + print("R", R) + return rv diff --git a/source-code/MiniNero/LookupValues.txt b/source-code/MiniNero/LookupValues.txt new file mode 100644 index 0000000..27d576a --- /dev/null +++ b/source-code/MiniNero/LookupValues.txt @@ -0,0 +1,16384 @@ +0100000000000000000000000000000000000000000000000000000000000000 +61fe7f0f5a607a33427d01dd1fded5ffa03fae2e9df9ebccf2e0a2f5bd77a204 +c2d9ed0b8f7218e4c6eb28fa708c3db1f04f2aaef71a784a79d8ba44962b932e +872501b9614329b1c7b128b281bc826cc41a193831aa482aaf91962946abdc89 +4d1cc5abb2a5e850e5e64c51088efbb9dde67a2801000df4ff00a48cba18b2fe +f403d9d170341d0d470cd51c2488fe1c5ca05afb3cf1719367f2fc546f19ca2a +27c4ef97953739ad3daeed4023ad97fb17fcb4a977aa1d456e2099d4a3f747b5 +c2a340dd8156f72f58008dd9a9e9a5c56e5c875d8585b7f66cdad2d1dfeedeef +384e6eb098cbbd174f4c8307733f4f34f52cca1b69e8b7ef5e47196734fe0d63 +1fb5360d260de752fcad9a007a49a0b6bebd6f3ecd1eb084c18ae4021756cd2e +1b80422650f0a8b8808b8940384ba96214f4a8d52c56d42c32423f4270991261 +05257f28124d49792f3202f25718c7145405b3ae1666f3b041662dbf5d8e6e67 +e252be90c097916065c69028b21ee5bc021014a3d556dc03cf10910d12438250 +4f895e3212a3b01ffabb42ca2711fb483d1ef03da11a69f4732ef734ff0d4ad3 +119f926bb2e9d400d181d7ae537a61a914aa38ac84f25e3db83cdbdbc99ea602 +7642ab7385842ebd3a28a905820b019ad6b7c92f1472b7eff495cce3bd892644 +7c02773a8bdd10b48c987743103f40fa9080b2780139f6d105965e973b11381e +a2ca7f430c24a2fc3121fc119399837fcf80f328efe0776d4b388b7be6336875 +0bf9c4d1af9e2f3e05c03d9486732c44b2be514c2664a3d7f067cabffd23131a +407168a55f08099459d3dd861e91eef401d51391cb5cc7d4c7be0f9879b7e4c8 +c5e699f6f13e6825e8a85ad0b4fcc45b24c1321ef7f3ba518f93140ed2531795 +6f5f6c0829f06ee32ddfaaf797d86a22f655c24421c949607f804f7a376ed040 +53b6e58f4768fa5d7fba25129094e406c635e702ea819fc9b952b7eb6a87e0a2 +84da200e36516ca1a0d5efeb6e0995292d51866d50b76a9d154948f100eb4426 +0335d6329dae3681283a32a1f7666d33f2f91621bb9dfced7e9af216489552b9 +a0eaaafc0c9023b015346db339c7a48079c9c4226604160da530d5e8add5c64b +a8254198828ea1d5094f893437f2b2e680b560f9ba7e322619e91dad6e94a123 +1eb142f94eb0f06140762a323ac0525a76931df82524dc5d77c43d62799a1845 +16bc295da19858c6eefddcdab0fd80638aaa80da89bd14452f773cbca67f2d8d +09c7a8783e6e110788b30250a2b97e81f530146bc929f1a0da22f49643dbd7c9 +2aa9178ea7f5a928d621a48653b23aeb3684a4a31ffc2ec9b93018f8915ef74b +d766237c721f7b58878745d8c1f5f4a0cea5ea4eaecaf0b7d026bb65f188e52c +aa0e30be724cc9cc020cd94bb7afa9baa619c2fbac90079b39788fe3f6d131d3 +ba42ddf58ba30852895329b4a0349e4fe3a8a3c298d397dbd847222ac20bbad0 +7b63ac8b0420282945184ba40f65d92033ca56ccb008ade0704572c1a4379d78 +a7127db49f87d87908948d073f7688d7dddcc8223b1e076bca4698ac63511827 +2283548e8e916e67fa29eee8e504d8003b51df7d0c1579bc96ff8e20736558ab +2398675c15fd52e30c472f9646509701e612dfc84cfce4464c5e7d00335ba579 +93825f7c39c8901057449d3529dc1045177f3b9887b882970c314e95a90e1add +d27a5a1b04bec3691d31275ff3770d748ff0819167dce6e455e1ecd4965b7f6f +83e3464fd03f867859d6888ff198346b6f056296ca6ec6f0e6dd184d3f35f79a +2aac0b1085c6101215522532158bd4d892ede366d6d9863856faf73b5d3f8f0e +d789d2d062016b34de1c6e5b5178dc5d22c5c13440ed2a4f182cf73ad3a1e157 +475eb9577d1c0dee86c762f49a34d026823265a1f9d03033565400eab2da30bc +adb748d1cda54852b1966d024675429f1c9a4ce4f9a7bfe41f4552e2592351ba +f14515e85681a724a12ec2d01d34da0cacd689edcd61d7f2bb2489eafd1b9c41 +f5609550bdaa7ed846fa092230e73760b404334f6cba091e37387a8ac2188c8a +1b0614e15a5efde8903da11bf159f9f7a3691d5ade19b562e16cbc8517758097 +af46b30526e3e1f496ff5c9612505cfc4772a071a337381d705ec7e84aece58f +3eb65924333ad7234a2c2a129182ae2df690ac395dab8851fea0fcc98055db0b +e634206490f49207e9d02710c4bd58a9da0057e5537961f7d43b09af0d8c8f7d +4a80378113cfb6adf0567edff8489c5c78b909c0b16be239698b0677a207adf8 +1d162142bae9b6a4651f6b00452bbbdd2ac40e32bbb48b3492709f39cdaaa0ea +157e0ddab0b1f6ccf808cdc0900256426e8f0c65febd7208232c6409a138c67f +0fe24e44beda51793c72c8420ff53784cdd25d07a9233d0dfcbd97c505e56f38 +0c936c9487954663bfc6e26567bf3782025be82fc05209507bc9a4b998d8646b +89c36f9d6f496030a65b29e14a098579f14449b9367e0792639072566e74499c +6922526b46d6611951e872def4a05530ec46a2d9f8f310dc681ae77b6322da6a +1d273f6e3c2e32a0679084dbbd81cd4ace2c9ca5edcce0a092cf74097e8ec75a +dc2a0303368026db9c356c97e08738cf8ebf6b6a52c1a815f00d5aa2ccfcfb74 +5a4c9436e8b968f749ec63da9cbb44010bb735774fc97397a88b68b2b55f6cfb +c474fb0454f4626a312581270543cb32fbc59b85f8aa96fef0db3758621b3e1d +9d396bfd401f970ffd65e88cd63407c7466fe83c153b8875ba524e13467e0a77 +019aba99ee010b1566282ee77d5eba299ec599c13a632a602f2b5f2e041210fa +abab682e0a0a3d039f482c465ae76e9017427c878df0a7362112b9eae6fbdb50 +d56a98b1cb963b26cbab6f5c1757d21850880c1204c6f2502baf82f4c724a85f +ec3525f6f4d1caec3ab5d2efe8ab1b2723ec7a9de9edeb8f724713c6b3f8b63f +5965faf9f8e5a69f679481b7dd85bd55ebb97d8243e744c56ffc08d460664eec +b1168ddbf661074a6144e70858b81726216acb7caeaebffbece7e3f6b12a3791 +420413b333d2d7a99e58f7bef6b99ffe55096b4c66c6598a86116a0ecb0e25f6 +e4ea1d380cda5ea2a389faccd32b78f4f16876bdd6662ed6aaa3853313b9ac65 +7b44aae7f9076782d7212f8969bdcc4d07abf84f8c805cbd61e29fe74ce46b99 +017a73944c21f5132b6ea90c4711d798784d34941e2c6e420573d3228ecaf4cb +e65035741adb651084daba99d4e32d773b71aab49eb1be5b7fc88ce004669acf +115fbd507ac1e9d989d421629f958571cd0b11df599d69bffea58140faf1ad2f +a0e91f2edc14f60cf08fce7cf27bc282bda4d94eb25653a27604e52fe446daf0 +574b89becfc0c83ab5716aed22526481a44e42ce96f345edaa5dfaf2f8c82895 +4c70745a600afc8a6fd0a94d59e842681081da5773f8d58b3f946acd66dd2bda +cf2b5d5906bdf18913b5e05549f9355096797555dc35759dbc6f66032d0e0c6d +a063696ff1156a33e7e197508ebf236eac263c2e6c29fdcf975ea281e12bcd28 +38554239929777913af32714cb2559613ca40944966c7ffb52ae349562d60298 +dd4b4772d7f21aed2d28e29a2ecb30b4681f34925372da27584a0c76a0521a8c +8eda69059bde7ab0d19a5fcafe4f87157fd6d48c905676a6d6a64b5c40e4faae +9b8e3f9fde968134ded911491d2da0167c6db94f4abaf80ebef6d07024170615 +cfc870a6a3295253c0135b1d94b47508a28710523bec4d9207e2f274b1f06ffd +67b909ee1b1bcd1dc89ff0126890818579d70ffb597ad30a69a0ba408cdea57b +637c47e5c9757d395aa9f682200e757da731cac0d4ce14a0947e12cd28911415 +74855b439ea3f50752fee036d2f213d35e6aeade2d4cb2cc79eba514cb664ee2 +6c17a1812c115a50cb364e61d03127e392db3222c1e21ff6c94e77a58c48f535 +2015347ce385088827c751bef8b4df54f6cf1ff6b5b6bd4f840ee1abf757e84c +050c04fa360c2067e4237a0acb8ea056b3dd17eab1c7cbaf5824a75f4b79b47e +34916655638ecf31e376e545b63e4d1c2037f721bb77f1f3e41d95cdc8f13954 +09334b29b3dea05ffd2a621e6b6fcb22e7cfa101613662b6de56f4bc28ae11ab +16d6b0417619282e57de1097b76d0ef2123c8d4372ffbe82da40de165fe59f56 +842c7edf6c311e733ae2293f01cfbe890a7cd4aed08fbb5184ec7e4069ce7d20 +985593422edd832a86b6178f18ccfa5b11d4319aecd3725b9659c59d37a3cb81 +7922bb8dd3df89b4e41ca4e0d2ccbb7b7bae7031ad732c8b925653773c103ad0 +d805797848b0a6ba05727c314054e26f3dd16b81b474df15959bfb4495b951b1 +5fa4806dbcc7831648f0eadcdd7527fb5bbf463e0a3a0d3827c1c0ded6185cfe +c37f3a0c8d9acbf7720645dde53f9f21145c2bde0dcc962e25b528abda327ec0 +0ec9977c78ac8bdc1323b5cf5f18d966c3f0e68aff309cbd98c19cad1c079081 +403ea6d57e21fbb899983c100af9225cd5ea198702186f1e4eade8e8dcd544d6 +c3647e6d15287cc18e527b8f50dac8fa80a6a39f8a20f4a4c906c4e0724a2cef +8ad53c79512cac41d82381816d2ce7a8a8b0533d36577c6cc2a961edd6d1016e +90179a208b5873ee30789e979e13f957245eb2a432a53dfe54cc85c5e84acebd +4130244df11fd0a59f6d154624f989e21fc579dcf15305ed919d94cc75720112 +eec35a94b2c84b0ae07b1d0e7347edcf9612a5b00ba499c73d628bf1e8b22a16 +c06abb0d0f6e4e7d5717dd214e551c02a8114179e772d8c2846932c52b9f8825 +7770ccbe10a7b067b0ba5ddd68e58fba17c1e77af869d4bc6b4a280e287cfaa5 +854139a2308830c6159333f7ade8a44f9d5b5850875bd916226e4d2dae28cf08 +39b1480e7e2a55a850634cc3e0587959ed9db06cf3145d5cf7337906909475e0 +bd819c95831d2cc735fdfc75fc99a9cfef8b5bb717ed4b73ef1e0e6885b581fc +b3fb15874b161d80f55511d4e119512df0a1271e5a52499b45874b7193100a96 +7056086c1d2ae68fd5ecfd6c50320900f86db2e6e23b232b185949f1c3a7d34a +d3d40bc277a485e79e32eef2a33b03a07cdc20b0b4d11429b0db5e123ccbb423 +b7d2797f552aae519fc17d6b5dd086a908cad51bf003b0dfee636e0532f93067 +9ef17491249e64951bf48006a93898ea8a326ecd705dca6219eef7c3591f4b20 +f3220b21f00cd6b83949c925ac6f552db6739b7af9c3f287eda78f8f17410e67 +2e8a9d3e03fb8cf2aad4a789a51596f867fbc74161e379f22f26631a220a6cfd +a96d4d4ef0e7ababf30b0ff2dbd242c025e49b7f5f0617cd9e9ac3ce42c346bb +5182742b9fd68591cebbcf87b660baca2a7e97c297b562bbb418b13709d6918d +056550a889d95a7fd6e768f5aa0d4527b72e9fbd176b4253a764deb959b22cc2 +bf79a451805c84eaf6650208cb575a172b4c97582e445cad6029103937a8885f +1d50e84e10403c0bb76c8b9e164602798eeeb7346d9a9667e0f1f92a56680c7e +93f7e669c8d7f4b0844182b595ccdd9b909ddce79f4f940b27408c1afb432b4a +cde3a3415cae04d2c0c9f680532a75525495104c59045a8b037ef6aaa67d6011 +02560a63004c88ed2bccc616c5e1262d02c3c9cefffe421ba01a395b7dfee1ce +0b1d7232b4aab91c7f26330590093d8f396670974909781aa607a0e0756d5955 +a0c58589a4de6f51861e406db95fbc673a3ad1a7ccb6d390be422a424b7b36f2 +7c29e4b810efdc34ca9e1c2c9186f92e5aa0bc8c03885ef02178b7dc176293b5 +f23d65f436c74cbf3cebfe870c62f315989ccfbe099001e3733baaff4c2db7b5 +55a309ab64b657376e9b38b776e5f9763572957c450bfa0d5f86edd5bdca672c +30353c3d4463be9ae8890e07612e85e695e3797d112c8833492f41288f9e4bfe +7e813432eb47c7a0ccc18e918ba922f7c5c6ebe846ca436254c35cedbe66d123 +922f0da32b6ff0672ac47b3030b33488e576f52a17f782798a4e412b1bdc0947 +0f44da69676ec415f6adc182fbb34ee968a9890f71aad54f973a5d7a4d15d646 +98f6e9938a7b22058583b9190cc1d75f90eb1b0690d848ff2587d237f2c4a741 +99a7d29ac6b684ac35ca10e0fa5d9c9973b280d7b4dc4d612a49dcfa5d8a93f0 +998a9b420d17006460f23f359df724a2b8245b6eb5a3ef9875797f559830cc18 +1079525faf3e95b2a7f50f12360a7e6d04c48c41cfc2d5207d362c45d3069d56 +641d95ee60d04d366b157637f3ce5be5f769fad9963ff056d236ddd0af2b44ce +951967079d3f9a048c995715a85c03abd53e4809d83d3629bc69f517193bd3d1 +4adc61c9fa968d9f42ef7d12478587ef7a1049d8d6e0ec550c082e87dd86ac25 +3fc20739e2cf76a78c80834f61f6d125c685921e2953b9d13b22bed7dd65bd4c +c1a201b0fb7b471ab817adf76b03e2db3f13436053b606d5f169c18d976e80b3 +8542e01b609c4e8843eb1edc54a2b0c15428af29d9732633d6d1b0ab9b126a5f +6641381d1006ebe5e7bfa92fc8842ad43b9b0637787b981964e419256ad454d4 +92018c456740ad8cc21bf68d2c0c8f7525f52160919ae13d466c4543c0c98cbc +b0c6221907a9de726d08c6386e0e89b412eea020ec4f2ab11624dd4015087bb6 +3fd7fc9478dcea724947631b01ec7792158bc1bb14fa6020c939d41253fae488 +378bcf17711fb6c55625b06a5828312c739cac5446c0b581dfe2f63dd31174ee +c3518f88efd694352a86ff632ef20a6be94640af4c4be9ca22d71df4a32d7ca1 +54b92530b3037ab5a82fd828f63bc8ff0afbe7501a14f797d6ce53086567153d +6af30f8256214ff40476ed8ef3c354eb2f6b463960f56fdb92c642003744d623 +91ae46a97b58b4d593441cd11201792c8655ac501fc557d82e47e5a7d59d8e3b +79d340070f53d8cccb1f59abe3f00fc1ad321e90fbe1f77753ac73d74d4a4be2 +8b5cf27ac199034da6d746b87a3e734505483716bd38f18b289e681c25a59884 +9448d05a7c6e7d8f92e8fed2f711846499c3606fe805c0163b929ae5dd82e515 +41333f9e8dbbd9589dd2945e2c5ea297a6cb7312a0036107c63c7bfa29db8b7c +43b70a0768de28da4ec04365ceb482bce6ffbd6b70df642325ed667d7a980f9a +ccd87a5cbb002d005cdde027d8501d4a1df363ab293d504da761ba86b2268d7d +5a8934e7e1a76a6cfa91f4a2210704487a5f0a12aec7392677de998b2bb008e3 +e9c7e04801b4192d1cb426cca462ebc3c50d428ad56823674db7c55b1b3234cb +59a7359b9abc70350bc7089980df906c7a1a60e8e3597666d7d9fb0dacc6cdc2 +ac02137f0d430c0665ac1ca47f13bdbfeae7adcb3bbbafe03c9d6955f6368912 +0a189b8f7bcf01ce6dd205a271651ab30d5220ee805185686f8f94a220d329ef +30312d99ca312358d5aa1eef7d1d8b4158b46301c1c059c612333edae837e9d7 +bc34fcff81db4f010a8f4e29aac4d4cdcf312b4e065aed0f0bbb7778e32b250f +a71598a6553eac06f20f8abde8cd3414ab407f9b8b5d8bbe3c2ac6764e63ace2 +8855e038ef10aa24925e4bc54935404e86ae514e9c9c8f3ed8ac1cf9b326f58d +6c82599d44f5b251e657f68f7884e02267477b1d9b574a255e3834fb0d9068c4 +54f1622d118d1c5998fd661ad5f2486afe055d87d2bab6fc7606b6e5529804dc +a69746fd86699cc14d3ff62b98db334ffb36fa42671d42fd1374f9e3beef479d +53e072806aa7504845c4aceaeb9f707d935972f35a95b922b8406ef11a59d2a1 +a66e4e9d9136c709313de9e10157436d1b096bdbbb94469f9f66a590cff968a6 +75b1e9c0b77fc736af74c038202f43c77f4129a58932da76b16d5d0e50369ae4 +8b88e93ee6074db5be8641fa5ae5e186721ef46c8f7a363559910e3dddb1f9f1 +b276e42c8414b8bdf8fa3cf8d3a0c35324f4af02930a15f6a1710b046f712d74 +cc3e3dc80fbef9db78bb024473505ef7105e399f77b3e0e3a4b3bc877e5e67d4 +b66b4bb6d234915a6ca8d2d032cc40a9543b9abe008982f214d6f778903f4227 +8dce24f41a0278e958fd33b12050816eac35123d9a4e61d37a2e47ffe403197f +3f56c0997417378b68400cafa72512b80872044e956c2f474747c8e0acd7ee31 +0e2446b7096362a662c76fd4844c8017f0b16939a38770ccb146618d441d65b2 +077b51bd5eb019fa092e3f9403ef8e76f3fb12c4c91c7b84fb07ffe6944c117a +b278037417f29b6674216a652db6f2ad2c19aaccf0eba6d7f7b8810b9c63b5a1 +fd7e98b30347af0e91d0314d649e686d83da436510b573fca508a334377285f1 +4993ba65cc341de5ce9bc9219c4d1a47448c1d7bae012d5c18209c523a3c2fa0 +021e03870cf34fc53d394a60ba85f0dabed70e3baf74e48f3c40af2e68315199 +df32d2dc7e7e661e94481ef2369c5f7f3bb067fb59724244b3e5030678ad78f4 +8de2d52211b8e001d48aafe41bb0bd949be7aaaa7bff353fb0908d3d16c1c483 +08b4fba921cdd8b91a86c605cc278210fddfe8693d3450f9ad79ed49724b5723 +ab0e20a08a77eb0e1523ab2080f318fb3ed29a5c74b71e20e9c61bc42af135ea +08f0e9364a8d8d19c0bdc8f57c1d98f8850b3f21bc54408a2800c676aa272388 +4bccff6ed64f3e8bc70c27b7e35bc136a569c93f6cc720ff845e01b184e98936 +076bb8c63bf8bc0796e53022b1353acded7663d10d40b219fcf69aba57b92dba +74e1c86f886215bff9fd1a02b46d17a0b1d3511fee214fb12d7e5f67a2b57cb0 +1a9dc83d5f1b99c3c4847ffa58999564773e92ea16a2fe2bc85509adf2f7d7a9 +1e2b27886c6f36d5ed52b5b147c5d7cfafc0481e6ed2c84ae0ba42e46aa34d54 +0ccb948c6a7f4fd33ae007bef7603998e72bfa767e8bff62e988d680e909dc34 +0f8cf07ad17a0c18f06e1646217f5c73465948bcf184fa3c306904e456cd1dad +910976bfa4a4b62faae90e1e5d74933a5807af8add8c48df90c7be08b1accc1c +8cf935ffd7a195b97b3daf08c0e644453192d3b9aa1a8c2d70ff3151c1486a51 +a557c9c5058e4344f8ee82456a8f1314c47af31f4520dc50fba39c08df709535 +8250a799809475aa11ab2e54bf7a3aca3da67306b4c64f36715b4c886ae4f31a +a16a5e51c7e3ae62432139d21fdcea02e044ac86dfd03153454fe6b33c5461d5 +606be681604a2bfaacfb487305a2d47fd20f7de91a305ec7b60b0afb4b81de85 +73993fa44cb3e15a2e7da0c29c3e193c7f43ee37c87dadff3edcab008e97a84d +2c63d378f7f5720f6b84e7f0d1b9938942fc1e140ceb3c0d10d0fba15518fca4 +30a57db11986770c23c4ebd25796d34efd225de8426887a155e4bf2a71686043 +c5ce348acbcc803cc0dad6ebc94d7289b4d1fef48182e79c37f30039c0644d79 +a8e9bc17468355e36e97738ca8b52bd520e7161a6ad87a5459eaefac9f2e0c23 +894ca3d14ab4eeb0136fff745676820761ae91f32a64a9e81c5fae7d40273152 +6ef2496fd61ae16c2e2c26daadfa2d7e54606b27ab71244cfbe69e167a2ce302 +7608c03fe2c4434df60d7358047e207eda4a7fcdda0803041cd72771b1c4fae6 +7678697caba3558e3891b5a05b7f7deb7f4024894a6ba44de0dfe1527a207110 +3fecc6544bc7500000c1d299c8a74cd74f32d11c8d6214ea10ae097c41b2483e +8b0a69dab80457c22b7aa32594a52abebdc879934ea1e8164efc28eb290ba4c6 +b36db8b2de8c59c88925c59685c42920313a3a4853d412dac533f4e703fbf097 +fab90ef47e404756d0ec0b52b4259c8ce2cc5987257169886a58cabd05afee42 +978651ea492d0e401b28257414a74061256253340ffeb8a33993772098457ca4 +8f7cc9fcaafa52f8cb01ff4b10f132c9a949b6dbcbfcd8ffa6a83ec1d8f8a0d8 +fdc028df615f0bd6c3b70a8f5e926e895133cac1c7bd13a0cae471a9a7405c99 +5317467512587871e496c64674114721d7534f23d3bfd9817d70cc20a59476a3 +684d670adc3c4e13162f52c869ca93194bd4e6611fa90f753ccd60643c8baa6f +56cdffbe4f7a653523e3efede288605cb308a23bc817195a93f76a2e2482e90a +5f487aabd4e937c77a50b7b1d3ef0be9bfa416ed387bf073aec4fbab0e17bcc7 +565c40bcdce34f4a26563e20efcf9c83a0199d68cc39d7bf695c22442c89817b +ff546982959194e47dc56f64080cef37414ebc4e38fdd25f0fbb232e32fff480 +a721968aa7e18d52bb3e076d8f525a1c8b88311f67584d84caff47e270e0c1a6 +a8954ce584b201886a80c8cef880cd45e740a5741c3ad4be146c822ed4e41781 +bf8328a950438445aaf34a48309756e82d81841d042c045e3452ab055f32c579 +32af83bca00d0956d55a24ad61f348600e3021b11d83afb0fe087d08cfa5c0d3 +c7d076c7d8c61472faf8c0f233097d88f63d374d3e7e599f10ccc34928c28e36 +e0d4ef1c368f68ee553b21b822685faa8101c5d0e944cb2f7ed6c08d4537dd07 +e10b240e2e3e2a0363cb049d66be094889d535226c71dc8b372d2cb18c0b74e3 +5c604d73573cb79ac5de87c5f78f27e6820dfbfa91e24cb8427667733691f4cb +a987a660c434d06880094e278162b05b52dfa9e1d8eff68155732e384fa4657c +2c40ac05d558074814918e1bb22c4af4ac8445fafbc919baa77743d7179d8c55 +dbb34f411511fdc7b43386ab9f4abbf7c7b9065ebf19536deb7fda1583e4958c +13842b6f56523c730b0bb3b4d95dfd154d6fe3eb26989a8b136302fe1347dc14 +9b085506cc9c1a24014e051646e44e3f0e17e5d3cefaa437b41305ebb66b3617 +8add99ed89d95004c0fc623bb03d92e609d496f2ad099df67ffea35c418ef3d0 +f870bf3da99155daa568410fdab4aba73079e4a030e4503d8ea839dd13c130d6 +f915858823c4c8f19245f965baf00470808c56d73cfa58dd7fb76055793ad28e +add39f06d225481d65763217802af2e940b557b4e1f1c0c3dbf3254f501332c6 +9951add64a6acaf3314af3060f5731c957a723b678af3a7e839d9eeb66111d32 +160f029a45d0ba6dc715489e24c8739ace9be8c59d294b76bfd2482620eff8a3 +4bf6a5faa1330444e08b7d6becd3b711270a99ab1d424a5d3aba93456f2d0ddd +2546687a660d873459c055b2f56574eca9079020ab78348327cd0ce10779c2b2 +9aafed44bc13c763cd5c170a27a091b37d9c3f5a2b1d535c16557ab8f1ea3646 +aede6442052657edaecbf6de6e7c1341872a44f34b03b4d4135f1ef11c82db97 +31a42a57e27190e7644c472d22593765366a3227757b4af42dd0c6447665f2ef +439a61bf3102191d5af5bafaea90cb472060bc070634e4315bc701a1bb158ebc +365f62cbc5125baeef07f4663ad65df3d9f2d9a1a78b96e2bab4d0fd3e423474 +05cd0ab779826df22be010cbc0d56ed641f00a03a13db87498a3f447692f98fb +ac492c66371591fd40a17c7ac3f5f0d065ad526700c245180541b6f7a177f2c5 +a5aece2ac8c90e330f523da3c46a7fdc65593ef590de2d1a552fe9f30927fb6a +15f83d4a92aa0388b529783a3588ee99b87237afdd3bc03a7f7fa55527742081 +6361cdcd6aa0843d8fcdecc905abf092cac0ed38da95cd76d57d25324cba8f43 +06549400b6dfd199f507e0fe1526158e2292d84380c178baa3c3829368899e8c +4335d2a9007259309cd8c20c5c98db01c23c95fa6ba83cf0035b7ebe958e1b50 +0bcf281f0952393c206975694ec92175f7bc5c9268923b0b3aff92dd7f57af1e +c377501106ea4daf106bb2db654d67ce144ccfa51967d867366456de793c644d +1c74f9d0a009d1b754401596f3fad1c66725f3c196594ea318436f685ac2f872 +af22d23683fe5da45fbf1e345900beb4c9720f2d3e97f8a93486d232ff65c0b1 +d9c7624b8edd98cc7de3b1a8d4ae2dfff04740d925f7ca0c888603bd0460b8ed +53ed9841f930a3a66ee7edb3d03d514086fbd0fffe3fe34c06b4c80340275b4c +efc63bc8d10f3a73a007bd1d7d783cd6f61db57957a28147078fabc634e66c40 +c3ce2ec4c9b7f7c9f4405aff25ca00be7c49cd4defe4e4c576007c4244a8695a +1077fd2e43801d03bc1cd4493826aff9bbf8366c870a8fc01d567084bc726295 +514127b9053bde933bb5797ff144d2c30c4865848faf5162818b958602aea29a +f5a80052b79e8e4efec4a456e9b74306dbe3e2ca578f4261916d81d8d34de467 +d0b939025d098508f85fc0f0313d7d5d57ffc024199495ed536376b92a60933c +e86f263d496f70b8d9f32eaaf0edd63fa04ef08073ae3c4f770db9f74bfe063a +445eaa84c3a31d96b5e54b67dde17676d0b532cc1cfa3da18a154e612f77579f +435d24ead883b4b36b527da1c5e78d84e3df6d2ee20ba181eaf12cce63696d67 +158badff4165e18bc204c99f7f767b853df27d7103a1d80f0a79d9a701917e1a +dfebc28934c7bd33ab9ca290a03fa85d93e94279d8ab5f6d4b899259820d1350 +c1aeb4bb9ff8b6b5fe6911d6bbef02180bd7f6c777183217fad6f7a36c028900 +6aaa79ff22869fc1a400aa6345c207134a8279ac0a92d4a9d02077eb5174a299 +25ab152916f333dedca21db22a8ed9e8996bc861c1b8e2117399318752906abb +ab07188e6acdaea6ce6aafef804c543ee852f94c49f916ad48e7aeaf18fb049c +bfe50cb4e05d51d4bf1251755a70253257c8e5b4aee83af96e2303da7f9c22fd +a12a118e68fe41c60ba05790a2637f8b6d7b400ec50e6a63077f9a9427d83fd4 +45c1b4ad418b6ecfcf8b0f222c793594e526e5cbb660327f57d096d5eb948455 +f2925e547682b20e7f8ff9aea2f1a1a9f1ad3eb45446a9c749608faa189522a7 +5f42b6f66e24fdac747e6277a5dec105c7bd182260a5d3bd25a5004bd814c90f +5afad1c508bb5e4f82a3031fa64d265bd2fcc62ed0664011911bbd4da12e2055 +95cae5252b203be2b5d3cb12e7c3d3e33e4fed2ab94caac32f9060ec6a0b3c97 +e4ec7c3f7892a7bd1103288a70bf74aceb9424d6226096062a868f7b0e8934e0 +d08dbb41f28930692d337a1721def8d0118cc30453426110f5a5ee3b23507cf8 +407f286d42c9581431527100dd6ec267ebd566b6346b28350edab054ebee8758 +a190c9d83bc3970bb1599ed38ba20c3c3663443af4f6d8c0cae35d1d8ff866f2 +aaa8e4ff730b70bbc1efc201776fa104be0495fd66f28a6fcfef2de59af26a0b +a71cc51dd2e3b779e27e672c9e78f788b27cf83cb91799e1bb4558d4cd0894a4 +a305f0e4e7ea5362e90f5d23726ba65b4d3426d6b28528e2250e97c9eaa8deab +c579d40d320b05005d323d9bfa6e41ac360c282f35708ab9ebe736ecb89ac585 +968e656a9017e1df2aa81f10bb14794ac298609c774f4690466dc2983ecbae3c +337a842f8cc98a4a87dcf69209dac5abde2b2d72afee3810b7850565d1a86012 +a24ab85b80aeb8f00b7fbed01ea66a9fedc6c97c25d2635964d2a18ff7436688 +3964af4b9ffdfb570b0c60f901350573bf84e51f5360a1291c7299d119a7ceae +18e22b25ccf8a0296ca82f2bef85519bd401bb225c85fbae290cc036f0ec8f4c +8d2400378069b8c5f04b84b9ed6214ce7f42afe5d5eb82a227e6eb83b1455107 +eac10686c69c6fc63e8056de3062c2e2ee4494ec46e55e6ac6b26512c3a0d19b +4c7ca00ff7e757d06ba7c7c72d583f5fe9648f230ee197a81b641a961f407766 +4fe752547ddc019f42aab29f9b055d3887a6392350f4feab982d321b14f5fb6e +74c0bf161fd9980a9d187d897f708b3469bf3636be6946c54b22a92dca7fda19 +ee1d037c1add5a8366947f5b76c8fa79465517d16e047810aa8ca598ccd5dcfc +8edb2134f10b6ba637c514ea9a33489fc0fb1d75db230634eaae75e4f3359373 +4348d989d4390d2889a6dfd9d9b3f34f6fe8cf4419adb8e2c5cc0dc0b3b75915 +55046f31688636b75ea56c467db0020597a54f802b123beec5e8c18c2530cdf2 +5b7c3381f4f534314b49f190b1f3fb14e92bac8ffd21541c2e7e8082e798cb01 +d9f3f139fa75f936ca3c05b4241b56d80f20adacaacb4b4d1a40760d0e024c4a +e28ac28c74ef395fba8e43f2708bb7ef87c334b0c24492ccb5b7dd7dc0faf6f1 +d3877d558aac4db01a92c41c729a391ae8b0189d04d4d32fb639baeed3d191df +05d5e1cd56a8131988e12ed7ecae7221e4cd8af13e6ca6b42de85b9096136c3b +701064e53549a3fbe0eb9e02983058c2a27e20e0c3008e510f698821514ff7d0 +64edb42a14be123660f509e06697318d34fe2a65fcf3bf0803a13e8910d10830 +74478ccf59a29b9691e3d7f6a950481f51a508178cae53ec2c252b88bc0d7ce2 +1b40931656a47e0b9de8bed552dc533c62c4de49105e8a71df736521e122d7fa +ca2fde178257b64a01beb49bb8c1e307138a9302d93836c6a71d794dd93d7081 +4efc895b5d44d025e338f51e3a229df9a96fac2a9a412dd3b0adb2ecb4c76199 +08fe75aa4b409390216c94c14a25d56848d43ae659c5f3a7bfdcc071b5128dbc +fcaec17547fc0c2ffdf68d31c94d3685aeca01df8c7df683f8b3814cf0ab6406 +d8f05f91bb6fab0c2e58c69f4c162c956c105e44c187e8d82c66fd8689bbf1c6 +e8f8bd4163a2dc0d3e4db2b0e9482194bb36e400d9af6766613700cf3cdeafad +2feeda560b2fea1f5c75f7d7a1ace0e55fd6f5fa7449d6b7e1df96861df0ac93 +6a233af6932153e28c9bbf1353c7a2e6f27dafc3b665daa8358c24554e8a6e59 +2deaf5d1c007ed09d445ac5e5e507e8d2ef346e482031ff7282e4ec1ed2fcd47 +9704a4b5d611de3575709ec2aad5b842b5efeca0d58bd457be747ea542706bdb +e8569ddb9afeb28087455cbee8192c68e77d425bfe1e450eb0a58b1d6f3b9ed7 +120740a9213d79c0c4ed463d329ababf46c89874639495f312d28f169728e22f +b3ae4183c6aded8ce00e93a610374ad60ba721231f97489a25f3079681453135 +5828489ebd5cea2a3400b56b96066d004d8bec8815b60bc2f80d9a85960ddbcd +31702aa58853786b00d1920bf1bc32f92fd2ee65734a454bc1996ce56e80d2bd +43f19432348924000e16a26470d687ed59cc2d03a41558af561998341fa2867e +05978aa6b73ffc926a1f945ca24fed69dfe97a4ceeac895f9f8e6a6cfd9a55eb +16f6da1740a8f539b21040e0236af6b51319fe2ccf118684012b51998c09e6c3 +ceb2af1878759390567e5580e24751b3efc929e328b7180a81318dc8216b0e55 +6a8abb64c12b023b45957fb96fd0246d51026196e1e599eff17e9ff88a7471c3 +35a20bdd3162d2c6c30f1d2f1ea2aa4e5c83df0688b32f285108b30851e28be3 +e3ce66250a9138a884a7cd4aac9f8c2535c97c155bd17c28c636eb0adce13233 +d623d17091dd98acc4ab7ce86c12be6c87d966311c5fe2e703d94f71afccfd2a +6da8e01b80bb24d16c91ae5dc1a7a5a067b7f289a41f9a4b112c4c2f1737813e +7ccaf48785d23cddd96131dabd4678a6eaaa46c7e6c0df7410c22ed2ab27455a +465ebe00d3439f656d9c26327c37c319cef0ff3fa8ea5c2677d232b4534b57fd +a6f7452fcd239ef6c7ec9c4e9c70a0e22d4eff4aeddb5f97d2e24f5c5184ef89 +8b3a7f74af1627f05e067da19dbb513aea7602f084d51a37472a5c7672d319c5 +85349dfb2590a3f4792d74782fabed94443a532a183829a5d7a454f1bc6172d7 +d43f27e2efe186475d22e7f45015853381c5549085b7b9560901dfd40694a9a0 +7083bb7a5ef6dde8f5299c45a994cfde52777e5f5ea957ce0e9c890c3c752e3d +4d276d270b80a40f1f6ff75c0f28159045bbf7d3aa3ab5785fcd6aad4d601ca9 +06446b484065c60b56005986ab31b543ef897a437815dcfb354beb4b38979c2f +86d276e6711ae6affd5ca9266f4f1e216ab7796e3b4bcdc2990929f1a9ec2b13 +2b8ba9369e9efbc43f0b0eb2e9e1322b7a47602d6e260144c8950d6dd4fcb579 +51ceff128fed62e454d9e5691edda576de14018ee7aa5d6f2c8f3d7c78b69586 +3e62e9e4f5a0090585e21a0a80ebd45b6ff2a64f50c9e6d2d8c439b6350e882e +9860ff69baad7de0aa455c7fd771dda11175b4aeb21238fdb245ef1fa17b5dbd +2d5d85860b37ec03f27e1c64b5b85f696dd2ef7de581413c66ae3184f55e55ed +a12c033b369999a7da29057d3a5ba96e42ad501842df1756c75f2f4e920d3503 +93b57ad9f18879ec3837d768a89bfba490cc857be2adc962c7de5b1af239fb31 +fa15a840a9cd1cf6383764085f3347d8727cf626ba0a5bcbad1506dc39cd1e29 +77ec46e6bb9187f2198eed0dd608754a9790be70b2325ab0f8baa4ad9703533d +4b917845eb8e88c7f1cb73b831854473543b750276edc986935e93f1cb4be312 +f7c4b97217db60ab0c5e6e25655d22c1c73cd1cf3e9bacaa2c8281da544c662c +d5af1a00fd2890c1584f26fa8b95b9a0212664089874b582c3f811c587debc22 +1c2a27c79e741e345afffb1379deb4822f36af50000e13161531f0b8a5cd6c09 +8683be19e7b9e9cbe1a848af5f26b856d01a6ba11a67ab396a3a409329342381 +1cd09ab65748b40919d1201fa53c35da185c829b5fe7a09c959d096d63b83a9a +334aad7fa796a8278110dd0ab35b945dc816e6893c06a7573b0b505e56aece33 +f7b2beef94b5bd502d3055e752710498c3f4ab17896e15bf856f6905d83ab2c5 +4910fff3e3d8fdabe15b282bb5cff88c7482c87f6a7e1ebb15a155307354df29 +abc90625bd828a4bb693dfc66f9b11e01e3b9a68394cc3a8a08a5a990fcf3189 +b024242eb4107a95cd3aaa1258118bb1812b80fba3fc071857d9365c0a6602f6 +a3b72710fd10605ae40f90e181a0a2a8f5f053fbc1d7aa895c25704826ec6c2c +6fc7cc13e36f5a65b1d3873a035d27567730ecf4e31f5dfab84ab0a6ef554da2 +a2eddfe42c8a4e33839cc3d7759988c871421b6c3b21e21ff1485cb399c43c4c +9221bafda77ca270b10c10e1a760d647da35fe78584f01e4bba37266e8460767 +4394149464cdb6ae4011b11600032b2578636c0074bce7f47cccacedec8d6a7c +79b59d705f306cf9ddb84c41390a4e72102095462a1b6d4fb63695e181dc3e0f +9bd345328ea56c170dfe91bdfc5cfc4c92b4c9e7fbf7b98575d8c8d32729fb95 +805419218c3d0066bced5113b1aa92ad9d2ddf0dfc1bc4402a27c7bf2fe7ccff +56668299676472bf4483837abfb6939ccdfa137153f46338c62d3e0827e9a2b5 +65071d52ded6d59e4f85752755d02411ab3ad7c82c837b806eeb393f499231f2 +129c9a88d7f75951a8c49947ce8b541c78d3f7b4d686beeef51124c3a5010646 +57abb04e3591b2c249aa37f053f9a8a5361b051f5a09472266505665ceaa65bc +842f48d77646cc101302b2fc012c4445a10df1fae561eb2f3ddca7ad31721ec5 +ca057416671280cffbe6dd3ce5491745e808299c922ebd4af21f0228dc2a58dc +e31af6ba8507ab772c69de91f23c02dc05095643e2adf49d7bffdcd16b29ffeb +c8a04c89ad91041b9b49925796fb72c911fc0a3532ae67451b9fa29af99165f0 +5e4d775ba52aa3ea24dcedcb6edef0b3c78aab4272372661bb308d9159dfec7f +9543c6b048f462cb860f6f3c1a49fa36137d949b5a82a0d7e31fb2f692f8a943 +5f653cec27c1fd1a634292d08a65a9cba0e9b0cbc3cbb9334c0ad3aee7622bec +44af5d65a8b61b3c7f58e28dbb3cda29305c25f3cfc25572d7b99442289a5a6b +bfebe59ff94edbc5972c8617c792d79d697c91101bbceb69d85d3475792b8aad +cc7ee07a4f6a7de090647ccd7390b23481438a3184ae071f3b299a0717d1971e +fc2048449e32f6bcfafc18ca1c7b26364367547511084f27f370b9b8e3e7056b +4d78541e01d7d86a81064221578080f340d02cc8de7a0a7f75a49b47f5d642f0 +c7d63a7d1e512255e4297cb20431ac905df5f1162daa4a7e6ba417f4f03ff857 +a83ca15f56e18916d9767e6102f81c784891f2ec47e365cb1f267eda3518d6d4 +39ddd001812d93d3ef909a47fe937ed6acfb582c833e85c1f212258cded3e81a +a457fcf7cded649a214b429022ee7c192d25afb7ce6edcc31ddbf33ba0e18d93 +f09945a2ec3371d6281e6c1aa549d3bc39ad23eceb938e36d5d3eee973dc034f +bf25887e5cdb3b42cea5c84233d53833a025d326c981f4371ec4df26f166a915 +247f85ece20c3fa60e7f166c21f324ce04c599befd6e71468edcdcd2f4f97ad6 +6544b878d5cbe899fcae0e239d61994b83034691101e8645ed467d000b87e0e4 +60bbf43c0022769f897de65ecd72b2362c399b995f8d8088f48a22aa791273ac +5aff34d78ce55c6dd0b032defeaecce5891111e4be9bab8cafad4876f372fc5a +b985cab7e6285f640a6d07906998ee02df584d0c99ea5cda33b5f5958f85ca28 +2c5fd06741814cea00e81643a98d34e10efb10ce47b9048e6ba386d00a6647fc +ff05d1678e9e43dd728d3827efbeaee0ef55671a8555358180db1d3146b7b234 +df88f35f88ef05971ba1ff000dd0593ee5794ab321703ed05b149abc282b51ba +6312098619be5dcfa8e9be3dbbc72c979426922fc2d189a52af371061db99c76 +d47c7cddef17ab0150ff5f74e2ccb72129873160b87e7cac4196f4950fee9fad +c5731782c924f7119a5e1a534a4ba9dd160af5ca2de5d5b39d034a907275c2d5 +d4d264743de7d42cf7ca92330d3b59006fac53527b265987e1deb48778bf1c5e +89dd1090a2d3df28691f766d4720d9c44a758c8a2f7d2240364d0e54fa7cbcac +340414626bd77706968e3c7fccb8b3b572fc30d11be7ee50c4255c3377bdbbda +933b4a1ad570973e889b369054dcc534e9b0e9e361a1c02150c250394928eea0 +aa5006813ebfe9ffba562ada03405159bd5f3b5684bf856bcdbed20325fee1f5 +30cfed927edd2559c6d204cfefbe91533d8d873410a6399305f3b27ab9147872 +086bb0a1800d6ff13db5335586f7d8664a8dcc3f0d56dcf6d372204ad7cd1262 +7af026ca2df202353ab087f2261859029161bbd64b36992956812ab98338fdb6 +f150e43db6c9ee37ef03d72a1caa5805e7e053271f22e6d78030753a62d7ccf8 +3e481df4cfdfe2510d15ebbe0737a8170e7bd6a38b8391a4d992cbb2a30515f3 +d66b88f739cbe8a679ba945291ec61b94132cfec470d396ac871caf89fa20328 +328de1d2528526da20cb83dcc1cd2c27ebbad43b99bc0850b46df5c1371adf58 +0ec7b4bfc3194414d5d9de1dc7e4e000f1354b72fd41245059ff26a262639e2f +2203d16cba18760d7b76dda437f9c6956610892511c920af082b67b3bf27762c +999814dfdcbc7da6836ed54924aeb4c1f2ded9e4d158fed002e4bcd16334b538 +0d6dea00c53d452fd619cd93139356e28f19c65479a59826c50022daf0fd60dd +c9ffb2cdb772ab0cf6b0283a8cbebf36a7613af3d1be4ce74b99fa176d4ec1fb +e662231517ba0c067cc004e5eaf49e8fdce9212d58b49b1b8913d25c3a82f3a8 +124454fefb4f69062ac2ffb50562c66820975b50f2f1d11cfd56a7a6698f4991 +3ead89b24eb379ac5489899e86cf4de937d0278cbbcd8c2136709356832b08e2 +a819890a04bd31fbbb08bf1bc13386460d9e16bd2e121a5440adee8ce8711aba +54d9176a56dc9bb3defb43b64cf8a82ad6b3b9421ee258286a7e77c5ff62ae0f +6241e601bcab967a5595455110575885e59cc7d6b3e5668ea05e16545d9d2819 +d01acaaf689b2e653b9198a740ef5d61067d2882579eb23163bbd112a5b9e56e +5af40c46e694106d9ef9d71055df9b270b29f030fe5fc4e3c47f3755db85de21 +5d2f8a8481d9614faf94674d2014573394d8388e51e58369cab09d568f1d029e +1906cb22b7ea69ec46934068acdde93b504e219c4ad591aae3d8cffadab0b2d2 +e428d47de365d35bbb8f0f81e38fccad8b5f9d84eb3e050ebc077d7e6d37999c +7bf76af6f92a5894a24e7af83cc2cca781da51c95035c8f43152b9324464d61f +1323a5f9a1b37ad2bec60551a15ded7a391186dd9da74844dc4dba4b47680dbe +e4b6928d96062e4c969e3ab6ff89ada154b3d263b9e3d3adfb1c4e011b4578fb +79b661887acbb0f236ee1448c360a28f7e160a683fcb877e17d5a6b76560bf61 +8e87ad46bb1bd75afccab06dc8ee0641d1ae1ad6945f199d378466cc703c7acb +ad56e8f86d972c3e7cbc0596bef3d131d160a509b40a74e1bf9057766d8f97cc +dde336d60920d15928d29ca3f3f045bd3b4ab5141b180ef46185ead11b4354fc +239bc88cc58e2dc63e4f970d202ee1e03b8599a465ab4c03b0ed5099ce56fa4a +dfec975ba85c86889f2aada0889a5f1c38010bbd775582eb906526290f97fa62 +95f68edecadfd6b581d4aa27b19720dd6673ee0abe77338df8caadda64b43c9c +6220d963585955617b1d07e332abb52007c85c59f1d2e0284735bf7e37f79ce7 +cee566995da0ff4ee5558333fe9523ef556308aa82835d58f931d6f3d0969c0e +a8cf07452589e63757cb4b2075872f2eda412cd35c864d41e137ca86731e9a04 +ea75ad2f9a9fc08ea79bd17c3a76ccb12f74f12052bb88d4de425efd27005a22 +595fafa8b6b209d8a67225ed31a2c8cd7de21fbe8c6e57b21bfc2d2f5a6ea7bc +5be1daa058e6a0bc31f0c7039b38e25fd6985aebae38e30bf549e5fa8e4cfc7f +17327340faeb02e089013a8eddc03471a77a43d455312018309a86dd58c98eee +1391e077f52d5d3ef4c72874323059c4de356a9c32bc35909c6ec0b009327281 +4b6b1c77d45ff3a9ca36692a5e855c38120538ac32fd21e6e7bf15c3ef5cc5c3 +c82904bc1dc9ea7c263e5d1d316945fd44c1601c54f85c11c4dad008d9e0c2ae +620b9906c0171690cd273b67f3167be29bb8073373bb9ea597575d51b1e8fcc5 +8f7e94d45cc6f044746f8fed2bf3a5795ecd9b42b1cae375e5b40eef776a63d5 +f232996952377656aa0eb919ec87809f3f0bcab46d8b95173a33004d89821587 +c56beed9e04042ff5009ce88a4e47d6f020368a04d9aa31717f54f48d2b89fdc +a551d9293566b9c205fef002569becb23060e5c89dc06a5f57f925933d774282 +ae5dc1b5040317dc87efcf92b849f66c6b18f67f33f3326eb69175ca92f15536 +2758aa4933a063c804d83bc90593251bc5861b53707e91b345d7826740ea0625 +e9261424143e1c826585bf1cd96e4020647d68f247b4a16920a57c765cf39708 +fb94acebe745b8083dd7f37112b5cc5b22fa0b4b2b69d9d4364ddabd05bd57f7 +e5ff884f5272beddce918ee0d28eb0a32511d362707f9b8f719ab4f8831f1e4a +1b00445da52642ba2d40e334add0b4bc779f12013e1fe5015886b4ab45890d0f +5b7c3da13362fcf34ddfb51c0347f896023cc1ba5d588e8cbca06cee2647903a +df6c36eb054ec292d55f0fe0c0d7e70ae5cebc5329bd823f5d8aae67083a0ba6 +4f2a13c741c74e060f7c469837efe23e5a16d7c2bdbcd3d3efdde9c7d68b940b +473d5902b9c77aa89c5869a40f86bdcc388622dee3dfcc2267f04909080fd76e +989e2f465a4bb01ff2f2f2e1c654a1d899546935554993f21b0770b8a4f123ba +8419944aa7c935e1bbfe27309fe7607eba48b03129fff3915a2f2bcafea57e7f +9cbf40fa461bd4d3e409d227153898d03d2a67722f299fc2bc1ee6147152059a +e2936096bb8fee92f3e9ddac192c74769361461fe51b7ba863bb0e225aff1d85 +e18d7801550305940cbcbd73e79c52894da1f484904f581b89c08b3fd0308cef +e787013b59a51221ec189e67fca11e08be976921f17ce496457379879afecdd7 +9b3efefbe7a8df3e4d0f61538178a3eee8732000ceb6e8046decf972ebe5c3e2 +39b024a99d7bfbb0ddf1d54db3cd621564607fb8777b781c17673f7c9ff57c89 +29fa960e7042463b89a27ae4159c4840be229ed2a35a6c5ac10a598b8d9c0772 +754dc1814f631bde3f5e5fe20777fad6535d5ab43a124177bbee5bc3350a012b +9e532e8bb3f210a61f8767b9e9e04f80bd87362e9bfea8ea1ba075a1ee394130 +a9fc95c8b7bbdb55d8b052f981fd121b4b269779d10a8adbe1c15525927e101f +45424423aa2cf03fb5d4c70f92b8bc36094ae39f98946164595e1f2ede4dbbef +3ab56dcc2b7c0645bff1820941d817751afb9af1ef0feb922fc1491c4a2ba5ac +0484b529624b0e3a8f21db254efcfbae342a6decd4933cbccc0cd1728206fae9 +7d2860bd81c167302337b3445e85fe83ff0966a40b06a2032dc2f7b7ee1094ea +7c6e583e4a1f2757ea51e86916b32b2b3e7dbfb300e79465b918d9d68b1e5d1f +421f8cd6deb91b101e3f0be0253de79d3bd72fca837ce3380a6ad67e41661527 +0c7098c69f19f82b810b6f7af0bcc962498d952a513fd54a84beca3b35461602 +c9fedb2c822fc469656668758f2537738358ee5553230113ad73eda5f8fa13f6 +e2ccc0e9843a578df1b9541027d5e9d0d49b5846b9882699705b471a8ea4a665 +5d1176f9d1cd70585fa85bfa87cc0e9f7a3a8e3497d700977d7b9eb876a1f58d +0fa80f6b5bc3b42718fc9ccfaf40861b6e1d88e4eaf693d47fdbac6c64309232 +c35335ef7546b539e255946af935fb813ed218436c2561052fd69b9e4b2bfae1 +8d28e32b28618b38c0dde3c4f26fc0a7a0cc9ea7dc58bcac46d2f7b8ce56eb21 +0323e982b4d758daf30ed3c9ba5a3bdd72fa245f1cf1f2296d4ad58bbaa44362 +8b20a87fc87965bffeee2a616e82d4df6f14feb8cea0383e5f46ef594046cb47 +0d1cc257b9740a87a9e395c96a0abaac76b4cde87452d251df3cf1dd3b722b48 +45378d61894541176154ab40abffc3d89996b508a81f8991188369fc6bee0a95 +ad028e9c9fcc3076970231d31c35f166c969441bd3bbf998791d8912c6dc5caa +871be588e0da42533b4c664b1cc8968830797d35ea4effa37830277c6cce4a8b +aeb3867559489f9495852591c3e188afee19d68a00d45e869dbb18e33b17b412 +4e6ed1af61e5a9a3087236f3fd10cc54aa8bf5b12b33f636f5ad8be650f5de55 +e63740fe0ae588652920acc765389a341408f1b4d2e00d5ba1362b5bde15130f +2fbb2b4acbbf8f3d4c2026590f90c7db07c5ee61dc84bf11333991cce8d6a513 +35b7c0e9083b38d3595b55e925e48d692de4c957a8a203502a321ab33e6d1373 +1e8a8fd4958ce4e91b75b585a40fc7d8b2f47d07235daae2209e6d0e4f2033e4 +2b5c2cc9bb16eb4335a8e67e50430cdc3a94c6928f7614ebdf65ed0b69e6a0fd +8a4b9057bd831429d4a791c8dfc7ac14ec0f7c83fde25c593fc2aba2e5adb44d +f7afc6a58ac23ec0d52c58b47d454e213e5439502d548f58cce1a18daec35988 +08f90457f65b9d03479087c7195f623191396d8816332934442c546238f0b3de +908ebe92434706febdcac79078cfff5f9056fb4225a90551809c2f0995bb171e +4052576fea001133bc55b059a4cbb753c24a3dde2aeaec653b4ae63343007912 +94e4fbcaecb1173079df763644fc6b3a82de3332a3969c495332040b0ed9cc59 +392862d63bd94c33bda843535bb899064f06160bc2d2e53f73d927bc80e3e55c +27c9d501721367fc0761a9afcfae4788481cb2f1e95446dd287b7ca44307cfa4 +80a81e2531ccc4c53c00396cba62b461a71f32a7d68ab91ce7cfa1a3c55097dd +8085c7268d844b362fa779e96d0ce1f0ca8b6c6ef4c91affb5504660f5211a1c +b0d5818bd09051629fd78551a0608a24c694ed305751ea84ed83be92482f9cc5 +c50965e61396213f6441d0a7c472cf5378860e03e88cbaeb301ddea50465fe52 +51b54e9f76e5ae8f4dcf0ff4daceffeacd06feca1fb43164f2de97a6dd5ee7ca +d9be38f113d1f9f3f2da0181ab4018aed100baebfeb704106552d499499e9db0 +7d1cbf4cf2b45f7991fcc74d61639d9771870ce865e0631c83651f7090c2ed10 +1aad499c3117a9eaccdcc916340988f8de2969eec96b65e581eb601f967f866c +d456dd4029f9da22ba5e00a1885ca15b7c5efccbc7f3b7ba2caae1a8903e2b85 +c4e24264df1734c95ae027973192cbd94ec19954c838f416d6f99f4723cbc2a4 +7cb8bea15d8e00f5f19614093b5aee81dcfcd7e420cc65079809ee5737e666d3 +f9e033631e288647f2c5b23bf2d210b3d3bf2c7219cbdcab1bbffd87dce00e2b +450b58f764da64a2a6e53818e5202451c81b78301ccb995ba61ab08e570c048b +095cebcad32b300a723860e5d694364b61a865493eeca47b6b0daac29b1a2469 +9c7d1c1a62a9528511142f01e142a19422d4daccdafc7d78dfaeb4611d347d60 +5a91bcd30e7f186da65473b8e1033a96c77c604e42525b4f50a0c37201014faa +e20f3163171190ffa4adec286b57833f5c09ea2b78fc91557c94eed3ed3698c0 +1a12488090a43655aacf9d12a403430ff02e6289c06ea019fd45879498843233 +cd4afd36fad4525b9803a5b7a7cd2c263a75a57cbcabcc420d18600338981fc2 +461d2cf76c67f6db518c615080b28d52eb58ae65c77d0e0f2ce3cc9e7306f7a7 +508793cea765e5b5d206ff4c1bd738e9ea6e0c3e6a524951b5497146436e82e9 +2de8a3d2dd961ef34a6d9548468d7d637b7f581b4f515aa0f70b4a0dbce64b61 +f896ec5543d7d26b40ec530955d490d5e0c068420abee6d0cdf120dd04351d32 +584f8b8d1b79135358e3329d09b5302ec31f7e011a74cbb8f9de1ad915c682ad +25d288b3e8f0b310b2499175720979d07829b8d6e4d38e2ab52e5e9d3c5ab0d4 +3bc4f4c1713730566138e828eb93c00b69cb0ee32e9e32c6ac49b21a1005bdff +c757bed6659e8ef27420cc392e5ec4ab3b36bc70ca63e6f101765e9622183ed5 +ac1af1139cdb8284e9c5bbf0f7dd9500073bb42918fe9e829a9a700a7c5f8af5 +dd49e870aa35649010ea251a5d7908057749d50e811105367d8adbe769e11dbe +11538d9e95c31e8e874d06b4e938bd4d8a608e34080462eb6815c26e79422102 +b4e02ceb8c4e44d09dbc0464b05361b37bce0f8c4945001dba2a370582d0cabf +24a2d19f10a2c124bfc778e45d9076d543e6bac166aa3203d2a3fa1a6398cc0a +a66546dcd16e6fd82e8bb5624e648dc5fb819075603f7195b3a7fa37e810c7dd +3567752f37f16f84fa61867a5fcd041820f6559b491db684fedb76f8550df3b0 +331ef1994827f0ef2c7217d9453e68ecda8a165d45695b0801d59ca32e5bade9 +3c351b607cb5ce57be2b87a8fde4049d41d428d554a44ddc5a13db3650c75eb9 +40bdbeb5e60fae5c1aab960ba825ecf17e0ef6916629911f74ccea4ec507dbac +ff48ffcb1068f3307bebc14587dee40aed21f50b9f5f8cff4d660af04963c684 +461347c764644997a242422e8a4ec9d15ed9f0e5ab83a767035940b0942c85df +a0e8f7c54c0fba32733fdce100f481ab725ddbb6482ef571aa9b2e760901e4d0 +a8077799949b5a59b7d7763a2f2c9fe5934b149896664bfed997c21ba2488399 +396c6a28147478f3a72c1fe27cc2dbea7ec84b05dc2312854df1c66b1497b15c +9e990405a098785e1ab8fd2c552c6d7c4b19becf9c1084856d5253ddec6c2991 +3a4896fa44842fd8567fa735e7b8e2c88eb1554fa61e1ebe410a0e28f581e8d0 +ad4ae4dd4443c5dd63925a8d5c20f47d942c2ed102fe3f94ebad7ce15f59284b +cd932b2d3ac08332495df2dc0bcf4f87407653a2a808f6f106c968d805b5eaa5 +7ef37a656537aa58df33db6b49e17f80d53e43b51219ab88f130314f50389f56 +303537d0859afcaa488948eee22d9a7ccfdf32bd8eb882de7c4a93391cd6c3bd +d395c31b7d33073ed652a8ae6de3a95c02f3f24b15443c9abc09d80a6f66be73 +41014586ebf731b1545170c7047beb4cbda1bb050b6a6ae060145e14f0e06415 +5d524569ade578d66535e4a7229b498560426e7f642109d3d380480276574c09 +886246c8e72878a8706bbbf8c885430dbddd82771e8ca4531a5162c6f67550c1 +912d21dd3816fea36b026419669ef134354ff73005d3291cd173267329193ece +177530d888913608c18be54d81496bf08f5adaf77ce8df00b903c5b6ce994bf6 +67b8f04ce5b1366cb8a7b36cf2d864df473e642c1ef1228e99d3e7c104362f8f +133db11fbda3c6ddd010843846299b44449aab011d4b5f2b5541b6fb649dda8b +70801ede95cf94c0baf18c49e9b5d3db1762ed06e433c8e2699c4497bbe48e29 +4f2699852a0429862bca46fac45a44475dfbbaaddc78a5e949e512c785f51156 +e6c375c5ad417da0599ab947a25b94bf86fbc59461eca5c8c31468eb282f1df1 +398d6868e84c18891d1911af8b9d2eebebda5e0d411b46a2cfc06ae96e35eb3d +bea43dafe7f86169dcaa1a35c63658f8ef02d01d0663b348d21f44acd0fe2986 +b2235bc2437b86ffdfdb45267958f5da0d08860268cbd1c1ba3db343ebcbfced +377d0197cf23b0060252715a538587f5706fa784287ce3b623f0ce3af2d705da +3be08599a92a22fb2c9ae602ca3b6294735378e0689fbc116facc64cc0d15f4f +a81674325419a39b68256956ac5a90cafa62c638eaba1207405656578110d2c4 +e2038a7dbde66058db6488a8b2e66ef4a0e14ab6d1f319b4fe428cebeeb29d52 +f4fab22894bb2cec36b1468bd7bc2dc2bc08a185e34b87e0c339c366e17d44f1 +bc7af4c52ece780e9f1665cdced4a0a71ca81c2920012403373983c6d95afc1b +f977f947f735fb95de338ff7a00ed0b2dc52383210985020465fafec718b5a61 +592df71b7136a457b65928aff713ccfae4e81332aabfcebccf7490d5d34d8dd7 +4522ff4053b9988aeba8388f92229705018a74fe7975c7cf7677098e8790bba1 +1fb763f0c3de6d6e63111e19f03c12e33030331659760f282d62c6fa6f99ceac +d04248dc201778689d5a42b5471be63ced91547d79ae543ce77b98afcb0a05ca +5c17f67fc1c295a3d16cce825ec22e140dd6c718e8e27f57af7f85aa3ce57017 +ffc4ffaf8ccb665839ca049dc38704c080edcf97fbdcb0750c54e0db603d1bd1 +3f05d3324eb326cdb0459c72ddd3d4ab1163655d7d9eeb69210c42ecb78b10dd +2860a85b73d491e338872fa8ce2b975b8f29cd46c0de4e0a6de93d69824a6aec +33be6a83069296f5a940596bca700311f4d9a861ff4b0697c7f3c0e3f099aa8f +1daada75759e726e5f489cece7785bd7b914f28f6e7f8af3ce8e7bc0f0c70368 +55c8a71b9efc2bd734d18603bdd4622f58ddd732d08a66d5a881ddc269c858e7 +7eb342cf2c35f264525d6e337b0d538c7610800986a9242578848c25c34c90ac +5c58cfee3a7384c3896e10e05e2d1c527ac428a256931bf93b6911e53b8cb0a5 +dff91ae8e41d92c40e839520071a3636769d1b8201fa1ced8424c70ecfb618d5 +fcea8d5c7e439782be8493138285321e587aafb6e0a420bf6c9ad2ead3abd4cb +a09668642e5dd8194333bcf69efef7bdee751b5e828cda1caf9a62fe93e45032 +8e08a5f26678bd11deea143a2fd64128d8ec6301e9b8ca37259260dbdbf9dca4 +00ad3fca66bd6d921bec6fc41e2750367655ff4bec2f66a99e502e80555c325c +7102beb18c4824a2ef80d125e7305bf6d40d13896a68ad918fa4241730a0de4f +91ef55cc068f4aa3c94e9a308a96b05437a67a4b11d3bde7a5fe71839fee5183 +cb1b751818fa94cd305eb9ed47d862597dabb90bd7b606fb735172bf8934aeb5 +d36532abc5de8155d6900bde6e34d43c7a6a6dbeedceb1f469d9f15752f4a304 +aa8f7708ae704aec845fbe79a81dfcffddefe46c149d9bbeb22452cc3a460156 +62abc4b246b9ac3bc4d00924d5f00df362838a64ff0e64af11fc59bd45bc00a8 +3f7889b56de6c07b82e78ffe044315faf67fa64c4931912003f17871533ddc5e +367716720653453a45207afd43c3b330dcd92630b0502f44c5254823041ece87 +747d6da5786acef83ed3329a2358456eaed7bdeca0a66e964a1afc757256b744 +fa32b5aac5a8af6e2ca0e7320c91988bfd9883a8711a75d92804bac7c093061c +158a5a0edefe3329a0f09365d29583d07ff0d7fb5b76a35f2fdce377c6def4af +0feb87204dd61b0d406555eee288a51ab1f77ba0b1f108261c893dd257d4df21 +fa4c9fe883fc512ab7f6833988689cda06d79c273822802526f672ed5fbe02a1 +0772f22c5070fd6b174591dfde020e47154c8c1664c73210c70ff9f3182c64f3 +328e803519664837a912531a49f6a6a50d5baceca8d3e6bd060937da448bf1c1 +ead0057534ccfaa9e12cc41f7e1a07c3d5f0c506eab4aa592bdebeb0950b744e +30a4ec71ea914aaeba5773994074490912800bcaccc4eac8602a0ace7d7e9717 +86ae98b16f2aba8468df4d8917b8dfff1573a44296c4cffa79c61fb536b3a9c7 +87ce4d7279c24402022fe45cf4781037dee38eba38c031e0e226fd7e2f23985b +57e595a2eb9f6ada77f520454f0111ce9fbd0b827edca5b1fadd01e33b1fa56b +698433e3fe718847215319fa8ddbc0174ada03fe846466ccf6cc457cf42bf31b +4edda6f3b91949f253086c6052e8e9a1d7fc285ecdaacfd0f42decda9506a119 +460e52dfad9c976c445d9f4b720b82ee2c4cd1355a26c81618e0a1eab58fac40 +d9a92662246ee54adc4a119da1052f345293c550da49ea01113a89eefe6ef64d +57a3a79cb746ebbc55e772d15afcd428d065e0b6e5f71a94724e087191df7e84 +0a3297f9cafd00a5b23e217f61e24166a8a46e11c44b3dbcd84d9bbf80cdbef9 +4e03e87fc7de4f0048e7b84ca2d771ba278d8148760991e48a55bf3ab909e571 +42cea99f9e4cd6ac377cadf515305994381974f9836b9fbc02ca52b1c4500a5e +7efaa5da50d8f347ff7bcd8ac6d2df188fb4788241449f5315f2918002690840 +b5c48c00e2681508962d3511370c6baab6ed111359c6be7751c00ac926ffc9a2 +81566a639e767409f1e43062b5deffbb197f198986794642a729a257fdc93be3 +ff3314d7ee606cb5e9c0890bf425102766ca9052c5d96e59477664acb7777421 +4add80bfa898b518577418763c30fe3739b738913cad2743bb8d90d87e516245 +cdd91f748d85a13032f571580862a51be4b8571582d560dbb7bac9a7fd63cfa5 +ecfb25a144cdb9c11a9541e7cbe12407b17a96d3657c0e39d2aaef9b2aab9167 +75d6757c197a896eee5b609f7d904225dc5ce1413cf49bf26ce49f33d26bcfc7 +1c85c78c2c9e86da3597f509d8bdc7df65d1b8bf7a9c58ce43e9346c96a1d832 +dd14a0cb96c0fd8ad59676e38d49514d3c9ca7a1dbe440ff648a994a3bae8d85 +18b6ac3b5f20f889b4a6e30b2777e6dd35b12f25ee9ba6df09c798edbab0cdcb +8c200b14d1e4a7e21997cf948b5dd013e0d09a274620b9c206ac3d8117a6d531 +49026493e2d9bbf219c8b5ddc868d8a33846e01a65fc20d6f1dc557ceb3a1fce +5c0bbdcce71257e5886fa442b0256e3ef1fe36924f1b3910ef6f0f04a481a359 +5b645522afbad9078673ee8ae175605828809efd23e7ad3c7725464b23f31a5f +9d2b988b39bde39fd9e694e0c8f4e7e1b54e1ab3ecb4332c0561bda9d5a5b55f +95bae7134db933c6ac79edf1cc5fa1136463eeb7b22d45239f1cf359278db984 +fc109f0b33b84cd00b72eb2592013422938b0a669472598fddded6a2488aee0b +7e74471f9fdf611876e508791b0414e163edce598c966abd1531d70165bd0fe6 +9e7e78552dfb27773d7c5ab1962e3c6db1a9012f1ae7a916cde23aa43c652977 +c793a02026f36c1e64f1f2fd48f05d13a7cbc1c7429a1846a0b47dc7b114a6da +024d2d0a28e3fe5f8b69c1e7b5a4fc8aa4d875559cee141295d4e2b08d70dfc1 +287f0077c6d447cbd452e4ad1e6b8067ac990f680ba6d5b2e7605108e0dfe1ec +41b83ce95fea2b010864fca415e52a67e3afb92e2f4aec2c7721bbf3e0b158a9 +d94d1adc948f9738049410b1faeda4b8c023861467dd4f00551a16ef181326c4 +cee1dbf64e11fc8c9acb92894aa5f4ddb1504136ad18e53be8728864972f6f82 +109ddda3e39ebd6ff478879dbbdd9c50f3ce3e8138683e779b93b19759e86ee1 +580afb2aaed6e8f69128fadc1da8f2dc102dab69af6b20ff8d4637fa9ee7d95c +8381f709f307e93d19a82aa029316bfdd89e90496eeda832854d71b3deba550c +540947a59917ceca38cec24b37d24fdc1f6c816add8dc9116399095f6d8a63fa +f8fc2f1d6ac3ef3c49814ca2a643e54b415f6c140c411503e2a4f81244e465a7 +1bd7a4da21c942effcf024a943d5a6c67097f94b76f24bd113387051c43c7468 +3d2b4f74d12f237e420ad8020366b6296adce2b246f14a0ba1ab80686ed40274 +4546a4b59f2bbfef947d96be0e854cca3c57e53da93bb94fc02cb3e18479a476 +b23f2a93161157402c60fd45ab0762115d08001e8d13075423cebcdaa454d52b +203ab0a791fa10fd123f9cb0347bde026f296d61a8a2f0a9652eaa3993e05638 +2dd87ec0b4a3e8cce8108559fd798f8e926ddfefbffa23804432cc5c9e3db39f +2743c6e626ffc71e731cb0d06502bd7e656d37379e3759e60cee448e054a07d5 +f47c0cf750132f87b61fc8900a823af7504db6b50c5192ecd967edf3bd8993f2 +7c4503b6fc3cceeaf44d247b2cf56a89959d0522ebbfa04d6e1df59e118a0c39 +4742e2d582c41042ceccbd8ffad106dd12e2e0f696da0f3a7370d0129b1421ee +e80ceccc34d7dc56f723ab44d45baa17a51766cffb6442fd2d53e82f3146baae +b1583d5fc654918c5bc8a0268083fc2e617785be93f8754fdba82dbd3fbf7b5f +45143c2aa82f29f1c26a677e1fc91db5e844b3cd6ed232695a469b6be57e9d53 +990054054e25c27b0445984f3eec5c0cc9942c315dda371258965b747076b3f5 +e105fe02d939a8a2201d032c7042f5df6b8297bfce2eec83ba96063ff80bec04 +45ffd9ea2cb37bc78fbb8adb14130e5d16861e0fc36620b2c2926dc45ecbddda +90feb7ac1cd9ff85c2c7c1c8ac7112993756e754857b749fc38053ec87f6529d +f25ee6d45243a0b35429ce7ff157e6236f7796627e721b02a2d18c58b537c3c3 +9926c3bd5db3e646d813e7d708cc186718f14bb0421ebf9201428f8e698f9acb +a1d9a658cb013114d9a1fdc01c2758e860b4e06a9d6c571ed4e8a4cd8bce6f1a +79c5afcc72596ea48d90c5ea54769f35a5693107592360cbf8d2404d6ce45ebd +a3013654ecbaabb9cb4d2cec1686b8ee12242e4260c3b3a56ccf85fcf48a4181 +5b0ed3c2a66b4cb96a187019ccf275ec51b9cdb022596f81e63a7e6563b7173a +f803fff7eaf7d54b9bceeae2eef2160ab4aedd71e252fff72d04681f9ff42417 +2e670adc027873f0f32891aa45998657eac7ab5123c106320a55977e44101f05 +614740a57e36ffc51ec738771c637b865c2d72e6d57bc3e70337dc800bcf3b75 +6a011015825b0fcc897bca713142dc1f71c9dc8649aa733c4df9409b8928edcb +6472cd1454bf62d0ecbccda47c3396e520348b259632af2a13d69bcaabc429d2 +5dfc76b38e832ebd2923dc3121eefae1d56ee79d608ba5c83c5e230eb2d03ada +33245ee487a202cf4eb58446eaf575379690921f062fcba05e4ead4631ed27f2 +9b769a87c3b5a0fc2691e0b6e69e4ce6f92567b83edb89ed2e622cd2eb89712b +c736509faf80adbf339bf65f3163e743a04721faf4376ab7cafb11cd793fd08b +5c69e6ee1a3b29ec58c58b3fe779fe24fd5396675a2ef3193535f64c3b905b19 +0ececc4a4897136de1834440c0540a98b08feee156c468cd19586cafd057a8eb +8a1507facaec57a3700fc023efadf4ac773b867c2eef9827de5c9c95196f50e4 +ec902918c26338e5c0f66a67bb50171df29eedf0e330f5f4c94ed03fb0801d42 +3c2769c94bf29e34c02fd486ac0ccc390761162fa6e04f93af86382f5610ccaf +edec08b709f3f9aac24e42ddfecf10319494fae3c366ca3ce31997fbe1507263 +50263b765384fbe8f79803e8157142ba9e2b798af35e9a7a85573d8c32bfd6ef +b57c154475820de0598a9d334b70cc53c171f440bc00dbb05e93ca0527d9dd81 +2ca85415734bf92cfbee293cf3a91797da43ab26c4f40e613fd18d30ddab1058 +113ac40f0fc0f09e12d0558ed630adbca2bb9606b5849901ea6f03c423191d1b +6db6f01ae6de67f0fc1c223dc0d711604a7e1eb9472fafd4aaa8154d0b35b8a9 +7a22dc92cb3ff3d159c5f2c7d80487ff8e370284c95c515950a39f44f0d02299 +4ff600f3ad24b432f5b288544344c972fd1bef97bbd85d93fa95a004901d38f2 +7a1aae21aeb998a2870ba2d917a4bc0ca5ad3271e9370961c5bd51bccdd44aa5 +ed8901a90bebb00989a28e891e21e46098117f77f8a94c105c117a008500fd41 +578f38bcd81533ad9a316ac9b9bf112e22abbc54e1c121ed4bb608010de5830a +a68a4a6b54ff17eb7fc452447b1135fdbe00c555d8b56ee597f5b54e9fec943a +4bcd8c62e1a657c39b90d7e75dca139881a26b90de101cec783435c4feb9b595 +39c0b44b3f99e924e3147151b31acc50250ee5fe8615ace500b7ee5bd6d4cd0f +27d9a6ec347cc05b11cbcc9e70c44935046ef1fc5ed7d37e96fb79ac8262a8cf +469596b3196855d790bf7cb9cf6cb84ab3a486df668a2a2ab63f1fb6a7551e96 +065eac4c0edf89130d3b1afbe290fc021c4d34d6a67441172a8a44fc7455e2cb +0c4ef2c602ac526c4e05053580ba5304e4b7849659e957c24d4868099ea6405e +2abe683beadbc81c81e38aa3b159ad847c06d47ae3adbe7dcef3a7bba899a8c6 +da28baffd181a7237a65202a7c3d7632a7ac82038d5686bc2b99eb16093c392f +9e837342ada40df5d74d54db28152c0faa22821b39d534c91736c571e1bf71bb +a6e61c09e0a160f7103fbcf66094299fd78f558bd6ac06b073bcdec362dc4cba +0d61fa1f6bb133593496553ff1145b0470273969b9d3e93b2823a9a0609a6240 +53fef8891d81d2c3a4a286290031d33e6d51b5c72761e8466c1f69aa65af3c29 +b4eb43d63016d455e4e45d798801e6d6dc37958b4747b83769a3c85e9e0f259c +13bc701010ba91efe151861cc4b569974fc48b2e95f3979540dadeb7ef4b579c +85584ea56728e29a7e1fe6350b3f27a9d6c245bd3a2e7a1a3e6ce4c9d57cfff1 +0c4b5f4e53719377642a23ba316d265b76fad5468a6e7cf90880d52bc7a94d76 +9b8a79b73cc1410f524dda92ad7eeb10890c59865332938076ff70e58b56c62e +8f116872e86adae50a83d574402ef6aa2b8fdd93b1027b5462f08b1551e220f8 +59b9856e51d0bd2841dfccb4fd47308ab7e8d1e975f3dbdb7913dd8495ce6ee3 +456852ffe896f1593ea8679dacab02f8684c020891341b8f3363ec3a86ce8029 +95be8d0acf90a7cb06ca450afe82a4ded27a834569bcf71d1f17b01dc505a732 +aea02ecc8cf7146a7670d6727f9016770ca7198ec9d7e0eef55223af9b543917 +0ecd8bc0d171a498094b6df2122208f4254d2700d2ca83e32db10a6c9aa321a2 +b213069c3598c6ee78dd71df8bdf6a3f65110a472e1e064850db9b72e2037731 +0930fcfe32230a2af8f88113d6f02a87fb2ed4038b082a6b12286ca35e56c6e8 +d28a690531b646e40e6a3fd5202797f4b398ca2a3969a736288e6ce30cf948b9 +a406b6feb05368350e0ba19e76af29f7f288bf1ee6c86020de06bf9f8a8e9af0 +e0abf5a9d1111137cf94fcac3a1d1ea378c22fc26e87f1d023dba45746fc67fd +529c5d27fea58b1b8ca2e79ecddfa3d4adad53759ba0bd2c7a5af477f863db12 +bc990a01fade59bc8c087a0743c4f81aa8524738c6784b0ec84b0cc53167e927 +78c5117273cd213e4620dc8a5620dece245c156792bdabd4af2de9e8ff4401f9 +db5f87a639d34f86c3ead2c2ae79c5241c19449faf21bac10fea9a317f9a03bb +9984dfdc9c24e8364e483c02c244172603a31743d4ad3e9fa250246640119829 +d4aad9043277aa7a41c726b3448d5c3e7206f5e9fa3883e46f83723f8c9b4682 +242f0c2f04d67a9d63f160d7280002dd77d64e0a817f7251514358bca050474e +7d238ae829a7cd47973b9877dd3afcc87d52f19a8c552092f3fc6fff842f19e0 +5a991be36c106bf7f66f4dd6860f834e3482ee63b268a3903e35ad904967cc18 +543741c7d9a76d37f714e67f1f4dc60875b4e02b6e8d78bfa370e5fc6b7070ac +e2bc8437a5f44d18c5b54dd87f7b3693337f771afcc0b0c802377bb56403a272 +825a08693895043ad8953bcdd9d91c86093695242894b62803b585e69fa229e0 +3f554c3c280b75b54db1c49a086c6dc55f6cd4fd9bbf2730eadb025bf62dec15 +0bc36f682d04efb36a8a1ff16526f1c636bc79e98a4d83c88d048a9d714ba127 +d6956dc1874f22a12b3a031fff76b5e0b7c686b10b43d36bbd3d3cc16bedc0fe +3289e0b1def926d7fbd0cb05efdf0d351ff68fcba2e12c3232213db6bec2fc57 +228b8bdf9d8bbbc7ed8417de9b2b3c91925cf954f78c3b992b515ba69d476cbb +3189898e4f3afaa584cf4a92ae730050b2373974eb2e7f9310efe6469d4c9601 +256f33a35f0a9f2bc8edc384b857e16967a9c7a50ff0773baee14404fc2ae8ae +56941921529a403dbf476ba6a2dee60d1067fca2b3995104f5254a5099ac3194 +f3a6c0a5bf3105fbc884fe48887c3cc364961ad65f7878e00491eaf5573edd68 +c24accac3250ac8277381101b862cc5a41c1280c2c1aafe3cd8667a1ec1a1001 +c87ec7b5a864940f46b5c1631a3194ea0f01396dd986fa11a23f1da12d2db637 +2d890b630405ae1711bdaf5a53d856e80af190ee39816d836ac467d832077dd1 +d23aaec9f44a08c09d6531298ec20f16e81599fbe4efb067e502c0b506e72b6a +bc0ec49414de4d0780e48c5293d6f32c040fd1ce66d2752cf8d2828ba12baa20 +eec9a150a8aa185058f44bcdfdc95662e9b30c6f3ee6a0d576966f71354affc0 +35cb1f28fd5b164ba52fba4aff7ec774d622ef1f56cc1fbefe46e61dfb05a19a +a25d4faa608cd91e21b13ba78c9545f571303899f7a1f2ab72acfdd7b3d81eab +7b6cf070f72d72daa6559674fcafce95ecc1fd1f70bd62d2371629f86d5fe5ab +1597fd94a580dbb3886e8ed1d16b53fb095b8e7f32e1125e044288ae63bb72e9 +6ed840318c592d23ead33a2d94ee3f01eb686b724b9409164c387c059a96017b +b7861031848668b18064059e9e39a1dae3ca7f0c63eb70ca36d5f3e202677a3b +48583decbbc0b2c46cffba13672d2c8cd90b06c7144cc5a8d40cef2414978d3e +274dcbfaa6fa382d58dd07f8fc7ebf7bae763d16060bf449d467bc9492d6904c +7a0c958ba30f1651854285d6ba9af70362b56c8c3f88d778f5f0ae5f69d0418c +559b5225345679b614414eb02ade42eeec2129b0edae1f7e0668157229c8ae01 +7a03466ce7f9a8ea09abd53dea4ca7f840664ab9fc93391517229070a8b24bbb +2c77e20c530ede28348964fca7155fe319630e242dbf85f5ac20a9d98cb28889 +a25f36683417d3367a678cc142cef59e312f228afd717db875a4a8ff475029e8 +d2e7582aa07f329c2159c6d5e6abb7e43905722efd9b1d3aeec6b4f624415bc0 +ac9b773ec37e3f3c8b68c01730aef70d128aebab19e42a1780c31393db1ecaf7 +b7224b46e12a310a599fe5cc87831bdc865dd1d694a2d60d210c3e6bd9094b8a +5c05e4abf6e7f05752bfe44b3dfe6e801386588673021ba2b97482e2c928dd6e +f62399ddc85ceb9eb0be456b3e7c4a01113f0bbd256b8dffa7947936016ffa84 +ed327bb2aa7e00a13a1381c882208b3f80016ab9b42488c1c53d8025a1fdda57 +d6e9b7aa12ca39e61581e142d2fb333b91782d3d2e7131163e8b3e9366125a8e +ed17819d3b8cb79e28fe26bb263793eb8af9ac6ac007a1e9414cdfebeff268c3 +c52ae71d86363c923cec76560e5e51cfc252d5c0ca366994922b3f19d15343b0 +69e58ef3dec091d66e13cca9b6fbaa3d08e8917327eac79b866edf5095390204 +a34f951703e635e2111650c8cd5eb020674d7289200a24ab6469ed8177155890 +adaa4799627dd1238faa87a73d90c0b78781e5ab590456d696bdc87e36145560 +92206474e672d35061af37b5ef3f7a477fe3da082969751ffea5218695fa301c +e6280eac2f6d71a0c130b62e97e3b518df21b7610e1038eb89271132d8a0cd59 +cdb2d8587e0a55436c54aad04775837a32e9c794de1f54c1a9ecf9f60df7512a +f046d097dfdfb2e31dd4ce17b6b30e7e548e161042de4dad8dda16b911690380 +172f0b85309c10b44807bc07a4b41dab05510abfebae24d2f23e886cebb79396 +5c5022bae8b2d905b95e1886b7fe73a7eec57cf3d0e4e4c54fa756ea826fee97 +db7c175aec14a71c258215df4af409688bed8fa11200d15ea2ff5de84f0460c2 +513565a590fc2f3bc693c8a489f14cffcd59f7c5ac121e6ed03f4169e91065ee +36ba4c93ae0c474dcc04c86124de51e6608e749b20a382190308b9f8dc3dc0a4 +0d2115877b3bbd3a6ef46f1ea437fdefefe49cf1379300fab13c5f7d64ad9ec1 +17e8db87db7f13f43e49f7601053bdb0f49e161efb1522f55e91ec813af63f9b +b1131cd077e11e0b93b8a5361f37aec840bd5187b7104be06cc4716ba5f75767 +1a42d8041bb8ce380d1b229ba6103334dcd5ce59d55762a4cf92544bd79d4bfb +2ec0697b474a02fe4b04b4e1aa22e841603850826f1c574367addb4f4dc13c99 +8b15ec73e920e630a0c73432380a50a626c31c056576b219d6403b4df510f57e +fb46e21329be4a69bbe76b137dc7b12bbdfa01b09ede9f86ec8d92fe6950c9b0 +aaff496a9b0167370898b5110c73f09b1e3a6cb6c2be390028b132e960bbc390 +d25c4f44b211742d23aed6acbd64806883e9da8b03396d5b343a606846d763c1 +d242f9dd27cf2735d25435d569684460e12eacd654ee5cff7caf29aaa4a7a190 +3dfa8f6b188e21d6ba511001112e2475073e74835a25f6d5c8a7304ec4a53ef5 +7a565f9f05aee37e0495b36f1f3b905919e36c8174681c348f394f2bb66fd712 +2e7fbbc27dc6c5510ae5065dd8341409370d744d793761e3dad1dc9426eb136b +ecc3ee1793fd4f0c3ebab0ec3658906721a9d97b44bbbbe63b87f8074629d392 +1db2f8596ea12464d3f8ee23ebc5be047ceb794eb011e76550b34579fdf0b769 +ef65a5e85a81652d8fa1477e3a1352bf65979fca0adc7a4995ef2065389387f4 +0e9093567b0cb2cb2f418d6ef7dffe1ec8a2a89f62d6c896624cbe9c94073272 +94f03ffd313777c596b9924db551f1bc27cd2f7561fb1f64fc40748599848bde +6cab229b5a95b6aceefeafdacb5d99e0c21f289f904e261a271bbac47a589bc1 +633260741134f096d678859abb3a286a49ee46f14043c6be669e7ec03562af89 +1fb59282b6f167b95cf59f0c354d01fdbd11d2ca6f956ed903f26aa796b8cc48 +5bd3d5d844728182d7368de0ec80028520c281eec0e5649b841141e78cb13086 +0f4b2e8ac5576a810a0346a8002935e7883bfe60432d502887cf1688382e9ea7 +29842056548a0e2e61e941ee968a23982d859c1bccd393efc561bdb8e7cbcee5 +997d1939979b77e93dc89f3732acba0d76b4d7e3e554c0dd829a91eb4e6010e5 +e4d0d13e21e041e264afc22a11392dfd48d7eacb52f63f753e402fe43c72d4f6 +a6b985a307c63f1689bf9f672595046c2f753efa0daa3317d576ebd68b0d4bfc +8d9b110997dce8f257b8fd2526d1fd0c4b76c69dd50ae2e3b3107a785ae3305c +82a07de78f41ce5713ec4321673e111dcef7af67d2c2b1f0af07150e7f52d191 +b7c4d5ccd0bd8018a15e06a07738e3df21938446d6f9a49ec43d1bf4e9667914 +b71b1c96f60bae8514b4a4aaafd0ffd394826833047423e509a3589ca16af4de +82d5f439100f40bab722e93a1388fc7d978d5500cc36aad2ba6da241cd5737b1 +7fe9fd826c1bd6849dd7b55ec8e39775833dbfd28a83b20b08fe4db2a52d4400 +b09ef0d5d349361be1f8c29f4015b7e71b3c7b016eeadb495835ebe7b2cbf52e +c27076a0ad5b592aee38ddfaa8251c63bb7cbf0f90b65f60f8b00baf5d7401cb +d4b5a1abdbcb18db653492a4aed4b93a98a3855f4e1515f7085deb2250c9ca22 +aa3be83be8f556726147870b6f3851dda611574d623a847764f7daaec57402c8 +12e9e2194a335b64f3419c4dd04633988c9e2ce541429b0dba164b36a7a3e269 +81956001a7c84f6ec62f445e950a192fb08897461c311bd18fc6c9e307a85c9f +c92e70ecfd6309959d550df90b18ca3feee226359390d791404358f2140a8258 +8d856479093250e6482aac9ed03540bee25c95f0db4bb82d8ec522c6462b2e29 +3b79ede121b147234c9f64ff5a18cd63aa9c68e2e5bb27254e71012e09d9122b +fd1fe30d94f5ae4924798b9e2ce962d945b60056d8b4e257da8943947addcf12 +55ed310bef9a80bb4e9536d734fc4383b3bb3c8e41d03a35a4ce4f622cfee03c +903fd8ce1a858a9d94e14e3eee4cd8545605911e00872694d21febdecd1f1282 +47b79c657138e92790ad905d7701b82a0e270df486260b51632e0a7d419dac7e +dc95cd176edebc1ae277fb9498f8cb1c7d1e33c23831dbc235dc014ef0c33a4b +8f21e0c2de7afa159306ebf269b76cfbf65b911bfd8c188b8fbb82952c6a7a66 +da3c7399a6bd6789d5a84f19759317054ce396b19c1807cb612635f47bfbc124 +d1ae855c8aea3fa4aa4fc75e294f7d817c585440490f22c4abdc3dce97c4b538 +76db6fe5db45642635eca4ffdb0680e8004e1fb5316d7ff9775709f0207651f5 +45f0d9b8d104f0b317f92d475273a8e0483d2d6d969f72024879bb11e4ec14c0 +a09227a29eacd9fd800ae77f098a265ac4e51dd7524dbe90d3fb5fceca15b904 +0c2e031c804cc7fcef801b02d3ab10f021f75378de9add4a7775193d1e3f93f3 +00876394fd674940435faaf68295231e4084eefa02d81af0d98bccf8cd73cc71 +19c6d04339cb398a9a13c057aa96ae9748b468f59545cbe16d688c89227f21f4 +37dcd9e7e7fee585829ec7f4cd020bf1b07f3ef7e096e14552587f9397045382 +f729a46a855bc7bb84dc5ddaad5a1ad53a484e0f07899494b888d82dbd9d1f28 +a021a098f81d3e9e44ba58ee5391ae7be7ad9333d11a76e5a19cf149622060ff +cce9f22f23f368ddc37118882d4ae420969e7468320127b02a1faf1cc561d230 +cf705d22da19b176c682406730ef338c6b4696dd9e8075ba6522cb7a0229b748 +8c62834f4754bc5b675c6ba95f39c5166b1d93e94341a6947f620bbcf735aada +2a5eb632d74e0db9411465ba853b7cfb19f7f2a10ffa8c8f59b7ae7f5ca856d0 +4ec520c7e887600420a9deeb6a0a5cac6a36d39cfc3531ae1fe1d117e1fceaca +bc4af94e9034b7bf649b47d290a6d074cd0b677ce9d03e2d83e3ae024a382ac1 +c388993b0de8f20da01754989023c2ec48c3e67ecc7d748f8c7c8ca54ffcd7c7 +a57e8ad407ac7a8022779d946a54a6bfa6b66f2d41334f3fe84af47aa46c4e9d +88a185554f7b5a4c9ea8d313fcbc07e5056c88f8f16b6eee3e12d8c71ae15199 +3c50b9257eeb9a7c79bffe6c7b7af7cc679f42ea3f7f78aaa64f0373cc3fda8a +4af54c046018027de717c8b2fb72d2c5bc934fa0e69f880d170278cefa339ee2 +e6c5152c6381acf3685a609a75c09781b7daecba77be41323855cd31a9ead41d +da8283b8ec72d8cc6c55a6c5c2d1ac112bb8d909d930662d06b9fc88f190a9ba +c85030c39a2c319f1d74faff66f8c9f201ec14504776df9c8cc3a39ccbd56932 +0fcb176b069d1ddb487191234a5f717a65d893fb5aa7bb54c8cbaadca73c491b +c21830fa4763880aad90ac6e446b7a528c79aaa8d9076fcc1156a8da58cacbfd +e129900f642ebbfe040cc9ff89b99a47f34c594b09344087303641e9145b53c3 +86f8c5a84231340c376dd268856c8e28b914680b21505fdca928c881e567d363 +92e30aac4ea81b02b1271a3bee6fdfd7f8319b6ac396539a9604b8baf710c35b +f64c43d6dfeef435b94d871a8e5e7fde265cd1dfe3170cc6dd396816d49a76e0 +9196eeac28b2366cd1f8b602361d95d4273ee653a45c3aca25c74d6f13d2b444 +28e834eb5233b948b313a4874589af5025d756097ea9f7f7def9de6f83d1c568 +2e7b3f727796ee99974fcd74cb25d883ef63a8a46da775f46e93ba53ab3f9e73 +1a26c1060cdc83e4bce8dd83b8dd2e8611f666b52c9801ee8695df7fa36e7bc8 +ae1877f0f89ae1bd8bac08d4d00369111d6db903b8ac3a3d55201066ba6e63e5 +61542a85c541dece10c652c11aa6708eabfb9ba1ec3177c66d3030e375832636 +c3a3c319a67620dc0429f73ed6a2cc31c414622ec475eff0c6c23f3d1c4a069f +1b740da47a34bd9abc939c000915c07d1328ba1809f54ba886d1bf30b68f6902 +6e3af956223d49959499a04a17c88d46e073350f3541a8372d3487fbf39e74dc +b0b3292f14590aaae4b7bd1616db08d2e7e54557dae3cbcc823bd8887b6e15dc +da70d4e45a72c2c8f7630a35d48d5b36fb6f02b2a104a5e9d1d3e9d28838ddd8 +be3307d501a291be2a90d3b324254d11c4cd915bc8707a77395222d53d0a5c8b +2f6f5cd1a9f150c4fd710da18ff1db096beba1d99d41fe539e19f2ab478b09b6 +3730ce3ccefe8068a30f6f37f238602b83dca234400a19272e510bbc1c9dd8a7 +0e5a52e29ff33de99d281e0ec497e6f4216f782f9b666a6096c458993e30ca50 +7cb48b7641338b8ca2c0073431913811ca39a99cc3b1a23f118c75ef0ead389b +ccf5c4f518bbbb8679c8628c1dc42954436748a7bb105c71876ff995c8b5693a +3d1f79ec0665645c3502a0a8ea18c6734f4ba5413c46bfcacbea2ea038a5aec5 +258f599780b417c534fb7f565f1bd5b38fcf2c5ca8327664496f089d8c821e6c +d7570bcb134914087fa28773513946062f1fa2e45ea4c093ab75f881cbd02044 +d262a01e6503dc1e2423e737599c9690028d7e7174b3d64da42ddc4b38448dcc +55dae4417fe9e9dbb2185708cb654b640f8ace718becbf1a46b5615e2e676a2c +79fcfc10d02b9003eeff43c3ef7f2969c0196fdc00ada677f43c9bd37575f637 +18f551fa4ab446dd995a254894c78ffa9508a084b631dd88a0fac438949c453e +6108df151aed2963b6ed9e42c922bccb39acb80fde7932a3b8625f1f10719db7 +142c75171b15c500adf80f6308323612e0bb0abbe524be5be66a5868758ce996 +6a001a616df8360765cf4cae725373d16cf175d58c9334d95a847b558fb2415e +0f79e63091b408408a8c97d92fe432d6f8d32093cb479c0006215ab84f5559c0 +f17503955edb53a060ddcdcad7d6b58fe92d1899768c9ee028f225517d142b81 +a34ee93f4d30c417c7a20b63a8faccb199bcacbd4e37f546adcfc69c24e1280e +5d86b044f104d82aca6e35054f3921543b7fcccb64d197aa714bb7eb5319ef18 +3c270dca948881cb6cc6ffd7af6ac017b84d7b87c418bd5e25d22df27a939819 +0573489e1bbe76c38f61b77e8fb1865ae6dbdee2370f2a08507c13074e5f7be8 +6d0d46f81cd712c124b5d29d42ff29e17d3a3feae67cdbd7acf5b0b403370a17 +3d5acf95220c76e55b89e911a35d6bafa4795a28a42de95caec83161a4c041cd +cd91c2003916059661538f306775dbb1d7e628227ca159c8cef5accd0c90a559 +27dd15f09c9eef727de1745020bc8419e34b48acc621bcfd1412042324808dec +9966b66e9bae3ae5c89b053f5bbf81b132744799608bcc8758d1cd663ac5b9e0 +7a72e759920b17f3777dff5105b5c19e6af9be1c932263ced9a5c85276d38ae0 +ec23f250e2ba17f2e2ceb1831824536dce710f0f1bd3b76b6f71d644e5b0712f +b263cf521173bad21dbbfe1b66802d1c6be7aa286481241bb5c9a8f3cbba5533 +892f568df991a3b31ed6e33c00da38b9d9319c26dc8586932c373bd6242f21cc +52cce4e93ae584800ecf7344d1c04880612cc2b68ad949f1e31bcebc8a340bb3 +a5ec3978bb731c45b6265efe7248808ebfd6d3a1d4897d962a2451209d44e692 +ee7db9117b6cd33d3438c261657be94a7250e316ae5a95bab4044797568c12c1 +ce085e60083b4bc2f7941e319d9e5b7a21f99d2546fda1f80e5490f7c3f826c1 +ede9523d66c5807068b15857af00c24ee52d268027d34c6aff92d35f1824003b +1e7708c2cc89e1f4589e862a2ca1681d602b074f6ebad3a5b54dead53e377d21 +5d967895c71efbd71a51b8ff6e932788d05f96ca6f12967617c2c12f50d80c63 +5bcd1c4af06b4057661d0713c084ff0f77019384227ecf349923193332976b92 +7314fd3915cd6d47741712090b43369b1d6b7afc7aed91967753733639fe821c +8ad8f5ec4814bbcf1e4f820e9751b24d3cae998553ff5fb35e42a7269dbe5456 +5818eff527521301fb1170eb040964f6ec5613f02d367ee003280f6cc66ccf9f +75bdeacba09957ff7c5b299d56acb060add5cafb544d8fd7e565354ae89e7939 +0ec7ba9f6343705f64be514db811a5d2612ae9a0ab052dae696f38e1b484a920 +90e9015117eee6bbc4b674a1e6b755e929ab0c2ff58cebb71a95572f69f6366d +72890a1c385c51acd2f1893a1e3a3bff57a507e9983e6fc53391d00fbb69dad7 +cb987973a25fc8eee1ddc840d1df03ace94b9c365e3026ea5a8fd0440b980ecd +38279d6308f7cffb49f40ad938642e0bacf624e4be6c77e68926be572729a665 +11f266889f310d2b55f5cfde5295b7e6049edbbed1c17dd83af777511bfc7414 +0247126f57714175a97d71877010e686c3157bfbcb1ec622f746c19823c8ba40 +bbaa71cbd9feb64c4136468304910b121f3fffb49a502eacb19ef5cda8702b69 +a46507a065d86be0cf8df0658878327191776e8d98ccd8091b8bb96c854fb438 +46262c00f3928031e360ce2c35f3339eb487aec3b2e1b3cc3c8b24396a64f8c0 +9fec1b1d197ec83b8b833c79f55718f75f153a6dc4ce43406a444405fdd80d64 +d53a9621fa7c2d7ade2d78529a994f470e44254ccd26796dac8a451ff9982aa5 +02a8fdd326dc1f366c81e2c6c96ab342d9224a651b64199b35bf922c8cd1c8fa +5945595a15a7ecdb6adf0978052756ea50f1b3b7ac4f7c8a6f5ff6e42a414daf +99979e82bd0edeb91dcb318cc5ee23260d2b93572bd8217754e94e06152608d3 +17fd7fb3305269d277531674c8610efbda6fd20035159eeea9592f30d2a961d1 +134f8f9fcdbd1074ed2a9663acc8d346dcd9750a45ad305b0708f1c0b0a02c9a +0d2b3a300885535ebded849c80050c4ad60474a21f265d0b39e1369b9ae3f2a0 +491d64f5b81c58ba20bfd6e46400646a94b01be5793d278ed5c82db0f93ece3b +06a01317b2cd9821760196881ea7661012d1e98c32c40661339e28f1b9472c39 +175d71a0f0761bfe8fb629e9f99fcbc97bd459c8082e9bfd7d166d6ab615d4da +e5e13f1f11fc79a4b14c6b2b3d63acd78ca5902bbdf61f07f2fed9cf6849fb3b +911eb246251ecf1abb2ca86ad7f2ac1f07bda9ee1afb303d926a12cd7dad4a40 +b359d3ea1a6490b2b30fa09ad687ecb1ec0457be398812ffd74a29e7b12d26e9 +a37eb7d936fe78cde54201f47e7d12f98f61aa4d862b6da378290f786f46364e +5ab810810ee63ab89b1f9833f0a9a89480e4814489638f0563c7735bfcd15b6d +8c63a4e04c0330bb0a18c1954a60fa59615dcc45aa04dee3e626b0f837a06cc5 +59a189a06a400681f1cb30e2a0c0d668da86b976581d30ea4f0f3a60a4027a37 +b57a569405d79cb88d21416a563074f0f1d621c6ff541a6771822d89c7c15fb5 +c00bb78e84e7a9e75c80385aa9b86800fec146ca8afaa50bf1703795425ba9c0 +cfdf294cec70d99fef5ce4adcdfa4b77c5eb9f3e34e5321955920411db9e4028 +75e9896fa79813136f0507623b18d117294b97cd9fbc35607e0b32139bc394a9 +2698fb0d7a7fde7d7b8765eff7cc323d1b9dd1b8101be1bce3cd9d3819c8a6f3 +80a1b4cc78c0b606c26ff3640a94cdb60895448a4a7fe88509a2ee21e51ca331 +9c40a47d236f266a73899c508a21227632ae2a30360b1251f0599581f52bcaa5 +5000ef5e7b43c84e5ff41056b61d4e7bce682bf63d98aa6ebe462b0d94dece1d +b18577a6878cedc39b0b7649019e35a7733e1a1d20d4581ba328bb387db23466 +623e00264880acb58515a3ce0d5976df5b0b67eb2cc2cb3e6f8f24c89e2dccb3 +339a0eb337f59ff7f7d283d9192508a23c0b019b43a8b72c7f4e7ea9f8d3aa5f +1407f7e559d4bdf02b3874af359ce84ece589acba81124c0e5b90f485acc1c1e +39ca5c474d2111fbb302c3ca8a054c56f754528ea1174837efa477e4da851707 +e749ca3805806307f6f00647d6f28adbbf1fd7f8a26386e82ebea41ad5fa280a +f2e3bc34e8e1f7c3339e83697754006bd4b76720c09f35f25df133dc1383dd9e +26c0ef4d9cb8a076ab61bc957143cb4ac26d4445282e9e41cf8d789ac46a4185 +262f5f2a2bb66fe0530f2f7f2638cae2c1da15fdcb869d18a11f3f6b20e02d0f +549521323e679c1c8a0b9b5eb5524d0085a833b23239bdbf1c9b9ed212436278 +b7ac1da52fe1846347ac19e235dafe8e4b0419212987f38b6859643dae0da092 +3419d6cea9882b900664e23c0c0c73a630d01eb5f7245c3467e2b6aea604e678 +6c4fcf703086c418157e88d573a8340d51dfdf3b3788f255c6f205a235aa378d +620d1e5c0128fbe5f2d1bda273779569e768aa3a7db9df79d1f518eeff96ff5b +6e70c94482ce31aa3d5f10912bb22837d57d160325a028926efd88f10fc1796a +968f92da5e11be7d305735863f2d775c1b2f6587052abdf969fc0d593ba9e474 +33c3176e617949d48726863000c4922c292b96c19a73b11375d0b379e62f3360 +6289f1ec2f794ef3b97df2ab76f247219d4fe321e4e102ec27e073d6ab6b4f40 +ef3093c2ecc89ebb21e44ce96dda81fbd1b5c5427fd882b16a710979478b3009 +72b0c0e8bf487e34c677af8b4ae169c35d10c8729ef7a39fd869b4edcb8d73a8 +1096f13d6c6dae39d8e09f4fd36487f384cc414acf05d53b9a9f11bd99a226a6 +6fe550445ce38bcf10334a25e07bb813c8df654a94a903fdcdfbcb7769eb9a1f +3330042be476568429edca41c91a1e23594da2afd9b11fdfc53a4dc63e3fc19a +9a604d784dc94c1b58b15220a757f6c05bb32b7a86f23e3db30fad99477e86a3 +247d6df39284a92722fd265c6b04998ccbf1379e73fbe51a277d49b9f0249960 +978f9cfc0f87c1283a6f7d8fdadd0d55b29020de7ddd8073a22ba8610c83a99e +bdcbcbbc1bcde51e49dca95ecaf5f79fb0275df1d8d3776796a233664af548ba +5eb54e09cdd56c9cc6164011e824ea9881ffb97841ef205072550242a143d9bd +9de11b4291e2cf323981a0a6cbab31755df798f0dbc515c9294ebe1b44c89277 +8a1ccc127ecd10ebc32bf4b6f3af6dd0a714cb41fadf76499133bf1e562e3d46 +1fdb585e14fded8895cb63bd56f9f5b8e088180caffa5a52d26486e38619b63f +ed4b4465ca96a5edfba632ff65ba559c7dd76a21a5c90838f51b31f525104666 +fc8e0cf47f5e527a2e4b9777d876301c00c82154be461cfcafa31310c7112792 +f5123d10a1c5792aef94b3b0b7d4eaeeb6a2415978cf8f002c89d432e7000035 +4dcd892a712805f51ef2b4bd4452a19d50ad8b0305dc3caa81fd012fa15ed493 +b9285fd82a8907dd52ff52eb05a26275ed8b718e237c46823ee75804591af3dd +93092a0fd2e51be415f8dd88ceb76257c02d007a9123a50c6432d484c1da126f +8833ace2a0006e43e1dc2ff926188bade4f3ce0964136e8fe447e6c29dfec3ea +00693e18c2b809c2779fe2edf9b3572b20bc7bd13c3d47d61d1396d129793dcd +d0cf90318b7415c8f14d93243d1a78f1a96323a0a13381f72103f4a630905aa6 +2386ff5f8ed7bb6951da58e49b2cf1f7ef2c3b14b04f95d9bfd06158eed7571b +596f41bb1e1bc6b763f459e9e174f9bac49c24c347c5e536008861ef7c029926 +1d5d4bd2a2b3cbed4b9f9bd83cfbebf94a9206952e5217a2fbf1eb11669bba45 +652eae5be8b494fa681773ab4208b5ea236d12c881bbba0658f3a739ac39a480 +3d34ace51d7e53d79780167bdb7681432876da9be630ea5310134a2d273f995d +8a7359d96d069acc91bcf6f7f0eef06e67930f732b87aa75f7ebf9bff454575e +06f2eb5efef94790740ad79c829a829da939caf9d46481784428b34e1c46a677 +9d97e0f6c1b229976b0a13132d075da2de8953c90f87cd681cb3ee0306f30760 +a6799c1271c23922d89eaf6ecb25c2f049fc45fecc492d5893c098981c570afe +2edc9bd246e570a59fb9ba8a3d40ceabc37975db7b74c94e87725203c99f55bf +70ba0bc9a39cf0493be0751b2050aad159952d9417b81c68c324e2ba665e0d7e +61ba76dcbe27a920773af6746478b55f17d168b8de3748b7cdbf5caa64b46664 +7db7f8609e33082cee03cd093d093bb03fa20ccc84792fdf5684671b2d86cdae +2a661a915561b0ae186ce631a13c0534ea7d368fecf524534174b9cee581a537 +ff80757b928b437842d09b7a852464c172226cce9c26117c52224c9d7f4b83c8 +dc277fc68248c05bb187082f3393eebfd93cc9fd4a9dd35af7a12e5a8e20827e +19b36165a39bf563c611b5c436e8ef0425b44fcdd3fadec5171e39ba807d88a8 +110b7e32a0a1bbf0795d914a03046fc15316047154898e151bcc741412241537 +9d32da8867da4fa315fe51e1edb46a0f0467d9e2cafb403cd1e5ceec2d46160b +f52a64412b6512b4bae05c26a336c1e18be245f57a83b8b757f7555806dcc204 +34cbec2af8538941b55c00dfc470feaaad4fcebcce8768597b6fad8d5ee3c606 +970862785d49591bbd886ba514edf8f0c32cd1951931527de5fad6675cf87938 +4e6f825d632f966539af549cc24f3e429fba878337e856f572774eaa8f0e8905 +71cf21fa376566d7cd769e564e19aeb914c03db821a5a92cfa8ce34634ac6a1e +e179acffbf9c5d361afb05b7ef69354976d4dec8f7337d863f7488faccda73b0 +18851e7cff36b6072f30a457811b65599977c50c9c5e759d2d3be5cd93fd498d +eefc5cc2517f28f7ea81a5ccb6f4d01f65b4438a4f7065b0764eae6ca1e90698 +8550fb2e43e6cff1b81e49572b442fa46b1fea2105d535804982723d5b8d6d53 +fb5711c1429dda06f17ba861fb291aef6853f93f3cf02f770639140e8d1476c9 +e5863bef33d23e7e0b7bfba7b7179864fc9f5ec231fbf7ef176765894ede3616 +4a1af57959ca1d6c1f9cd51b480bec97811af71b254a5fd9f0c4cd35f001dc70 +fd3a15d2a1ed7e82af13c2da80ea12f4dd2820688cbf129d0abbadf746710b32 +a3430f57fb201fb1b656e1f2a36e7050accd7af94a7432eda924822d1e72e755 +a8136314f4d61eb5812395c5fe044590ed7a1d7dbc036de4f5a0840c463d5b0a +38f232af50f51c6a80479a295eaaac8f7df79e937ecbb29a59d64bfc8401a8d4 +4f6816cc4b8d1c52ef945154891be4adbc24af219facb3e53866ccf29186e7a1 +e89c8c5b1f7e12ca733700feb82fcdf2d280eaf9968dd359444ec7eed233cc67 +ebb0997c6074991c0fb5687e5b16e4606dabed8dfa89186b9bcc904f670b6fea +f3ae7065e5dbf23cd06e23ad62e1694377f114711f7059f2dbce166a92e67860 +84c7af540823d0cb5c4d225574d5feb061258ae09a9765b65fe272af52c4a06c +a0631aa8dbefbbcdd24f83c2b0a14dd9b74054e89500dc25f51a44de239ec1ab +585cf0e44aa4dba99ba8b66f21bda36ea61a6fbb11c3f19c92c8357e77165fbc +fc536f46584e2f0a5f2d6d59cb76e5f8d9070afa1a3679e12d6ca642c405d9cc +ed03d51a809e9556c8dd324ff9738cb910efe76e1dcdc9dda5eefbe647982e2b +fca4c2fc6a67e9528c41d93cde212b08ef135e2ebfb20651e31a47aa09ee92f0 +eecdd26d1ea14f3f5e7deff57c34310fab4522ce840b59936d7b5219a1b068e9 +712707b336aee3c826eb1b0bed83dd0f69cde303b147f24127bbc48f292d0923 +6e4daf567c35ac115676cf86662b9a96b0b3a1c0723c25711888d693a867722a +ec770a17732549f278c82d80a97020b91e4d9ac771cb3ccb339c20fec8b5d102 +64fc880489a49d9dd59696a13d839770422aecef82b864a6cf2ff24cad676c54 +e2f4a3ff76ba978a4ea3406a5a3ce72e04399c74e4a473da2e5be2d0a1da1f2a +e952e99279a568318c653fcee9d81d27d1b74856df5cd51d4e301f771d9f2aca +332ca7282aa0513f3c820407b8694c695fa4f20faf236e232605e4590b9a4333 +74497edaf92447aff226265118ccd48e7947f2f2b82f0e1b712f76b5be1a5d71 +bfe8eeb22729a8972c98b80d45ea275390a7169fadc6fdcc58f4f64c13948a99 +04670aa485680e5962282199c465dbbbba148dd8d4fba9da561ea2e8688f1e7d +e268afcad20f741d25791a860f52d8272a441f615163fc9b8cf8187d1615f0df +583a93e99bc6412ebb62e0e3152e4fe83d5d4d67c46eed204bfff159d5e539b0 +aeb4bbcab90d03db0ad8854e2084d953b3e90cec66dbc627d3d34c8862110bdb +1b3be5ef750d50a068e993d5d63a528e2e09d0c4ee0d3a919a20dfe9cdccac09 +9f47094453e983ab24f40ad29913270e00d04b1408e05e31c1b809ecde44da8d +5dd7df44aa52bd3831a88edb5ea65498f75018480b2abc8994da14ac56f7443e +666388d4cdccc4d6bd1931cd9ec7185eda2d1f43cd4061afb5a9e4af1cf53316 +cf921018341797fc6128e221456ac44d638070a5fe7108881897b39d587f1e10 +31e659d0f13a0cf99be1fc3f5fbb0ef6350e4f67a21955f8446b15af8df93865 +24bf56cbc3bd762cb60cd71727e5cf1732536c97a0b2a30ac79747ed1cad2c03 +48938a9fec5d6119c9b035c1c9f6c728727ae0e96e1d8dfefac7f6e6bd99f2d5 +6ccf9cf713a0b7c1ea998676bb871d8cc67ed325fb928b34c9b112f8b9a39aba +6d9911bbccfb08d8e838c2850fe6ed6cefd18b43b0d4a23f17b26fecfc17f6ee +6a2146a00192d16ca346bf201155965bfcf90376b6ee8d72e8e9266c8fff6924 +f30d2959fa84761770c0d6a3959a097fcd2ea35e81176fb1bf0978d2b2df671a +d7d33763140f172b4863d0c9aa15238d52a908ed4c564fc419c3191e95999a43 +c605ee2c757d0123f972395a2ece0e2311306e5cca6fc4429f77e81b130cc19b +239e03a9cd3e78fc1e4d8471fda44cfeff9de306c8b9c36c639544b04fb11bc2 +7e4ba3b8b4b526980b50b732710d66432e2380baa8d1dde0e16031034745508a +a08b3d849d317bbb46038dea5fc4189a6ae7bdffa60704ba9b53fb2560d8018e +eadcdecb3dbe370fc59e28808f59c6c6e1cdf4409015c68e8bf4e6084b7370a1 +71fd08c16384319380f72050a93eb9e16cd60df929cad0f598f1fb2f1ce79e65 +e193618c57f725279b95860693d1ac5e11bcc653a69b5346b2e3199b2cb523cd +434a95cc4b473feb781160bad1275230914419e12e72d256be5ce7a02c1f3d61 +f20c6754a9de32b9fa1c560d25b9d109b3f97657cd043feb468744b948b0de09 +c8b714f41998efdcf980f1921d8b2e1cd3a6199d2d6a2836942052e218776269 +f1354141fb52c03d62f2dc81512c8b3487970009aae8675092ea6cc5e9e1eb49 +116e413434763a0d69ea018984ae00b831d793e4418c6a858fc2a7d6ab4d8996 +16f1bd9d82b4081b8bad55a114a1335a99f5c1f097edf4e718518d2e29580a3a +9aa4cfd896cac7e9a3bc728227ecc7b7a88bab5eab1ee83f62700129add8b575 +570d63ff6f4428a60e8df2c8bed643737381d3a53f696605b74ab6ec26f27efd +c7349c6a78b0bdd3497dde9be12f4dc7f0544a3056ce88eefc75921e212bb4ee +1b613717e94036504a0d40e27cfa39e739c7912f1ad4308b9fffeda2247c212f +b3887a5d5a220325a311a57b1c58b75a836177fbcbb34452826c9d411a250820 +0fdd219aa694047f3499aba602afab19f3c9af20e6564bd116b65c6eca5eeffb +04b9b6583c9f6a02f3d8c9bb15dffc5b2ba94da70292dba739b17c3a99ef3910 +f5eca06f5c6bff200a3a16f8aff16f13ccd8264c22c9bd638aa41dc47e39c40d +ef2fc7f53015183ff5a56bc0714f495c43b0e88c0bcd46f5ab1a728ad173c333 +5655c5df75d1a9288d191f40a3b4d97f1b7c79040ff816051c54ef9e8dd294de +10e3767f19e82bbeb92c54127b357032801a0e2cf72b3d5850328e0c3fae676f +c308461e63667e0b466d7377251b8e9a00ba865aab56ef7055b7802ecbff03bf +d2ff76905130204d11ca91912ade9c07b2721bbcd1193f97ea73bd74c7d169a6 +75d3d705ca2902fd5d6c7200837b27d7b7b209cf9442f8a0546e67b686657069 +5740c6759db655b82dff9759721ed61b86f6828c3992a302ba7da656504edf54 +5bea8aa30b0afe338a1ed9777f9f5f88197ce08e2da9f9f82d4696adc459c050 +ee48a39bcac5264250b55466d8d99ae76f0f7975289a408a19d2137ba1b989e3 +47e71775eb799d6eb09f31133628f744264376ff673344230ec4a4db8c4b0bd1 +d82164471d833d515db110d594cb410a3902e376a49ceb43d60a383f77edc9f3 +da3086e121943b6185b455bb1d355e67c752fb5c97f39e668fb5d1ac63046f6e +685b7a8afd88bc5f70fbe1665c7ab40d0c586b15e1ffece304f4c03bf0c7962e +2c5be7a9010ae157b8c842e79162d133d231da6b3ca7a56734565a4bc310ebdd +046c26f8d99510a17973d51bf20f797e23e0bc8630c70a07addd2111b612acef +f4ec51de3f961d0410d1809253d26f1f941b41de6507ed66167b1367061336c4 +a64b6484911b3921c35c1325a4fac271ad7f016ba0c0eebe6fc30fdfdcc78f67 +a31f07e06b1e2d4f5b30c2b009c9d5051930c2cbc73adbb7c94324aef8e452a4 +3c01f8569bfabe0277f51d3227dcb3d8551f9373cccd3ff1e1680d211cf308f7 +e895f97cd6f9a45e466dec5916f93793a3a03e4f8ae355c74be69655d687e1ec +a6185bae45cf387ae5519d2354e22ab57a76b52c0f82d0071e0c5ab15e708d85 +542fd8934043313b9756a0d4c7ac653d0b1e87451636e724a805a3aca4c6811d +9b34aaf8b16c5115b2eb9eb963cbb95806e8308486b374ffaff5c2be5671db6c +9405874ab653a4bc7c0a8c86a58496278a16c9516b74f5f61fee0ff592bb60e9 +cb3fced3ba79430ebed4bb23f2d9110a9f2708771882a626ff9acb4c43141d1e +536931f700e7e889a6cdd44e823a3dba104fa40361b7bfdad8f6e16619d53cab +93c53c761521fc405b11604db7e64c1436d7ce14535691604ef6b43c2dff20aa +8a2c4737903da79e86243dbe0bc2efb54acd5038712f6ee2950addf67b95f8d9 +30f817c556002e47f0fa645461567c1538c3c16e1d55ef1a0263dec27dacb640 +f21ce04e14377375e22d8414c0f16ecdf383bb845e7044b422619e1bb72e7b1b +ff8b23a2e8339093e56d6204862592ec94eb89a89a234663da6fa443163b6996 +dd6d37a7701eae6e757862f880b673737441da3513703e9d101f6fc63abe9eb0 +8219f9dc827ed0f5064aecfffb376db93b881b3ba007aeeb4f05e5fc158d53de +7e033286cee3bfeb3f09eb194ef60a3508b4b17aa25e8c61e0440aa6c55639af +e353f5911460bdf8a0d3c8e739c55727379ec92556efd893f28b8987fedfbb24 +5e5dc94c547857602aa9e7a6f72d8274b3dbae44fc0cc787da048fa3f52c0cc0 +2b69dca9f725a8e6b23b1e3f62841db6ac25c9c126aadacb78312b9adbce465d +c78683eaccb6a7305048c76d46f27c1af0dac116669815635c9a5e7d9d094223 +c7a900cee6b76a19095e0197aa0ab5cb57ad6dc3ca509df945a13ad3032e60f8 +4abb947d8ca0e8c5c8d36ba514915ccdffc766c31e998183d7ec3e0623fc249a +db5d4e34cafe35db78fc1fd8991bd0bff16008a2fcb172154b905852c2986526 +568020800d659dd0567be84f05d24c7921d88675ccb26bcb8ed6cddf36373e26 +fa74747382578f9c0bb3c58b05dca7b59e395fe57ef159695c21117957c30db2 +a3c005a6d8b54df3810a12a781646d458df07c4324f929a0df4cacd8adb4e778 +9f7753ca9a78966f73cf4ca629b82d1714721b4572fed87344742ed682534848 +114d6fa153573b155fadc074ff57cd88c711dac1eb4fa5f1158d6f636e338a86 +5ca2a3fad7ea9336cd6ab567afaa710558f54d4340436524584946a18ae0d063 +643b3ba71d811ef13aeb3741a48e143fad18b4150f3974060732ef57d85b516d +16159d930a43cf47374045516862431d8c095aa3389e593fde5ce562a545bef6 +a49287143df636903ffb21c442c84cd7573ec106b4082403770c2451f2476283 +1bfe9bd1f3cd498c11e3cc29c1e79ed06a0b33c7b448462cf09d28e25cf8aac1 +d2eb9c6b060891bcdcf8717bf856406f7e6482cc4e44540ba86d1136fd383923 +ef6d16995e9334664c2ca77886aed7aaa6257515e1ed5c28c2fa13e4c5ff2ea6 +8e0af886c76c3ac779cbdb1d3707f5617d6ee76e1057c5ce0a81262888ef66d1 +49b96bbd48e82c4bf2a8891d976fdac5f374991341cc47219cbf44cac0cf6714 +3c23b41d7453b69e7996410171e8a50fc95b1d3e30870a2b4e33abfbd34cbf60 +588fd1d67f6a3b32a7d480a7728a967f3bd75c7a6526ccff22eeb7aceb08df83 +5c8984737911eeaf1f794e67fc749d67ffea26a2e5871398551431c7c80c7d74 +950e80a675da16e3561c87c327ce780993ffe2ac6bfa2f98f58d29e3a28d871a +6e90c3b1a88474d511824b154a5ba258233da788d6b92b9e8b291ac69229b58b +b18b744746480b1622d40100b942ed450c9151f55f9bb768ab527e2dba6c462c +986a66a4617c0e489ab9cb7212d80aca50c206505f404d874fb10abd05e1a9bb +59acb6b8ef0884bc585045c19ae41d59a347b97c655f079940c7ebab93ece7e9 +5dcc965a6d813e7499b5512dea13f7df7fcb7a2e1fa53f392fe5ca2be8ea48b9 +bbb619d78850c80386814c67f3811fad8c19bec0b0faffcb86f1d1b44bd95e42 +f4977f98c02d8ef71438935b89f497b680e3a74ae0e7501dd7776c0b38800608 +f6b7770780feae9fbb0fe231db4ece5d712b464b4e0c172474332ddb08e87b4a +b5af800298a826cf53aa01e4906151e28e1dc7fc4496ffa5c571984e429690e8 +e78c19da9315b36e5fe576ad260165cbbfd425d23961d117cb811a2bfc3ffe98 +00a1b6633bcb2326d30f51381e816ae740f5bbd35a80637d29e738067b0a64db +e4962e8bcf11064d646163eea146687fd3743571d450387379b3bc2acf8744e1 +351b8fc4e795c59bf29c9462804dc8640f6e9a4889291cf6bc0fc6582ff32330 +cf605c184b0bd07b64ffeeed0246eb7a1325e31f8d828fef63a7a09621622a98 +b901174e69057b0f5b61de720146f5d687c0884404b5652885b6e750de4b13df +415ae55d5ea3f056f17f4c836ca74ac3220106a3f4f003de5b666e8dcb137bbf +378b18ceed536b01a57e268e9386b34447163eb03db99ce679ff2c997da686ff +6bc564943f50d32e4de1095490aa1d925f19989fe1f756e9b6b997e5e4ede91f +f282a0e1bb927c9dedba6b62a847c9cb3ecbf62f60444057dd3ab54b9e01c012 +6256a539d1dd9d57323782dc1681e53867d674cc8e0f541785fed901aff9319a +3d265d8d45c18881f2005258d8ae39f3fd46375c39e1ea982f7db9140bc585cb +93febbc30d18bdc34b9ef7b31b7d7a80f9b498c135710927cf347c404b3b544e +2c1d2a8afc21a56a53840398604d06ad047d9c754cad80b5292de4f727613d45 +551abc4e346ffd0f8c00c0423d4c646089268ced4ce874a852f31d4037514208 +f8e6fe8cb9e6278ee17fe4f79778a9fb0da45a8b2e4a940f704f46baa25e6c7e +0260cffae4d1a829e9f1f2aaf26e747ea6fbf50635b489a83a922cf2e708dfac +653e1ef48555682b73ffbbe944778b2c764798578138e03c88fcdee982770fee +051af9746b5cc9ac17c6f39a4ace7be340d9da20cd1893f394772a50a7461888 +d6b9a53443c18ba1ab508efd75c31884a6fc7048aa6bbbd008e4a86d9a9e3f65 +c9cf784098604e0fbebcc9ced6281853130f9554061e258d4ea44d83a804c582 +9658c97afdc8993872470076a45bd5af5b721abc8efb4197daef2c503abf48f2 +2edc13ab1720369802fad408e1a2fa891d122715d70f8c316a4f544a7af1043b +81c7771ee06c0c6a3ae659681ec1589595e4d3763a65a4bae96805069d1af4b3 +cec72a3c89a1812b224d5717beaa317e044beec0990157b398e2462f3bc5f8e3 +928714702f7d7bbb0de3a2b6f19f6f3bb74a7bf955c01ca2dfb229c5d0ff3382 +8383bcd1a3c9d65386dc6f6e294810d3f260a1e03b6508fb68eeaa54fd215e58 +dd1346aebf4f3602a9b6a33579122e97e5123ad47926543191ba61bb3bc50a13 +2f6e727f69ec4414942cbab957e84cd69e089da1d4bc395d74e6d1d4e02d47d9 +09ba2d6f1fa1533b06e1a4d3dfbee2b87b55b2ec046a5ab9c29289cfc9f92a18 +ce1dc58a40ee95f55fd4a07b8c53ec269ae2f3e811313e0e68e04d80ed12e9f6 +447db4ec3374fbb8aef6d7745e29cb83cc27feb715564befe3a403feee259ddf +701453e12af87959f32e56424569b73e8fc6540b7c160afc3ddbf0f823bb1c63 +7aaa837286455c7a702aab85a01539b679917fd65ddaf28c3c1cb19d6160b387 +667e76a632cdb8cebd0f42c0440d1edaa874a2b88671a3d2560e204caee48bb7 +d0db50e73a52e023bd6e9d55bc4dce0714c56eba27ef588afb5c863efb956a8b +2d4c36548b57bf43f88d79263474b55dd41e1663245da5b221fd514a0f600c59 +12d8e838dcd06f2cf4a621ba77bbfc6970aed527cb73bfd320b749f1430e9334 +f557980ceac4173ba81dc84ed659c9eb345ee07daa1c05f5b52d67201a2ee7bd +bc701e583c6a95b9b183ad8215d57289dc11b4919131d9bb1f8028ae8a406c72 +36d0912dd4ea3d6ea712f8241d73e7de42a37524d00796d8995d00be6047e338 +fa3926e8015c40eb146eea691ba2bfe19ae67c13645b24ae6ee4efe7695a5d13 +8a77b000f0c2e954796f99cb1d119ec63599be3974beb2a28c048d43fde932ff +fe4b76fe6abdc04cc107e55e46fc59604c49535ed37b9bf77772b4a5decc9af6 +b507b7c9f1552428c80c94c13a7d81e7dcc95ac933dcb025c6004acbfb8a6d6b +3c2dc13b83da960457ecc6e87299103248176887cc69152873e3cb95512a96a6 +88c4458ffc4735131d8a91c5cd0cc5220484a502ec198fc7f432f19fb1ff9229 +c6de4b5e5236e327952eb7deb660d4c994b30a2d97d0a1d08c3762bf4cad6e70 +37babfe9d3708629192b3c30fa2853267f72d36926b03144b5e94285c5a35c3e +42b163fe2c8f93c537b687ee42c04ef26fd03c080412e2fbe9c9b4dd0ccc3b5e +201f4ed323a681c9d8c631c7a54ca4deab8e54e6e359dc7fb90cd2b791a370a2 +10831025fae1d1eb47e8f8198a10b7b3d0730d120c04982ba10466aaededc469 +2299cea2726b33da5f80d9c22def8fbd614bfc7361a18fd93da44d4234fb85c8 +ebfe6a423326f0a5adc55e410aacc8a8ce8833067c28f9198e2f40424594ecf3 +2ed366f914d6aeea9941c71ac5c72dcc7e0a60160b88feed1f081b6403a305a6 +6146d36c060581dbf7c79b869fc25b7338dd9ac9d415c42280487698d037c9c1 +662e0ddf9a59c3c2ec3114ecadc5c1f33baf199a4ac24574cdcf74fa3d56c01c +8d239dcc2e35f2cd55872c296b5de5ffc0736b908b1cc6fde295723b47217c34 +8be600f7cb6303043aeef5d82282b86384520ba6ec2d4c523b73487875378169 +7853b3eb8c2a0733c9d2c0cba231da71e7bf871754d46f5c069fd46d009915b7 +a8ee09085c35ddb295bfe2b2cf42ca93e88a67104666104663698478acd78b3d +83e4b0171d318f71c1e19adfcd4824a48bff6c4d8d54d49b5a25e2b0c7438428 +39c1c33a4dc0e2aa60679d086a18764a90e2be67aa036802ca7458f63157307d +f334a7931f1c0d1961fe3d2bfabb675e0e1ff4b7376ff63ee7de9b7840801180 +da53c79a38bf1fdce7af1eb4296d33f0a1f5b136d1afe002b2d20968ae83bec0 +08a5a049374d3bf57fe81897403be89439a9c5b3a1f2b85a8d6a136765cc7beb +97fa8c28ad37b5d9611e85526d9dce6648956e79b3f9bd1ea96493c838e0e929 +093b3b2d04cd4090dc0519e5eabbd7162f5f5ee40fc29ae2f04f42ed6815da6a +78a097fe618198b0798fd3d73ca39cb9f37ddc0ae4c0dfe7b23e2c057bece02a +c4d97f0c2a21ad23d4d000994c9d14bf7e47696ce693c331b8b04a99507074f5 +d9929da7a1c59b00173bbc8a6dc7bf73622aa1b9cfa570345d91483e7100325f +7f3e4f98376907a822987c9461e1273283b580d63d98aada819e41709ffd3606 +cdc4de00fad963d0425b824e6ee6aff1ff5fb28be4c452f1341613d5d1e65b6b +74d13ee3fa44ba22f6f190beb3faf0aba1270b5591c6b03dab261292fc42bdb8 +24e71726152b464c08c9d6c27115d1d23c6c79d282b4f2acf2b1836997afcbcf +54157d4e2fc97c028040cc902680c251974058ec1a264a26eb1ffa5b0bd4894d +4694f4ec706a227bc1582058738f8be713d12b405ee83e3da0c251156517c243 +3e09a19f73f045f395b0d1397ad9f53e44452cb7f81b12c6fd43c0827c600f06 +86bca2a191a09079f1ab775b53e176656d7ea1cbb4ab89dbd6e3694217f47dc4 +2575e638ae40b4f863766d58ffd9699641604b2b26329d65ff6f4f6dd82704f4 +a2173ed6ce579eeafb89b9251500df4273e489cd6c4334b94767b0fb7b4251f1 +d36beac71dccc7ece7e497098a4ac5848536f82802944d890127a8c9ba7054f1 +395f7a70135617f3bbadfd4afbb1cee77541de70f9018742239ba1d9344942cb +7df9a07daed16e93f91bcf157133649a1a7f17d8a47a9f939413b3fb2c2b85ca +72e8c4b35dbeed2e0b82a73bbcb96cd7daca4e46fc6ebf9ee31a1028ff917739 +d4ad846da935c1379cd04813cd5a3053786f905ada4208681782a5a51aef267d +2172ca3917a0b738f2c090af75c88f28eafc797f06d1b6a14752ce23afc089be +45941d1728eee1f0f35238cdb5d4ead0c33e8ae218a967e7c4ecd144654de4db +ab710db6ce5c15b31c63a0e00b2558176452b410df77d24276c28eef408243d0 +58d617bf00da10da5359becd694863de4fe0c8e152a681b653132cf489b463be +77bba9b977a350fa5e32e47b41e4a35267a5da01829b560542b8874a6fe7c86f +2b43f491d39edd4b3605d4d1dc8c9ded589b944d775491c0f1639833c8bc0e7f +4d3cda8444523da6503cfbf2c093ee425b6ac3a47f0ae51343ccc13f016d5878 +60a574d574a4e0c6f648c75ddb132f5a93c0e7547ecec6ffd2268455790ace4a +415e14671a08d0b0b3b2b75b5593dd65345e1c5b9ecc8c970f364ba90024e93a +06f7e03b2eddaf15e5467940d424a5e10bf62c4f30359f128fdc70506581eeda +09bc3815de41fe9c307ed522557eb71eb58a88afaa495501d3c86cd6e31f7cb1 +15abc7e33ea4bd5d1e17e43ae1c2700b4f3a78236910f2c609d176bc730cf32f +371e5b76f33c9845f7ce89ebfa3050aeff897cb99b105527e1354a6f38473daa +a39d41d85eca390460d57497ad7551a6fd303607a0a766b217114d8fc4197a2e +32f1d9d6cf26c7b79d02b7db3cab16824ba8fbc800245f8201c2dc5949d34a72 +067b0187a9685ec413c92d38549249c5fc824d4e1a4b80e51fa2aea14da739e2 +d648211f1f786508d9be6dac0d648252fb23698dfefac758c95ae6a783a99ec9 +2fa53c5ce09031c0cfe623317adf118a9ac1dde9da15fe045576e0c4fea6a267 +0bcdc0f59d60336c186d42981f15f4035247d5f88ed82c5e527d3a5b97911cd1 +2d29e719ed9291525f3bb733a009fd281fe9c5ae152718b067d1491222bf29a2 +95d9e411e4b38b77b8f2a82967aff7411ec0c573f5712ab509caf9add9c838e7 +57145397106c6aec2770ffe028664c8e4924a6af68113030a9a717511d36d48e +16fd34f79de8172e77df0ca3d1909c6d84b25f55c6002c24a8bb1d8e164c1805 +ed05185a4fa51aad16c6ac10edefe346f51578f7e9797f8652c4f2c4d4385f10 +a028bd6ac194fb6901cf5c9fb93cb1bf7a5ba9d8c3121c2c7d5c16dc090c1e82 +e708a5c68f35143491d070ac6fc52c1c92b871943a0e62ae9955ac2d74c89235 +9c8a4dadd8bbc40d1a412147e72fb25f0897c21a023c1e5a64bf9490705b3844 +2b2d3eecdaff1ea42a0e613a47de97de3039b4c2121e767d25c9ea8260609831 +c1fea380ddb6e3d899738f120640a20d68e405b628c36667cc8d5ba98aad8909 +892cec1f091c812f745e70ca78142d827d1079e4c81babbd1698e5a4b184b128 +c71ce1d3b537fb18cdd8de063116cc90ac2f663e9baeafcc7e04e016f8b59f80 +46071f7b865ff0ae3f6a08c96aa39fa09071cbe5fd554cdb19a35366fded5235 +b4d4fbb00dbefc11fe53fda9c430ba1a6670ef8555ca4f669587729016ae884a +eb255e750447a8b710458e00c9b8f705e0039ddbdb6b6b11f9f6f79651df0f21 +9a8c33c42d978cade8830181f16ebdb74d2c6a1d4be6045dbc19611d974a9e90 +7ef9f098c9b56ed62864ce1e453bdeb3536f55d376881343a1276655d997f0aa +f591679d645586961657962513c86bdfdf67114a6f55db1c0eaa7b6348d89d43 +ae2ebfa3ca00423072498839ed9f10fab907fbff7737ecae6c362396c789453e +74c16a78c8ffb2a90ef68f7d2c19cb293f1be634e5a55f1cb1d80735971f31b8 +00d3b4d2c0951b9c28ae7e2e6fdcc0b4aed88aae388467efaa7717709f6f5db3 +ab6e47d745182ed981d2076256e9dbfb920052e3fc2189c2a0477da0ad863ad5 +358a69312e1210dcbfd97324910c0f417899c1688b668a6a64e610b2d55fcf8c +dbd1b938198aef85e46397012e0524278ca4ff0f3f11fefee4c9e3e108d4a43c +1a35bf005f1f72d07d3c0e2cd6ab89f9527bdc8125d2a6709c1961e7bc091061 +79d8fc8703b33fe28dbd7ce7ba1312802c2615cf7972d2e121282e06de7af3df +8713d3c976ccb1dad4fc47b82732af1d351840be8b7788033fdeb27d6b651029 +8a262a8c8e229c1003d4500519fd063ae0bd5da72b944507a3d99f7d5c061e11 +6a9cc5d69e22c266c43a63566f4ceefb1499ef98c3c3040366bae09071b0e0a8 +cbd5dfaa23a844acb73c0c6efb98fbc09ae724227f4b74ce92dd01561b276da7 +f7753ccebf5adaf10e7f3e88f9da4c5f2aacff61d2635d866363f5b67d79b5ba +5646950293f45ae136ee4850d4187272399ecd3c730ca8d602a1aa9afe08d79b +309ed9391d73be1519af0458b8c063f09aa70522f602004c4e8ba6fe2e7f0aec +9990993b78160bef6ce6ad5d373c461df1dfd9993c4a6b03767287e67e4dedae +6e191d371516bb0c0158845332d1ce03d3a816036a6abf4839dc5358ecacf476 +06d22f791fbaaf5e15958001b072c8ce3087b6a0fab46d034bd2e2810ea746fc +f41f1c3e4fd95c89d24503c149f294027e173f25f6e51f343dd5705ec4713dca +3d3ef4436532cb104ea593ef659f538bf366254be826c24187291d0cca723814 +be6fe651b659428fd01c5fb59f91d2e1704fb0a345c9ec35724a249d54202e01 +48c27ecc1a0d22dbc51be777c43665454bb491e6f0635ba722a7afd5dc055bf4 +0c0b1fa211f23e58033a7976f6f3f2228190e5ac6fd1531c4cc533b54ac25787 +089d25383729fae756dba2e6f4e172e36b00a688a2028f69b4e858716aa87cf0 +b868736c91261703dac160c65ad481faa17e9b30c139ceb8637e6ea247fa612a +db4a4576ae9487e81195eb93efda4f2f6423255f3fd56c483021a2686ddfe144 +32c3010014b067db5b98b05d6ec63318fee5a8259111ec2b0a830fa2581ecc5c +f4711c39be0d58c0a0b69a544abaca69aa288d8b7b476f9a5ce1c07e390c34f6 +a8f6d9923f9bcbadc238303f76e35657eb71ac623d03c39b428f778ae6d275ac +5b9d4d9cf4729244202a097976bdb448f8cecd63464a1d1afa1d71aa4ae0b81b +89c5508a4b55e069209ff7f08a07a2739afe224d6586d091949d0f388129b563 +b5585d91df1ba8b70ace25b1e28e24c6b7fd66b3289a83c52a2a23cf2febdf2b +1e3694b7cef3ef6b0d20de207384faf67b94e8dc9b6b1acdf407d24b2db15b0d +3b239d8ee7ae0bba29fad3d5563a2608f09bee6e91d8deb135602c35a71a048e +6742773756560a34cddbcc1910cf44fc6ab93b0363bced21f78acff43678fff4 +5023d2647b81dbb5bb1d7eb31a0b838ae74c518286d55e04ea5fd8b282502f23 +60ee82258b586d4968ee40dca20f129a6c9da98cbd992748abfbc135d0b0d4b4 +5aaa68f66aca12d9e37b45d5fb33588f5719e1bc103f9314a8815b164600bdc7 +0cd012e5bda3f0b1891ee90c5d59fb8af20c178ece291a6af131e2a0e0b9b7f2 +7cc276409797359fd477034036db463c3fcea4589727621dd6b809f96671318f +4a9fb69eca850b6a220417d71c2a12c7f258baf88a881fecb26b549a77ffb069 +0f25bbdc2ab7744433adea124bc540d331f8354bd72d4a0875f42220eacda8a5 +e51bf2e18c0eb220965f01693988964ab89d193aa6c118e083d6e6c47e89afe3 +8a67f5e30f03a9d4abe41ec1e5650eb2aa9b8f6ba047bed93b2c57da605358b6 +1c98be8efa5eca0e2a06be227323d247e53e2de97f01676e0a5234f1edee2a95 +18adac0280f3cdbe517406b7a574a5f6ed2b538b0cc72ce5e374088ebe358a27 +2e1aeee317d53946168e4f67112a67d05f091b03c399c430172c60e8b63a6e08 +7a25e6c66c1cafb2f85fb7bd8ed75f5739e8fdd8fc3c9e82baf63eb52331a727 +8d9f4366729a45ce5dcf9ebec7ee1dc6d2bf14b6010dcf4c7cade424dc1f9705 +f158a8ff82c601e19f8da494720c06e80fdeae8d3aa7540767e7353298c59f5a +d2464ecad10bb3dbf506930eecaf8abb039b29425c417d44168ee79687c590a0 +7e0b5d873a04fe9b256d51495cd2895490b1cbcd0308ef0ffb58c0e513d7a638 +cc2b2be9ca1a07a6973b95514c790e27b21fab76f9ab78be6019cca26e820478 +ac2a243c9779023a41c77ce524d2f024504b5b0e0397b8213a2d5965a23e3dc0 +eb3089be56f9bbfa6d8b7b9308ca262f277bb41f54734fc007dd828fc270dcd5 +97ae3dd2b5f98335f35b7679c10bbd9268bfa3d2eccca88c357bcdc00362c8e2 +0b64bdb8b92b4cfe6b02865dba67755fcb3deb933e0d666f711ead5b1d9c5ffc +096afa7a368d8fb2f1dc32d2d6cf68a9a761dd8ad5341adaccb5dee75dd1f702 +be99625358b044a01937d38d87f961cf4ca88f6e64ed4c3a18e90370dcba5717 +59577eeb9071763a42340077cfd8b524a96903cd81e1e86a840c5e3f57070bf6 +7e8418720cf65cf0eb82e7e9fec518db7146d5bd79ceeb7eb9b404ad594cf722 +a198989dd4a041a9c2d5d3763cb1f54cfe32c8db08b40e10e34d24b9580ace13 +29a2be5eebe34a0a872539cf0fde02501000c65ecbaf959d1f50e00958a2309a +4fb3ef84086774d86091845e39bf7c6a847816fdf29e27d82fd2f3838ef0bd20 +49d8f247c7a2c3361e7f69ecce13e1e7bd7a456ac886c71780735e9b3faa1d40 +3aba4c1ebcfe8d3d82be4e1f2e8f488b52b678afe83cc9118a09af3aa77df9ce +aa2490ba8825990baab9e15cf80d58dccec1599d0a79b8dd8f695b7c355fbeef +e55dbe9bc77b0ead5515699b4d77c49fb36410e463ebe6596fb80b1b9561ad8b +190e83c5e09c9d504f555d023cfd572f1b36c420a665809577b583d76cc2d90f +445c7d1af96d93e695c1dc68a61a044b1f73ca663bc749d348c438ee6ecc3bef +58df512b609a9e1fbf6def5d7e4910489ffa6f4808c1281674d8d34506dc2057 +d0d790cde02b40cde9abb55e61276c84847d2e6840ba074d86393b8b529afb1b +184d676df58c5009c0cb8feb4926a6e49f0f7bdf881848f553785820d4431152 +ada0f2ee14529ec6a47632c865f6402e6162e70ad38c54571b17888e4b21b3e0 +69184f9bcda9528aa55f321d424729efd781e402e5b70790937f4cdef717c5f2 +2fe0eb2a174ef4bab5133925fc21c8066a7cc09379e7fd84ce2a66233dd4c538 +574012cb66e1ee29d6dc340d09470789c422bd7e3fbd440adbee1a09c4637d90 +ea69f2708c2ae06a69b2db4753367174f6ffc9d6b9fb96c28fbccef13b924b06 +e21febc82b3292ae3a84d5c755dec3ec57cee33b583121d4c993d0186ef63fb1 +c667c8f92018ca14b42803de85ef09dfe62a03e14c2cf2756acfb14869e50414 +872ab1c413bac90b16a86cca66c17830fb0c2089a0648f13300997949bbc0b5c +4a6e2e64b13e37a8c12ae1fc10710d0d88814a338a4de9ad37caaedc1256152c +fb4bd971e6d0df690f00ec26edb5deb27b079fb998c3704aa9e3b2bb640ce539 +c5213164b2e8d898b0bed16b1677857f039805e238ea7f1075a1366283b6d0a4 +36140f27fc633894fcd063bb979d7556d96ebc099422c374a8cc6f885b5feb0f +1bdde8e34a525806171d2b37f0d4979d6478b883164c015a57109757616726eb +bab4e22d878635f81581eb308743260cdd69b092945fc9f3f2630122a5f6ae93 +eb6fe447baa42eaf52d91cf6d6ecda481de970140ddeee59e8c78ec48eb19ecb +cc708a6b3d6319fcd85a69eaaf433557839fefa2dd0a78e404c56c5440870fda +742e45151aca135355491269319bc7ecd27496452b2bbe7f5bccfd55d4e660e2 +41be4e37dcfc4abdd4fbd7d39d5cd701b92cbfdeac86fc1b92984aa190f1833d +32929919afa2d69ed40bea469508f4626b7619ff4fcc1907bbb400b867022926 +627dd42c283a9f30c4e97b1462e444defb4696000e14d603200ffddbc15b58b5 +6414101e298f2a11726af3018679575349d617d823b1120bbcce6fbca311188e +cbceee299f450092f45dda5c153ee5f2f155a4b89b6bacb16d9b2aaa41eb1b58 +b0358fa045e2348a72720bd3331ebc71077a891dc7aaafad22eea50f7a3b2fc6 +e53101b1dd7df5a48f5514f0e24d9cccfde0af6975b1310065b4c4258c106047 +ec262bdd234e66d87ce876f7e340be652038e5c72b9bab728a4b524b5e4b73de +6f3d52fe1074be6fbf9746f6f3dd1acd289d391eedeeb101f9c4434e626deb02 +4290a6e8f31b11170adbb0660920ee2f72058f93821dc412dd2e5efb44545d86 +1f4ce172d8ca73a3b10d649ee7a0107a2b3c08fa76d9003b0770d9a6cf346e24 +0ff6371e06430dad6c67f73d948a559d96d330a3c198dfe293d0971a3c4f557a +0ebd5b3a0165bc5312c83d2f65a4142865d2da272d696bc2faab23404324e60b +302687859b170d06005cea842130e028a29c0aced48d160f5f2f50427b0db45b +257885ea97d60e3cd3f14cee36f047096be8aa3f6f7061ad532c6a9e78f151ba +39f725356f12f6539bb90631d0589148e6aa1f0bb4f3c0cb07aca310baa811b0 +8d3644410e3b0be97b6091c8af12e37f5e0e1ac05ea632e15211f34b5481f460 +94f983096a813a912edee89051bb2f787946df81fa34886ba743f13fc2b467d2 +2103cd5f05d9211e91ab3ec237c1c84c5cb10a2e3b2c4171c2a90e0f96d9d2f8 +10fba24e369221bd99b51f50f22449e1f09c87b5081135ec8c94c93dba4fe8f8 +d26663d0288c461c4bd7d0eefb0f306a78762f91e0d01c28b84ada3230cad9ea +b4fe6b77ff0d192582442a750493f44c19eda5d203b2d09f4d2fdd01e52cc814 +1cafabe45dfa9ea1d4beeb29598d1b6498b841cac682ba8b81261a4b5a17df14 +0d065ec2b479406f7d579e6a6b0509aa856511452f3702ffabb80d3f33dadfb9 +808c00d858fe6912a2dc265d8f0f9f83aaf93a952b0421f0262cd363c5288e46 +402e60cde6c11f9136cba27e4b889ef694d6e9a78d2f8a0b4697155dfc65f471 +c1748fd9ca10f796bc7340337128c3c19141810283c9137c441aac74cfdc50ec +d8c52966d50f88ec0381278eb33dccdeb17a67fa71d349570eb5284050073c16 +0408eba6ca32d7b010fd2ac4b6fb8753222ad14800595080b56f30c6d084b015 +32385beae6bc230132bfbc5ecbc62c80b5e9a5c6360578dde9b706925b5e2997 +679f78752e905dd4198c3e454d4e65e42d07914a33ee2a079b27dbbbf67e2835 +a8e86769067e6d57172877c23459d323df2bb5abdb0c00a027a1d5907ec70620 +ebc85997f293364d161ea227076610aa5d7946d63cb934941766ea74d89bcc17 +44621f0d80f28fa3ba50e5775abc22ba361b105079d8c3f3746b9f87d03794db +c996f2920cb6ba7ef98c4bf8dfc707cb0b93dbd2538fe268dadefebfbc60b173 +59bc0bbd9e55f3283c8ad1d9e988de7f3a97d990aa25b5fa1ddfff1ecef0b1be +eb296de03cd3e83cad0e78787b2dd770d58b3770645279c405a79d4c428af83c +008f6902845a2980c36d6588c3e5e76314507585655a4f72eb933b1c43bf3113 +d22be5ab959ffe6cb4c9aaa491eeff19b4a602939659de96e68072020043e216 +0134d5569925f97dfc125844d19d3aeccbf8e6abfd24b6256d57c879f2fc1c1d +88b190c0265a9b7974f9af9669aaab9f1cc1be6438ba6375bba678a9cd8367be +bde51387b9047ec705dba632c346c4229647aa15a2e11c5d10b82cf05649f545 +ed8c7fef58300bd26e0abf599f04254553195eac18065a56af48fc43e6731ebf +fb85d7e42e00520a78aba1b2658ad6b2300425139fc0b023552211a6794b8f0a +f3b2012cf0de11caa05b311734232460db4e45174f16b0bafd66e3f8f3f54484 +b17fbfd2edd7160c6e42c2e5fd8443327eed670cfa73d0946b4b279fc59e306a +ce533008235c62127e6d8e94d5719c313ec07f2ad2c524c7b3a2fac6344e5f7f +81c6c8fdcd238ea9208e0993dddea3d6e119e71fc7322c29872f5cdba58b1b39 +eba55485149c012cacb3e9cbd2be1681a4ef0d186fc26c442e30fabd96d2b781 +69eea24ee4c835a83549316858a0662b33c5ac2355d917afd29c56022882a601 +9c7002dc5b9d00cc279b53d2f89bc45dd66d7fd7561e4b00299d8814bd19ff10 +ede52fae6fc8cec0264f9875d943659a09dbdf87c451c70295fcf3747fbf7931 +151847086e3ca788e04657b64c30e9bdccf3ec9784773ef8082b3fe5bf342e7e +09efbef3cd2ba4ad61904ea2582becc1aed7a22115beb874b17eaa32bbb6e303 +caf1e94f3be0b8c6f2779ad1a11c2a3d2b5bb8a41fcaf7db170dc082c90554f8 +263d5d92717ce6fb6c1ef527e3cd3a615e7f105c7109dd9b584272a9be68e309 +de00638b426e4e57d6ca2436e12acc00da9cfd93e70ab0dc07eec2351d429b98 +08bce08c235e52727c09208dac6df5fccfc6dfa87344de3a63736c3d2cf6903d +f266ea6821e729fd3a4e72806f8862a0a43d6bd93e08668848f37e032b5da39b +aa7a7f37cd0e641847fb4c33be1d42e57999387a581142d3a2c4dc1c14904d05 +178e1a5416a02f7520a2fc3916c4f3a2376b0473d44981179b9bb07c33043073 +d85449bbd707b29f814070c573a63ce3bd4dac7363b87ab571aa9ebef60ee29f +40c07bb9024c2a70db32f1742b8c65ac5acb77f24863b110613b8fa48fe1578f +c412d6b0789195a15ce8926e2a05310b9eda05475718e05e002e05f3f7698913 +0f3d94c8f9431932c7a9139fe170fcc799a54a103d37ea3ce09f06999eef345a +c8b95bb0026ef043622afc06a210162f20f99114604e1507a66fe62aebe56159 +134df3c51c3f9365f95fdf2f889b52b5c518294973be82e802630eb682c8b4ea +77d2abbe99fb1dc0065a0600e369eee21f3ffb7b5fbd83362d79aa3bacb923f0 +e4f10a0324bcd18f0b6a2beb91a84360ff73c9b5186e93249e11a099fd57eeb8 +f246e378e9291ba60c01e64a5b030b20e54c541b58e661a488e5fd1200be28d7 +fb0eb0ff420aa80f26a5eb32bdb7b4c237b36c4e68a7bb37ec369863676985ff +595b35f9d8eda63fcf5b387deb65f8505fa8eb07649edd72b486f95af0f3db15 +4ad11ab37358333a76a9f37e8dc2fe6f89552f91cf66172df3b78cd2b957cad7 +834f694566b5296fb00d0ebd22f750a674a9f1da8648b4f47c07e90d04333fa2 +d002a51300768f7664719c502afb88dee0f9225bb4238fe0079c9ca9a7624ccf +f031f23ff10ceecdefe477bebdbf4108b2a3526a5afccadd924862572f89d80e +4ebcf62cdcaef336b8e208a27661ca28f46892224c8370acdf3f4742cedbc0b1 +c8abca8cff4954896cb9a929d51c1fefcf7c4929599a7b20c29e8c256734c9e0 +e995d3bdb99d7c8b5f5ff115d67edab9024608af3d76a8fa2b751f458684f59c +a656393e8b4e22a6064c91e7edcacfbe6514580920a703ae7f7326196a20c060 +633c82a32631cfe224c216f1c53e429fd4c7421527e7b2427eb88ba40bd53724 +dcd3db5d8b68d61c23b09e6e83dbb506c69366bbbde523987c5834df91438ed3 +d18fd3e7225321a154865b700c06e5420833ae8b7dc4fb07cb1660df7f664b39 +bc9079dc441a4eadf5de3757827dae0c2b53936998c7764ff3e1e212d4c05e04 +6546de40d1fd185e8bc2321a9ae7aa629df02f0636b33907975f3d801584f3d4 +cd983a0bca4f7ad717575c14b1dd6e72c247f74bd6f9f420dc2ceba57cc1dce5 +473e5e5c4c47cd1d9bae171fd4185ef88c420213449905dd0c818c68ad9f9dbc +7ca27d7bc09fbec14d1237aad2f615f450c4c1f55589ce58eda7b77389e6f821 +265ae67eccbf0c881c0766822823120dcb823885c61a5323eac4c3602f8f4920 +fd4a869f7e9a64ce396b7aec63f4f0684c22877c739f60687d72e459525ecd61 +f54b24b4f5f567b7c89e67fd3db198f6a58f7a3d5ac7d6da0e961e10570d7e99 +611559f0702c1e6a52671f5b3c0bedad56c6caefe5b6dde02e9ad9456529ab31 +0b932b3437d47ded15d10feb5d54397475511b17d464fe67f3052d478a923736 +f7dbc6b2b1098c0cb3741c9fa7b170f4a733a01149c439088a015a3eda2b863f +b0e8c7b3df67f9359a4a9a3e6b2de247cdd162fe65ca2dbb212e0dcb5ed82873 +6fd9d5c7b3223068ba600d5e7ea72e7510dc35b9fc31740f4fcab01e08d25889 +340c2eec3f49bef424a2228b5f18e09fd2428a0a0ece3117de85761461e21326 +2e3ee686174eff74b17d58b94003b12e69e2534779a0eb36b6916978c2cb2c3e +b05ce70b87535560d76e280a76aa55e7e54fb03a4332daa641d3e524f5821ebb +42f25c68bb180f6e6c3a6dc1eae3120f41d6037a0522800b19c86ef5b57431ee +8a25df3705ce170883e9b34aa60a670df0d056bef2cef059039d6f14cf9050b4 +a7f7f971db1dcd863abc531586d354333708a37ef0bceeb7a28e207b745b90cf +d3a76f7c4dcc6e13b9bf678f5e33771e2d8b898e51dafdb3a1c1225737abf04f +cb9ccf557a121d62639a7063d3188b8afe88320f265db491de9c53288203c373 +149e250e594974c8c3b4153d9122487086d33b7594ca01bb40538c2bff676de9 +f5cf46e4394585a3e4bc356cb5d86a9f6fa3cb6dedd1c8fa3c404795c9020250 +66655ad9324b324f5ca5f2ca35fdbf7279cf468946be32a10fde596d969525a8 +f1bb8c8ed67c746059b2fb54b273348f86ba3d245ec6fa1bdc6897f61f4b64c4 +f955b2f46737adf2490329ececdc30196d0cdcad349d2ab6373932b2bf34e72c +97e926e8318c7d54639cfb897152e891196d7a9c6deb3edf6b605c80acbf0a57 +17470c62b8d5c6fe5006e85a74cf3174aa1cfbb9446543ffc175ff0ab3487263 +ee0dfe91a31183b2d4ad85dba872903af2b5a8266f12bfae9d0e16817ad13119 +bacbc0e65e38be7cdd1b0514ac9eff1f9f030f56a72c1d71a37ddc170b50544a +2883f494537360d7ae233b8502b1164570d916bf2424adadcc76f3c458863c46 +d76d66a8fa5d10838f8977a4f35e53183f270b887f69448dadfce0a9b31422bc +46c1389db0648caa921e0233625f973fa340b7aea891892fec2848293cee68d5 +c87b283a6ac34e71b049ef0f2189fe6c0ebc9265fe5e11ac9a3037b7c799a416 +c7ec86b7446b1bd19bb04f05ca9350d98de5e01e69817af1887b65972c9b4396 +0c4b5dc0a2ce0ca02b69ac9b8334b0bf11c30494ee97bc44241b4c5660c70707 +3272e537fd67a31447c94ae428feb53bfe03cd10de4922505bc19b5b369c24f7 +58a004e50c2a320d6996afcfee6b505e487587caf85c30dc1667ee395cf77608 +93d89e5673f9a3f9b6ae6d917b1a90e971671ec312f8f740f2988c63a7770872 +02071551550a117d7b94312a4c021d100a1f6aaa8b040493c0d3d1c407e0abea +c9a1c9093dff736a69e0acc837bbea0b4b9a199a25f385d8c827f4fb12c83544 +d509f10fa3788e0f8847baceda0069b94dd26d506d7a28661b391b72643dc785 +66104c7bcd5b563b601dfe337b5d67f05cc0e1c0cb3472e264ca97255ff87787 +d9fe898a1203ab0f39d03a55d203483e0d611aa13c54c3e19a3840540dcd8bb8 +be05975843cbce12adac5bf464094b579bdcb0d850278e60c8bb812156cf2138 +54a4d4aebff6279a7a1596b28a955d2b83805e235bf247dcb506090ccc5bdfb6 +ce5654eb0a726341590e22b2445e267478493eaffc5c6a1a7c87900f99020a68 +e113d327f0b234b0fbf48dee1d20638ce08058d5e307421b452a986e8c152498 +d6e265a436b10d96d4b79980957486bdeb60459eda05c0f0ee682f9b671c3e97 +f501593418d46feb0f6d8ae01f71c540c4906d06eddf091b0d889b0948a3ae4c +b87cd0338d19bd9a5965a090a9a0436c070d476e99e8d27c2e17cf0265c8d235 +aeaa57a0654205ae484c1538ec475928d10dd31e6034f9de7263cc8e41780141 +2127cfe9629eaf2d8b94902998d0178e49feb877fd079a0a97e147ec3c4d534f +ac72a0df519b0e3ff3de7423bbf37b2726189fabcc2db9d914deca5e00d8eced +10d71f57d4052898a2fe08a1e10b5820a21c2723d1783e2e73505ff512736ffb +c3deae0efa5382bf56fce3597ca60e5fe9b3d466d9f472ecc07eab502f274f03 +d06be9b3511efb0cffec643204978d17e9904fd62617b8ec729a86fbe0142b48 +907428a48410a7d37ac6df018c2cd6e1db71c3c98f3b2ba39326572da6e81552 +e30d7c225ef25cd9e409f5ccea4978c7b7a7cf72ea0346917f744ef4e4de1c9d +718170a9fa0d14b79a00b52209538a2bb5aac96bb5ada609cf8f58453e2ca505 +97cea50d0ee2beaeaeb06552791259b0881517a32e7e89ea2d0eb834ecac1350 +975f6b333fa24b3b9a6f99b81f6d5de7bc78276a4e9932f532ed53d8549aad91 +32e6ce26974f0eeacd7f1cbab03a3e727090d2e36ffa39fd56b5c0af8f184346 +c7dc4c7115be7d25722d27fe47be61384e35da7a606f3e8ac1b21faee9f6f288 +9bbcab30e9a76ac747da4fc06aadb53904409c3011ecb4e2a9db9b700c18e132 +1b05eada920215b246d8d5176f8644922af32de9b66031ee7e21c9090d864701 +938b70e6c9aa97e98a0c7fd9aad3c1f1adcf7ef62e9c0f48998fbfc1bb09f01e +3d14d7a390960ee73fc5d039526752aeb39a9fc023a084ffa2040baaf1a2eeee +c74bdd138c7d6f5da8d2faae7b976ea4349f6d1763c5aacd16c81f80e73c1fac +ecab31d1d0b5526c89b9db45cbb719282d18116f9400dc31a47a88e1ba7743b4 +86b643d81ed997a83f9b1e3641e63c6f71a0e342831a5132505d7ca9d929335d +a753371ce706e35105277f9eaff56e20254d0b59d6057189f9f24e5581732809 +756fcbfe0187e01feba1d64d5a3b271d3d7d3bf2eb7933f043af3c8cfd96dd6d +304360d6bd5cf08d43caade875d2ea9288237dde74d6002dff2cd1efc95de207 +9c6bbf393af2bbc759055bd1405547b4529f834edabb0262b30e842acfdf0b19 +dee5e29a2cd8ff7ae0f621fb354047e7b58d586aa6cfe407d06cba3ed82c4e85 +8f827f115dd9a50dce75ce427aac4ba960c431dfebce6d637803c9392eedbf2e +184f9bef0d67ad492289589755a199a2afb1cde1edcba006c7c234315ef415a2 +592f291780262f4bb56c95d43f296990bfce7a16e3e2b15ad9c1af45f02a4e90 +02f26b4f59ad8e6df2e2ccef7fa5cfb731850cd300df5e9abd4182ba75bad9cd +d42d6a18410b70e6a120350142124c08dc0e14f647a416a49210e7b968fd07bb +242c15bf67f295f03767cb6a7fff43bd952573e1ccc884c68925f08686925dd2 +0776680ffd1791d056019f41ffef1f0135e82b067d6e8c3f6977ebce1d5879b3 +7e8d98dea6d0d33663da77446cb24b62dc40d82ca490b18aa326a53da65320dc +95b5709d611c587f42cfb003684be382a92cec8eb6aa55e37bf3e5a328d7b9c5 +dda7f42eaa0c9e5b43fafacd9da72d9f9d3e3f3ffef673cf8727a6ccfe33566d +41972bab6adf474cb9181e0acefa3223a5b89dad3d66fb4067d05bef9e9c996d +58139a26fd8f4e3c8d349d106fd49cc4d769e7a161230f0a09bc4df2158a01dd +aac96a76503e53baaa3143860ef0df24c2063607ec2a6550d2eaa8b2f461f538 +ce12493a6b16fbda5d27c62b80c6c6d63068bd9fdaf27c292471d1ca2d8fc41a +81d4067b366eda9c58e3642bf34f41595ebff508c28fc4f6d819411afda46392 +5f62f7eaa6f441e97509787a805012ae25937f07b57e220a37c807b49f805e50 +901b2ac7fbcb269d70fb036829b03737f5726e03b4a6b867b9c01a91f109e3c5 +c04b03e4ece87cab17b9eef79cd4dcc7893d12daa2d14ef1db9554b29014f081 +8a15d1453aca81cc6535ded79e2abc3575156f958987b662d1cb3252f94901b1 +d3f552c444f022039adb12f930ffaa74fb60b3b84c56c2368852428d2fe47db3 +9cd53fe07d004ca3aa916f6832aaac836afc3799352b53ef10e7d9db7269ed08 +2630d4622f69ab93a613d0e3c79a332373f81b7406629d1bafe414cb7a6ab5fd +ae6fae4ec525c731e700ab8e9ab9f6a9f064e953bac8f30ee362a8f15f9b4a01 +b941b1e316e40f0c91481889e7b3602be33784a22975cca2de7a0973c246ab1d +af8fd53e0b80dfa36a899d8fefd2f308db308db4d1114d61b457cc0e25fada16 +2fd8791b946489212e444612e454bebbfdf19578f51b45c6502cb3f5f70a5bbe +99574e19d166590cde1f69cd68ea4a458fc13e85d6b8e24745475c6a374c8b5d +d89900e417632544ca4c3957fa259518df5339c55b0e1b0b23a4c2a2abbbd592 +cc468de0109412ec7db99e1f6e983eb44a7d4de56dfe11a296af34949cdfcc49 +def468025813d574301ecef4b76d700b006fe72a8a9cfd8f29ca09d37b1c8b12 +310f1af12bf329eab45181bb159ee160c95382499e0c7c87f98d0a05815bb859 +812a816300032097dba6f030047d39cc45a611969762bf57c5d1892d4f380889 +8385ba37f19b2e181732daaa511ff98a1ded3e70cc6bbff035aae91a1488f7aa +40c8ccc034e8375251a712c3342209658a28d7fed0792d7a53feaf3ba64f7992 +6dbceda23767ad8ff440c034f4b605ccfa5700b6de8357e618f975c424ef581c +b01014ddc90632f93cd859b9da3eb684631cb3979640fdef69e36db3062e27f3 +214841a1ee7e60d2bf40128aa47188c1a39d989349a4bfd480d7cd0b09e139a4 +6b5e2b8a3261cd11e823dc2356a6f9f8c1cf875f9d13efef81cac229ea09ff5e +455d10a22f5f9fd121d5ca17cf50e6a8e9bd794baf95288c5bf02cc15a4a8ac0 +c0478c99940a2107515011809135938622af2b4a3bbe2745a7a1d0977b41b9d5 +95d64d75082b94dc28c17931ec9a2fa35dd8ad9f4ccb7c3cb0a8c32ae74da9fc +872c45cf4c7b2a6a37f56f7df1af7143a82d15dc485de6a7c827265a9cd3f49d +4ebeb4f3d3c7ef5ecdecfcd93ace0253ea00b24e2583a01ce01cba76495a95d0 +eb42b07b12859ef608cdbd09d59027fc60329f786b6fad2ec5fb8b4e087e910e +b738d0192c6b96841200681f70377892c07eee8fd9e790a0bba05ab74580b228 +75c194048bdeb512b19c8bc29315bff5d0d55dd3a0ac7c868fb02ae8c50d7aba +59e6835a4fb5befa5ef3edf0a61a7eddb0c9ecf508271ddfd92b6365b735c6cb +2ff9aac750514355f7802f389bdf52536e25182bb993da81eb8fc692ebc9aedf +eb7ee5ce90397605b1173dd9e5d7a32d651f74696ae0e441b5902b8a44d57755 +4b8d4b1a9f5de5a4456835b0ce4d7f3519c95b02c810085cd30e1aed792ffa55 +236d8b9f2ec70db72fe68d43c5fa06ea8acfb36056c8bca9d6a636f1294e4eec +74c1f3eb5592a537268243aa61408f4aedf632551a66b87caaae1cc0a91e71dc +90e0cb7ed47d9a0707946894034c68fbbf18f0aac1dc6587b60bd948033fd8f4 +2be5506d26e37067e28ed01ee50cc866653ff71c859f79d75d19eb2c499a65e0 +1fb50e4af851b655588d6b30cc242a8367ce0653da14a1e15dcfe0d1ded20066 +8858ecc985896dc3b81cb1950ff4b69ce701b818508ab3a786408184ad107d35 +dd9f905a137ce6a1455ff558ad8f064b7ef7388daa44abb20585235bcf36d1cc +7201dcd74577975e6956d41465d88d942f74b2924d30a4257c38964c4d861ef4 +bed639bcbccb2886cabf0954ee26aa8a21369eb966dcbeaa9a6766dc820db617 +e77b5d83cbf5344cd59a5c266fb44e128687c3d689c8912422ee9565059fee3a +ce6369325ba93f5bfc8a822682ec800ab05e0719faf6482382a1cb45301eb1b7 +7b87196fa96a2a8e5a912457bfb7b542bf6d5c8a214acdf7867368c61d799825 +047e48ab62aa43be5352eac06fdf697c88df53d29e8d1c46ed46f0e71cbe3233 +ab7e1826719fc86387a0954ee0b10929190ea16516bc0482ee76492ff2c13e16 +13bd8c4b4d9863d8342016be282bfd26f27587134143b63ca81fa45fbe8718cc +1512c8bac0a102b372633d19f5ae01eae11ebe5e8dbb547346c4e74cadf428a0 +d85563a8c2893d39a72d8aa9a713edf9682a6477d7d342d6cde6d942d48e7d28 +8f09334e2da59162993b32308e393e8c2214f593442a7cd23395e862150b7278 +1a04166a08825eb54c534c28506519311c37680a90cb5f936d6458d11e25fcc8 +07a7cc01d045700f88113e1d137bb47f88c758ca8031c38b2fd3896505699f9d +8ba693c802c228ac190e148a4387f605e3b273d752f76ee41fead3a45e613986 +3af11d47299c2db05b8de6f203cdff74767e142dd6651e96b579c8d26da4425b +a0060b007c85431a2c515503ac356b3f9e63e9472e7ab2e9ce3bfdae9a720502 +1759eb0e9bd535978f70f214e943bb3b98edfe2bd0b6e9600e0996e481e62877 +19f151397748287d9642c97f74af9cb32498f5450a924555c9a4486b0daef2e2 +a6d2b332eee301b82c316a4b72710b9edeee16236635cd177391d256e3ca65cf +6a1d3f6f30fae34e70ec5977f3b79a0261341d6f011ad3725b8cbd92155ee7eb +ff8eea3bfecb36afeeacf2c05bc38db7acaac348fccc27a876bd8c15816a8a13 +7c032d2d6f6a90803f77f1241baa18e19582743ebc5260be330db8ffc1d88676 +03cb39698e8cff5c82f711aa4e99730436a8d3021af37591ced18df99ae2b7b3 +d2cab6ce9b7033f22428a70729c579fdca4812b73308ae692813a6ecca7ada32 +0ecc86fc32c399c41aae8140c4e0bb181699180c97e6561cdc844a4729254cfa +25429d2e0bd0d2adb4c06ccf0628a6af1bdeb4e06bd48484d76de58b70291156 +55014a0397fff7062b9b44c2b1e0a3cb3463c0fa2e459be737d2c29d339ce91f +9893ae0163477740ff2485f2b20b34e8c304195a3a3421827c593f39984ec9f0 +ddc42c77c604e512746a3a372db64a94f0afbd97837054f5360d51b5e0f5987a +e76a88e155a250c53e19fdd0d34c52f849d7380fc6fbbaf661cab524d11e1151 +a0282560813865a6cebb39edc3b0ec81ba1c3a150201809982338db7f734acd8 +2efbe52863fb38afb70f6235f5fc221c9a34a711270e754f555908e63b073795 +d2985001f5e24126885e980b918f1a5ae059d0d8bd9cb650da34ea675f4ab8e6 +bc3939e5d23bd01f149341015fff333e82ec9adb361e40c246ce537bf37d529a +706be57e82ff2035acee5338acffaa23af195e4294423f8940d6789dc9c23170 +7f148a42b7aea6974666e84cd368fe80ba47a70523c9a3682efc29dbf5673926 +c8a52d557c3fa8bf5c46daca530a16e30dbf9beb05efb36d5e6cb6b1a0b72e37 +493ce8756d19fbb6e8ae2a6ac2559cd0744f2b2914c4dae2c777b7ec2a1d41ee +e420510b405747a49a2ae8678f64999fa2bd75957a9c361f1040182daaafcd6d +4930b12c1c691c5318d2b8f232e1c55459cf30f5e55ae7aacd94d5a02042ce78 +dacdb53404102f8d08a23cfa9362da75b454244c9422c7dfb38350556bd24d62 +72ac6feb29cf49c7be466821b146c21cf88e42da0a14e06133a3f0547065f001 +e3df7ecb329cf9ee519c8e939f4c85572ce373d95a2350d4eba32193ab341850 +cbe40dab05d10cf1cb78d21f3788aba2096111d72854857d48d8043455f6bc46 +078c3e2aed7a9ef766141432b2bdb1fb17cfc7d9342cc4a009d52431605d572a +057ad784e7fc03847ea6046db6e5e54577e1bcacaba008eccc48d7892d87870f +fa9577ea2a13e5b290f0fab8443857f0bdb6e1636ee28102e55f1a99dfe1ecee +013b18731c285900e21798e00cf329a0653e55858ac386aecbb4b26fcad09b7d +d568c382442a1b80cc19eab858bfa5d7b57c972aa5d05d3569dd843f4a9cfd7e +badcd4501ed799bf7f9d119b4390a1f6f4290a3ad48a98876379ef68fca6ddfe +147711ba0cb9136971ad0054c8b1a44201e5ef0768d2164bc6bb38065a8b8684 +b75d9de9fe308ea5e1138e3a2b17e1121a9aa2364b0d4220f9aa895e536406a5 +466964d2602353c0b555c9ef2c1a49a507af7e0256e2c32c60cd84bea4d74b1e +2156909f55624fd27c368c7e8e4fcf530f090c3145b8d9a48d15a9e7fdcc3a0e +33a9efb9f403611dc7351d9f87d62270c645a307d61de85e0667ddfa821e2da4 +6fd600a100865933fd45bb07d062d991a993b75fea3801f022fdb9e4a445c67f +bfa6af0718f142d57282e1218c34b1233842b8a6df0f655aab194377ffc0352e +c6d22a2513b114b19f37759a9a67140b78102fc48060bea695a8b908c186fcbd +7daf698f627574d83700ae078419cafc81e038371d9992b560bdca399196cdab +fdd4a26aa9507cf1709e37bc003f6e11ae5fd0b9938f7359cd6cf54e4b2c2d76 +50b84c79ccb3be19e647e715dbd09083e81abfadef08da7ddd091f81e10c8d6a +eebdcad8ce22e9b2ef7b1a260e168306ae3f4821aec358b50ca6e305ea0c05dc +d2e28fca7ce1fbc227dd2af231bd2d5e1a2fff6c459e2a1966d349fc5bc3d07d +7a2258a05e58b9ca6bb332e0ebb5a8c438d6154cabeb7de75ab6de59d48ad92c +82ff1f2f639e96b9c681b7ba2258c2650fc78cce9e931db50f22126a353f6186 +e0e2a3d3bb4117155a6b78dcabda739b55712173ab31e6b81ef7fe3ee09cf6b9 +81952b7a5f0f151e97c97eee3fe0c05aafc0685191ebdc7b479311c9886e095e +88a8f5bb78154c1574dc71a55387682cbe13f257ebb795ed757cb7fb74a52b52 +345b54f63daa391a4702a6020d64ff7ad28e45f9b8db1530cf78a43a723077de +8cb45e53e0ace67aff0e342eeb3ab57b1b3d898dd068eae7850140c6e01fbc7d +f0f1c172117b69526d8cf267da3503be9d381419cbca4236ff325f3ade6f40e7 +5e1ccba1482f676a602f6975edce351fe151f640a7becad5b30d30849997466a +42b45a065610943ea85c6fb7ac69f5090f3a0d539be8b7f495d686cd274e28c9 +82a60677f2530ccf5268b24b26c145c5ddec349357fbceb81da33097605e3458 +cba01fc2263991cfab6a41acebe09ee03021454341c629a068e1f1b328a651ef +24844f96d87963d11113d0ffa5297c8b5ea02676387ccc99777a72cc0eb9952b +3e6cc152d6e2528d90a566a3d1525154afcc7fab7703aa2260d9bff5c5769e1c +e03458a8eb1493a4bb1bcbbcd0322a84c1e4f6839c159d22c78bae506142dac2 +93887e5f0d8811ef22df87cc5c9b40da7095e25d2356771b577d4e060a2a06a8 +d7ad3755c238fc3133183bd9fc43e8670481520252f4a6c9d80063872cd2cf7c +219799ac3f6c838425d956117424b8f92b6407aa6d17d1c8ee87ba0e57b9a39b +bc6d46bf71b9ee5a8cb4a4e4f28f107525289354df02f5f916c77b4a26a8fc83 +ae9870df44b616c90eec6f7ee7459851ff5686bdb370cfb6675c415f75cfe778 +7d4fdfee8fd18cbc1fdd18a939eb60839153e5cdbdd37ac8262517350c741e50 +1599cdd317b91269d3f69bb6986ab39854b95e8e6e010a70de3530d2d5c5bbee +ca2bd3eeb458e185d4ea498f6b02e3b918da7021650d1b0c66f1f2280f327311 +e75c0fc29520f2b283cdecad19fda9ccaab18542f351424b520c53e17b574a9b +0321a5d9d4fda184bcfafda549d5d998a3c330dd07900e29b53f2919a55d5f82 +c70a5df5caedbef76f961c486dbeeca645dd3ccfa469ed7668da1a591b745a1e +3688169ff43dfa2e7ee8e5b7db54a6ae602b05f38643bd296d46d11af11ed585 +41111d9665eb9a12328dd38aab5214b53bb9b72c967286a9b70a93c3d3a6834f +91cbd55db0c53acdab0209da4dc18d573fa1475d30cbe5b06d534f8dec97dd85 +58d9debe24a3cfcaf3f59bceaa3136b339ce1705a075be97a6b4db6f7c943600 +3190de535f5396cc92c3ae606c6e0541a5a42ab7248ec037d8e0f0f841b457db +2d48a2fe2028ec30dce1ff9bd75743889579c8fd48678e5b6bd8ba04c53cd1de +8f5178ee5aebb67db797be37e037a4d3e27c98e8c3069c205958af3e5ba7f071 +b92f1dd9ff8e9d6c3c00b9c64ac63d862febb3538bdf793c69e054a2c521d02a +89b733010e2a8a9f0f71241cb56a210034c3c9f7dff6c37117291103205cbeb6 +0ddf23393d286533cd1239638811ff6097e24ea6afe437d28e1b81cb9de81e07 +95062fcf14d5368948f3f551a1d7a68695d264ad8b630e6741dea1c03114cc24 +5c7709355c143d70e349eea8c50471c82a7fe3315552622b9d239bfb2bdd05ec +a2aae0c1f0ead9166462173c350356d1d875996cb39d3b08e2d917687368c341 +2e796e1d155ba58cd95484183ce26bfa4ed947d6d19bd09d13d2fe0e5998f154 +6868d5e2577c8eb2dd64af9c9efdc504ca1b621592e285438f2961aef656c4e8 +a3176afd5b52ce6abb234291dd25840780bd4dab7db502d6fdc558ff9f487cac +8ac92048e4e0a84d847715c78a2dff5c7240bd9d23fa003fe7c9c23fa5433c0a +4e1494cdffd2dbec7822f5190e4409a14777c91e0643810c3ebf062a009a2ef7 +08dbeb77d8a4b86dd12e12e271b36858e22fd691d024864e927d743599a29290 +f264d549701dc0c12d8ed46ce13a1d7e63b7d133dce5fc7068957d21818c3905 +e830503ec0f90bbd7e1d3a9f7ded643e3d80b38bb1611566d660f6b41b416b32 +90873fd4c066843ff70d3a9f11d4c9a03718972a73f73b55871ca9cad821a435 +63ad6a717b1fe71fe396a21faf5c3b77a92dbfe93ecf4a6bb94b86c18ef378c0 +f4ccb974f4576ecfe3720918dae5f81babbcff14f1e051c3ce90aed1dea08c11 +365279a072d827867b5cf0e87865f8e9638b0ca8b0ae824496f496200b58d9af +87f5956cea5351be42c2600125d16ac552b379782eff2e8e43bf32711fe44ab3 +5084cd318a9fd9d0f206d3ad5f41c639188e02582676cc38d09fbe1603834f08 +07c08bc9da0d70b3892bedfbf06d1b9cd282cc4f38c3f06e3f0907bf1fecbc3d +ed3e9618fdfb25baf2f76b1a103fd2c4cb5030b6e4c8d058c6a01a90d436fb9b +e46dc3f37ce0fa785e2414aafa4443f247625189ce5d82d2a5d0105ed31a3bf3 +5d2974478ed4f3ba1cd534ba7129fe32a376e7a77dc0e31b452efab94cdcd94d +84bc554861289fa4fe8852d7754840dec99f54eb51982a047d8311e0303ab3ae +680705e36e4c0846761697385968c084f972053f1761ce2b54fb98bd89acc773 +d8a549ff30d728445cb693f579573106c69cde170c431935943a711197000630 +e1519d7e6d8c7f8e46ecefae237546a763601e0a4e79167d2ffd30c759fc26ef +3b1fba75de8386e3292c349c6b0e348c1211d412a40d004f3fa466860a108a19 +c9f8d3e612fded13eb9928674d382890f1016becfdbe40d9ff6bcc3addbcfc25 +834b1befc6b7d46a12fae801392f64b8f7089986cb0ca7891c2efa41b4540e49 +ef9f3d03f4daab92e1b7ed4c87333e8aaeb5b36a31231026838749618735a585 +6a75532950fe974d972b6cd54256c7cfe3bd8b9e66b9033abce2958def1e8bba +9ebda131ea2c551d29146ec25694fa3a059b62692b02964b2a56e9b42bf02f2d +97a388cc2d5d458254d31f736d95bee389a0f2e428a8efc3ba4c34fbc6b6b1d2 +db1995d5d30f67455123e52bbfe7e2f492e6e4ce717ef9e3412fcc68ab540d5a +968b1271fd4f4f9cdce1dedf2539d78fc7d592759efc07f9aed95598a18208e8 +41a88c7a2826596ab67c95e91a65dc7db1c57e30172ddf8aefd01e2d78d0d107 +2346ae0e654ec98eca90afbfb462878a9ba48b9c5d541c02921c471eca4a16ec +9cae01023206d75cf150f521bfc934f48c768a9f0dbbeb4b513eb5103894d125 +538e7a004c6dac38b26366e0ad6a69a9f421ee610a0eeaf1e096927e14b0aa68 +98ed6aca71a6a8966266fc5ddbf53582a496d38cb70d2d20d2a34b25963e0c99 +bc8b9be9f0ed88760e5847da80c11b8faaa8a7ae45a4497e34a7276e70df9f6f +ba67249208dba14568bea6de2811f4ffc2c56a290c61ba4606d0c3f3e551cbdf +1c273973c32f69b867dc049a2d69254332f62801c7972b898953bef39460cff9 +6e2339e564b0708d896cca0b76a54174d357f0e12c98e8b0addb8c89ca8098bb +f598dd550517279ef5fff8ba821a9ca1f49e75a3dab7b0d4a3b6b606be5ae1c5 +8eef95e43b1baa7c5e0cd914e9a761e83ec6074f84051999547a494964362eee +1781b8ad8d70a7a4655c2e87790131acb08ff81430f4534b3be2c68ecd3058ef +0e543adc436861e5658799b00ffb6e2af18c3e73bd4365ab95dd12daae25f4eb +70c2fc54e7a2c3ff55ce952e76236031cc7fac68e8af505e7c4ddd5a185af3fb +c8d3b6261aa0906147cb8b9648426975120428b5d49ead61db2a51054fcbe65a +9641d88bfef2195654e3b227ba2ce4806ab62fd65a1731b4d2e1b460a6cf818d +4c9e49ebcf5cb11cbbab01942fd694b559e7e6c67f2ba992cfd5f2c7cfe612a4 +5aebf8359fa384a303129d860ab7a3040513efb5bed0931483e70da1d077f389 +8c3a5204354734a94c8fdd3bee63af307b43772df30b55905b868b2f4e243272 +34146ae06d5298524baa78aaae6a8bc536e6fe40355c02e117e168eb8ee45a00 +e337e20ee15d5ac0e1d347562b29e89189b5a4e5c85877b57f21c4bb6a732907 +a6e7e724f7560e86572afc3e451b8aadb12b32730902d4b0b1862c44c84f1c68 +c71f269a1c87c7a7dd7a1289c845de408df7967c30d424a5a87b86380c62dbe1 +33436680aedfb135f36d5642faa7bfdab9dca10f280926b66a798a4f2e2d5fb6 +495e1c302633134a9bbaec664bea1fcff04fe32bf284991a1f1e67c39c30b02a +d99633bd6b3f8cffa1c54e15f5ca0ab712ae0d14e8096960d4112b71eb1dc288 +2e60ec335a57e271c84f22578393d28a2b6457cbfc926c39aa5c19c677480e79 +641d87fb726221f317d8a985a5bd7935264139687de31131a286c979f643b9d5 +afa38023ea1b38631a4ca8ce94f27ec1c01d706bd7822f8822ffa51a2f2e8681 +f721c7444d165fb472f5fc7206b6e3b74ee53e4b5c933a6f23a490bb39e872f6 +afdf1044d20ca8bdd7dd5e4ef11495d314cbf83b21696fc6c098128969acfb86 +f9ec0b0bed2782ce32893b0872803cf6ac5d539644fde529d9b1be641e565f6c +5f7c2ab73231ca3063f2f0e8732ff785a89ef9fa75e7845896f07592011e4ec6 +06440c23ec2dc3ea35ead48852637df39a1483b61b57f6fb478da0f3fe5ed93c +ae0816dafc4b1f33612ead7a4be46e1023d82cc98d19502ce0c2bfd11ee73978 +63ee124fbed20a3c0af8174ae11da6214b43bf43cf5201fc4319a7e821066015 +dc183506aed9b1d72776c2323127555ee6d426d0af7335abe52ece89931ea283 +c95c8df33811a777e4d931deb54dd2c3cd0bca67b2a5ceaef2e6c6b9c408d6ec +1b5fe0ae36bd3457b8f4c925d3242525a1bfa2a23c87b26c947200e30b6eb482 +a0f03317221ebd024606535a491efc7b0b9705a230c1dbda54870789cc1bbde9 +f5373e958aded30bfaa8cfbacb538a83ff1a70facadee322be47b491d09251e6 +b5b810f22a25435ee76f33d97ac2c57c13327dfea63180fdc2eb5dd742dab21b +0dece0038a34098848ded54fb8f16a764f2e4c3a2322c06fd08d1e02365a860f +3af15bf267ba69a18ff9c3f2c67b520763da0640cb1764c6c27548bb48efb20c +b5ec520fee1a9899c7fa43572fbbc248a27fc1272d4cb77cb92cd0ead76b59a4 +3f4f33766f845dfa78e57a08a3b8fe1d8d5a75543fad9329f518bafec26e13ba +49c9b1abef3c4ae16cbc761d00b244fdbfe4beaebd256674ce765c115251529c +3c398e0eb0ac1c00c335e3b812011b6a71835b69a27f75596e2d0bfd94b83f22 +184ee34faeddf2585cceb549cc03188bd864b64aaccea98faf61a9036fc9db6a +990f75811e5a53ce7a15264b63522764871196454d5e47e1ef69669c576f49ac +e4faa7118d0aa6621140dbd8214787fd42ea188641ed5f6f72306df8294dbf1c +cf893673fea8da9837728d4acfcc732a53f252081dd7c30dfcc420ff6d36d652 +37d445a1cfdeb8db3fb42ac824f6fd0ccaf3d175ddf7293c0ed1dec7a1bc368d +84af44cb213e940cb36c4a87e46303d7a68055432f6ce1f4427b84c4ba41f7fc +f625b2c318599ca865e3cf4a4e72512d709b9a785f5344e91ce2805fbe59446e +15bd8e9617bc66bffd6acefdd1c2d40209f7832c8e69fa85d6316614a18bbe15 +691fda2d45b144cc0a16a834a7d625c783360c4d95f7c7fa521aa1fefad585e1 +795eafb9b9c01c48316b4ea6d22717689ae123ca94f59af282f2f1f7c17bd0fb +3cf4d0fdfe50b9e5b723eb922b2cfa4a293f44932b76d1f1078b3c87c34a022a +a8e91034594d6057baaa17148155bbbbcbf38e05c3023bdf4af26abe0381b7a1 +aaf7b443e49a32b4e05bc8494d783ffa5c18e3404ef46b710ef20654565c14ad +9acb8fb4cb5b624e2f1abdf2a55460a156191d56e59277678eaaac9a4b65d42f +0360e1be33c6281d74fe2a6b78ef98f20715d2c7c3750d46e84ceeaf86d322c9 +bda0025b52a9d5c534c4747accd038cf87935df3a75afc803a047b62791bc059 +94f28712049c1fc80e2ddcbb1cde0fb93dbd28eae475eefd722eed1e2ba3567e +59ee7daad69486f12835ba781020f081b31586cd6ed4004f800c0011eb31a983 +3cfb7725d584229a26c5301fb65e9cc28a06cf8722659c83f5e535c541431665 +0a3c96e6981c4c474a6a08c85548ea47f5f07914877c631307ec950e0045f7ce +fa9b7a89e75ebb52b64f8f83e96dc61f7cb52d42c77c955b31e2c6666d396067 +ffe740974c928708bbd9b09de9cb4e22adad80afedcadd7b7ca3e8835895d7f5 +de080b99b8779a89a9878848194a655e2bbf0901991bd2683be7b8f22182b306 +7965a293c07e2b080c7cdedb6e3298ed5dda06f06d1ef0bd96450af47976ef2e +c0f92ce2566ad14517b31c14aced1f28a48254eaa28cb899137b9f57d459a5c7 +5a3c860a4e86dc130b0f25268085fdec436563e046e2b59c533256a75ae29d08 +0ca761090504c64e662b7e205b673e607db8641dfa9e217030ce535b6d371e57 +6e8015f6f4e1fbb4bb2a4ef0d03668585bbb39e2ad6b29d178eacee21cb85ede +1971f432e306d11b9c8f7dbbbac1100261d5aa242d6cb1187f1fd5c458dcc3a5 +b43e9fff669f4b6b9cc80939fee65abe8b127400166b1356fee8d59ed2c2490b +d734aae733ea4d62ef2a1dbd0a2800ff5766147371204dd9ab44093554e086d0 +ae546cfb9b4119a09d28984c35f9fed2746b806e5e50f74b2a71f95dd0a3afb9 +a0264904e8731ad4e0e9137cf77778adffff3228aceee73f454a05b1befbc812 +098a1f20e1371fccedeb623228a9dd126781cf5ee12f3bb114682ba2935727c3 +283bbbd72da52be8d077818c8dbd91bfccdc1fcb50df071cf48c400024f54588 +5755637c649160b7c6216a1dd9a4992f78df10db751e5852c9fd643e3789db70 +993e6e69eccbce05ebd217716ff283043781b0265afe52db25cb05eed07592b6 +927781ed11e99bf28b95e973b9fa9c3ce3bb03d38177d15b4c2f4441d2bc73a7 +a92a8b2cb04ef0a1592aa8b88656913eaca91b7545fed3be6b7faf8cba76ac2b +645f422b95eac9c22bca4a8b1f8107fceb40835267ef9bbbeec04a57c983f27c +94d39e1cd8dd350bdbc22e5c4d2fe45d7474bec1a9f07b902b0c4884fa374bb8 +acc399e98048b600fdbd3fd4aad75fff4937e0e727b2530d4b06763ed201fd3f +e411365bcc88253268d54e36aa142cf9cff3b0d59afc1c246ca98845a4957cd1 +f0e1e04f36c1480e990925e0617ad233cec55bf09073a3fce52078d3734872bb +a99631f13720305f2f2719ef1cd2f0d50118f542a4b7af83a3af02e213967eba +8404f87afc7bd716d16f5cda915200a5e30ec66fdd9c8a2e2c04925ed8d5fe72 +ce7ffad8e6bc8f696204d23ddf24f2840b296b42dfec0dd580e9ea5628236150 +c400d1c9706e3100c91252623f888227ae2086e7e3d821c4b443b7f46c6f1f14 +ba096d147f2e3c66169399f8739df13f650a2b18a49195fac51f017642931b76 +8dd52868b0cb242353d81d6f66f59e1a16f7515f7fa2777c60da6de761a3f4b5 +246e1ff328b5378d80958afbe18d52f4a16fd84b3939a02c5cef80a6f73ce1a7 +b52ca69c4f521c3dd819e229a4f40b5913228e74585469f51f9a9205583594d2 +015f81c0361532a77a22a3dc22ca69227b9bc69487e7adecd849433dfc692961 +0fbaa9cb2ddcbbd34abae2251ae73a7af671a8d019e508cc4946fdf401256e83 +833eba6bf107d46ba938c7176004b88116ca45a887422610cba588be08d60fe0 +05daaa26537247e6ff6d17dacf48bcbdc362cb8bed81b748d0b8312b51255ef1 +50b5e0f902b3382cc1bc04e4445d32ddb00a5ed1926d9c44d77c84b56fb08e22 +26861511fbf70406484fe8613556a441d69766e37f0de510747637ad8ab1afc2 +a618dfee99807dbf2f4df3e2247c6ae1aaf215050976954a732bcacf116695b1 +46fcff3a1e4cd4842e176218cdb76c139ac8eee7b28d1a02064dbb5293b4aaef +f3ba7925d718db1beeed4493419629b8788d5fc126528e13ab08c5aad19361a0 +ce5694555a6ab31f6f26c05a0c2f4dd81a6fb98f6ba9d62104dabf808417ed54 +50d313914cf12e4470cde2374ed70c6a64548f4fa6cf1a985940e41af949c02c +98563b4a3a86651f9bc5cadd823e92c315f89ba73839ca214063d037e58a502f +c3e0e800175d15e86f958792c9ac838341d4a885bf09bf4dfeb06e2f002aa6ed +3504548f895b83dd2a6b21b564216ff36d1c9d7b5e8d62f50362ed057464d451 +8d5c9e9c3bb9a70f6b1c5ed992cb5fe27bface5fbfd594aa7a60bf40d5df177d +b2ba046ba729c77b8e8776e5c4466ba6e6d9d6a64cc4fce9183e5113122b529d +e9309b4f64533445904b7157ecec3270510736b385506c9abaa5a17d4fe93446 +1269777d937310825957e50c9cebda8208c5e372dd3569221f073e8328d2df20 +34f8df3bdeafbaa98f0181155e862797a9244bc114eb479dacc19d883ad2bc66 +96b164d40dba21570d28812aadba6d7cc9533775188c91ae00705c71c91e3d85 +296840e9667abf4fa3494285b6db25846afda13993f838b558a5e29db7cdef5b +3f86fb689bc38ebb960ec8092fefe819935f64250d9d1fdc4bfc4f3697a3d15e +08a9931ec485e8082b451deeda5e71b796113b5aadbb35d28e632cfd8044aa8b +e4cd57ac0d1c015bbde488474c6eaf288fcb4270931a580645fca2843f285dea +9cc9bc127f64887df0e02be5259151d8dcf377b75cbf746d427a742298011064 +a2e825eb90c466eded6af7386502d6ef53c3a6b61c59c8b9192d3ab6b15a543c +9a11d6c84ce1de29c19064eb2b4ee09ce7e8c405e5402362cb013e7b67f9cc16 +4381b129c6f3c86f112d4c1789afd0711d621c70cc9aa6b5d0e0dbdb7bd6cf44 +dce86be367343dd8e803e0515ba53a2cf081bb36a7757f0cdce53044a8e5b7b4 +82485df313d1c3a19caf6ebe121e43f9d49dca964e289c6155c7445f2b9cbf45 +04027cd24c2fd66e6b593343dc055cb2c46e556163052a39dc701f66e3177244 +a2aed03b40a5b180d9094e0cc1007327d4b8e4a359763d41bd78793822b1a50b +db398f2e1ea41d967780ba5eaf3401e29a1111e899ea05a9f0fb38d2931c9d27 +635be45cae93c92159aafd95f7aa8666fced601b74ae0dd1e4060537ac310ab8 +cb447bf39a31732d2e6a2d761ec035c44969885d6493cdc3223a07cf4db861bd +5be7232e6f74d93e8495a1f428c55793240a57cf67af71cd282d6c8639a6e07e +8b6dee8b869b31b4742958e65173f953eecb4af20426ca6e60a53f3a05db2294 +c372cd1c25742536bb9b6b2e6f82fa6b2e84f8f92e7d0b814e22d1d273c392f3 +c5240b83971154706f232b84606cb22ab2f41ce9fc74a565f348c0b8986e8870 +7054f516ea7b7a2ff42b1860544a60a07487b35a105431d02f2e0df0da4cafc3 +ed96c61df014b8dfca09a4a75610666941d029040216ea9b301c4a41ce4ff797 +fb4cf19d04de51753dc8ee9e37df6ffa215a6a6ee1a6244bd04d538bef7bb067 +4d879011053f76f668a27f844b49fe5495f53f781c7ba2bfe59222009870f400 +a2b0774b341450935176a3d7351f17c486bad7f31e507e6196e277170e782322 +7ca63d3e46c18e234b1efb88ae2fd50d94e66abba320b6b1a5e834eee32dfb7c +c1274de95cac7a3ff75208bbb967645e82aed83020bdacec6c1129610df159e2 +6e44f7f2eab2297f38eb9ad9d8a33e8919ef581b1f3081c2304582386d027204 +52606012d1cc1fbc1fd03378db3e4ffe8e253e5a703f3ab5ffc60661308c646c +2d54a9a7787a362b5f1ba70457d05ae6cd6edc1b08c997528b010afdd00cb445 +d9edbc49837c1121a03b04bb835cc9f2779a6fda00bc761b0bb36efe4ef63fbb +4409c3ea45833f1514cf9c225caa5d8849aeca240ebd45939438c6512c063a42 +e90fc491672167355a1fecd54d01f60942b2558bd9b17870587d0c1d91a5e5fe +a72170413fb7c72b6ec527934009b074230b596a7831b47472298bbf41abe215 +f463870f7266f1cedd8db9c8f1571955df14e9b9dc72894fa28769c5f4c77a73 +c4b3f6155fd8c2a35662eeb7487851888d707dac0a385ee1b0cd4b9ee20c6855 +63f5b2a0581cedc3dd59aa52de48f6dcfea345d0f525f179bb809b729c2ec9a2 +699af09cc1f6288a6aa5f6dada9fdea1b852194bea654e7189598659ea2a6903 +3f796343a41e199d0bc83f8af1df1de17744fe7805796ed1d04f0046ea9a31f5 +1f4cf191a02748c48c67581d7c4e23a624c232d1655ac557c8d28187ca679681 +ce835a302da22413a537858db276b8958b66ac1ef8c235ed3ac8f712a81e2dbf +2a9a58a0dfb339df6087b0fe9f93fc66e5e2739ebaf74aea9e911fb2b0ac2f4f +6b2a160bc061306c7996f04b51396448fd0cb4cbc39f4378b300a636c8ac9fb1 +78f34497584ff42510c3d9a4fad4dfa7b13739453d16690a93257ae18c7860b1 +7248e724f2e1b81c6cce960c2d65b86232ae69d8c0705277a77fa05772fd689b +c083918dacbf4aef31ccb1e1d2036ab33025bd961f49c472f5fcc811672eb0c3 +f11ec7244cacf6d7fe58efa9447016ccd13e0fe129f565ae9b6d0293b5969f16 +f2fa76d51af33bcd69a64225a265a77586edea8c74b83db66754ca0aa31cbb6d +1404294947f8dd68273381a2d5872993df6ee03721f4a794c6b54c6d8eabf395 +c77f2e8508a42425e42b49e2fd0b1b79738e87c8f872ee05989092db1d7c084a +e630d4d369e6f4f6bee64ef209bf131531bb783ab4dd8e2d3ad783172ea2d83f +549ca18bbfcaaca6b16c095b43567fabc59bdb985ece4afad0bcaa753aab178a +a6662f5c2f5f785e7d58f72247484eabd971b746d2cb53648645f1de2ca0e130 +20d92f6212c8c024aa3988d1be3fb1a30f36c6487033492c8db1f097847b9181 +9ac0c6a8d5db1c8d1d3498c37e2c94b95f6f0584ba230ad77b883fde8a337f02 +fe72439a28f2f9f1dd6f15a54dc8fffd570c7c613f8ea17fda3044c545e0aed0 +0b082475072739fff5bd5a8020392d1abce86d825c667d89a5a83417bb63b020 +032b80b57faaef446fb67e6e9709c3a15bc27ab927cff48e4314d4ad89e57440 +47e578939c4ddfe97e32c8d45f3aa6c27fbf86d8655282026d48a1d3a3d98fe0 +3dbc82914a3c6edf6075c711209dbc4ebbbc6e2ce3f10392c2cbed69c7f8a4db +7aaa577beae5c121064614768c5046a12412cc5b8fae302eb4e2508da741f5e2 +44a575e05e7ef5b4f57bf926c8d1ecb6978279a866f88b1bf3e9c3123e8b4ca9 +9665f95364c0493a52d8cfa0aae27c0d46b91a64c9766d21c2a02ec756bb0cde +d52607c9fba2467c4178203577490fdcde4b586d350c050b940ef01793c993eb +05e57a0e2a4fd2fe41789219a2a3f8fdf339065d4dee7d12a882336dae11ec92 +f0485522681dbfaf21a40814c649a2da8072be9f586cf7e6558826735bad292d +52c0fa81c2f75dccd2dbf1928e42c11ea3a3cb2303a4811e5d2329cc1de07bd6 +32aa2e245a430dd8a1dfafe45ae7d53ff3181266d977dee1a7a73c8ee4288eba +b58e1717bc14eb21928859ac69b01c6febfd7095868d6fa778bf341d5de2e51f +9db4c83aacacbe1ff33eba441d3016d2ad1053681e9a8c0685a1589b8224add4 +b73cde44c83497aaa539cdf7d20c477e47fd00a128a8b6644446f032807b77c1 +38acfb39be954cc098bb074b50678f0d80c479379a0cb2bea1914b656cbce21f +99f8155ebae6428f756abbaf52cb974387a8b956ff83fdcfe06220a11b2bb316 +71fcc38edf1b8bf97aa9cc4723fe301ef4ff4993379d9d256d073a7b50ed3e5f +9eec89e1fdcacdf56791b8f13d87d36a4078b9976c9facd88c1d2b4adb24b777 +089970a45d33289ca9379891688a10e67324f6d16ed35ee21fe98ad23d6f332d +03fb2c886c3e414d37ab0833d6cd8806c8cb7ce5d9d59b748072378fa7873861 +33e13bb0ca7693f04522dfdcd08d9933a46d62469b463a4884bbaea81d7729fd +a51cf6d21941ca455b440669ace3b7e0306b95fb65411d52a51b30e0ba19e20b +7187af2375710e49ccb834b539070fa55214bffc590c380cd9669f9650fc16b2 +5f4309c6e8a7b5613b60acf7890ba1abb38b025a28c0e110a1e2de44dca8cd98 +02022eab4f0e6e63dbb2f46ab613f821d9b36a09fbd6562f37041b6e4738eea9 +1e4de7b31ce2ec6e4db8dbb5b88eafb54d1c3edbbd65981a155ad9e134314cf1 +77d4c8a1a27d9e24b81b6933aa1995039ce8af3ceda2f0302e18a2d9e2f63d94 +87e30b28eccd41fc9cc9f160d11e3958438ad681eb190d634ebd7203e21da3d7 +3cab582c7bfad6c67366a8f15bfbe35a2eb99c22b960b93e97fbcf96c718b3d8 +954219bb5cefc89a742352ea2bdf8dda3a73c0dc2c2d013c24bed9374bede2e3 +5e1c117ead2c710d1ebfc7be60d0c6f09c0d024d2914afac006272aa7939021c +6fa253b485982118ebfe9b800e42246648c06b88d9028930233464c092c55ead +701f2bd51c11eec3fba4f8f8b8cef8c4723b23c2b777aaf6ca3ae550fa707ded +71b5342005acf4c23051cf29773050cec666cbb1b1e625eb6d38ccff19b2a7b1 +e2a1e6a7c02d81c9a76fcbf39d36b87fc26e201d9e87c5bfbeaea95cff32100e +10f4c7b979a7db3a6fbe0c1f849147180cf180622e8f8f279f66097c7c84dfdb +f655035810d0d26409a28eea205256f288a3b4754d1bddf0e304a4f50f4796e5 +3eccc534caf271fd2c444f97db43f1bec78538997b087b37a988e40f4d47061e +270774041ac68537e516fca47e2b203024d3a854ab693598e11a9069699dfdd9 +a6d94bb3d6ab5cc1d8525dbc17abce3ae8bccb51738bb788d8bf60451060dde9 +79a4c42ba8371f19fc922da11c5f5c188d39ee08ca127ee70b0068af3025d1dc +b84f54bfa2f778da664d3e938d1f859a9e0c8e05853678765b78d270242f1d73 +01c50383fa55c16da36f4a310e3f05984d1b715c7d5125cb78d3449b4e9655cc +6328b28e3fe9251992109a904569a7def5b9268872dae84c8a6ded4e1ef203a3 +767d6f5127b1d3b603207d459e4e3397be708c930293498314b9f7f05e58db4a +6b872b46fdb28fac2ad0713822f819b8690be6d04954d21f278bdf053f1b2ead +f1e1f5f8666060a3853fa4e2bfbd0f23e150811aae0ea65f94b6bf527eb0087e +c675dfd641e2a1b49806575b4ef8913ea6a0213ea86ae71462cb64b8253c9d1d +bc94f79b0445f29c91aac859a469f4bba2375e0657eef5a61d69554dbe556fc7 +40c15e9a1c103176db0c7dcb4a5f0d118bf33ff84576b4fbb7731699e43a216f +684c28a8972933039399b488effe5eaf9cca36568b354a8aabaefbf606db31f6 +d8dc021691964be615f93a7d7d6a0fd089a54c26e62c3321962009e244c0f35d +f439d2563e6951dee7442fa9f78d61cfa939961c4d0b1e3e63be907ebb77d2f4 +23e3fd5f462ed0be57cef7f048e9a330fc6c8a968d10c824a66022e04eea787e +4c751b7097122c21e84fd9b0d843d06aecc45b29661927ce7ad0f9e3bbdcc5ec +35833a12922f68aa57de42898adf39e8bee4b1964670daa2cb793087349119f1 +13ade0603a6e17666f781a2705a8f4e039489838b58d1c9554ab32d3c2b61d84 +b4d2180c744385ac4770ee5467193031bcae323340d514e995b3fe1fbcd11a31 +c278068b0d55c086ccf80c7cbb2df8ee249c4f23b67b4797c01a8496349704dc +0e5ee0d3b22032e78cf02ed2d8861cffa144a7e1201be3830f68454b122ee862 +5fda6cd0e201d284276f436ecdb92a931c74c8f8e6fcaecf361e586615011009 +37e1e347efebf99d135499033e727585567a9152b252754ad5e79b3eefa7a7d6 +08d828e5eda172dc4d3492402dcf99ba828eb0d255d2feeb5dc9957c41812cbd +f5df26ebba38769067a8633ff73d14c13a5cc1e3ea6dbd0d854e32143d9b83a8 +ff875b4dd22596922f4e26265a27fb77fa33145248dbdecbd47b52d1feaaa7d4 +65abda7dad83f87ec10954366e28391b4a25b9c86a5f0307cca6f1ed679ef98e +50ca6fc3f2fe1e09e3e21e60bf5f3abcd7d36edea2e330db4c52343c8f48939b +f53977f4633d63baa398c32bac6b4b8b8e5141eb919d4a53f9feb7c5630dde57 +bd001a01b6dc612ed83f65496a25678a88df9e17d8b63d8bf6a0d9ead7df0e34 +5206ac01b2ba0922693ccd6829d5aa7fe11749f1e449324bc3ec13d5ac95e224 +2aa7681783d40e8c5d8546332729fda349606119f691df76483287a8a5b43703 +6a5ac35b444a0d0c750c41ec265d9f68de881f76baf5a77d99229031793887fa +88eedd2c53f4404f7f443386445596b458f0c14d5f90f7b260dc3f42461d9aa5 +edab969f59cb39f84398becfcec2a0c0cd6b5eb6efc53bfa2f0799515b02364c +190500b66f90e0f12872396e7e8fe3a38349c4fa777d81d4717f71422c669941 +fe9ebe0da8e05eb48b6f80de699a0d576fe99bb27f05c64f874f69d42e8266fd +b610b59cdd30f0234fa581c97addfd595c1b3a695ba3d5fbff5366872cfb8bb7 +a6203d3efb85e859fc99bf630cca93825139cc03dff89041ac0dc4c0f1a9e81a +ef4c165845459de15b3f1329baf7e2eb688fcdb293bdfb35405dbcc4e529f7b9 +452fc9afb79ba087ab4875b0864a25d0984e35b75a7ee61203888b8a2a0546a3 +6cb53988b8bbd894bf9384504a0cd069d1bc07ab425819cc83659ae07e7b3d90 +31444120f6607bf32629c2d8c4500add6cffe72b3fd246ffbc866db621110c5a +474573e44b80c2d1d54708c9630653177106e6c97c9b95f141bf2c2ab050b642 +3f48c06d57cf3df059449b10c8cf7ff64a4b0b8f322a732f737421aa3b37a99a +362aa99e137a9d2fa108f635162a445300eca9baf1ff3f1f37743f554b9bb256 +fc15f9895918f35ff82f951ceeb69ff022c0e5ed8356af50e0d48a3945c222b5 +d4d56f6f3a49c65d837a6c37f90c0389d17ad0d8e003ba42302c0e247ccabfcb +9174f82592c9b0567fb82ca0a732185501217f192ceb97031d03a1458b092958 +1abf7a55a08912a76909feee87f04c53483efe1361cf418bd9bfa0cdbecb0907 +37699cefbd0c8fd2587b51699fc76238837d6ca4c7066d14d58713617d3b7511 +dc2d3936e779a1f90af487db7ff0bf0fbb31f5edf8afb9f4330ff7bad8df0c95 +b4d31fed7131b64494888467fb5c0c8d7c981ab1d7e62a51d6e9a7e8786d4a51 +e26e82c4a02cd8bb3e52c0c6c508321ae45084f249a9ab94134dd91ca3ee28fb +73b72fd060185710272408eb43c1a4640e9df6f42a90736be19b59542bef7201 +09c6070acbaf1dbe089a06f048d0e39a07041905de495530694d30cfe98cd3fc +1b21bde7e43e6d3591c31eefd584d2133ef6d803df16f79135fda1a05640b971 +bb75554015b8b5ca0caf82e333ef0fccd6de19148de8977279202133563ffd4b +78eb9b7b6dfb854538505d5ff1018045343a7e9606f62aa832b1bbd026a45285 +e7f14f4fa3bf2d3ac8895c2441e4ae26aa6375dbaddb173e0e884a74cfe444e5 +7888dd6c21d913f453539a54f53d6b24253cba1abf6d35a9e44a65f9d3863a43 +f3891449deb169c79903cdbf21b12717cdcb2c8fed396602d89fc132120178cb +8733343aee34373d4a9b1cdef4fccf4188aba3e19c06fdc91230baee77442cb7 +83947fc4dc6a04ebaebb7b3eb9049a32dfebeeb7cb5d2bcf71b12282387d6894 +ae150da6b5c5e1819cfe00c37151c27ff907f83b67cd5c1d9e3b44f9858570d2 +d428765839ccd5901c86932abb38828d7cc08b207a108948924074e89db67161 +6c3985ab6d33152dea6295d0f54d0be6d6975cf238a0aebae14f3913b69cbfcb +e7f12f0d414812b3767b9f6f541f044b7912580128b7898fcfa0680f080327ae +0140bfa438e6fc26667df451b65e49a1895aca3ed5a61702feb7e4121f3b3586 +79ad3a0dd79191698be1684ead169c42c99ab7cf73a4ae0a4f8cdc4c0bde8a9e +ef5c71a01c506602a5fbb7d8ca854b92ae94db9b7cf6d140ed7615cd0d8d829c +90cb0543fc65c52f20dbcf08d7b3ed7c413a08516ec01b80ee7cda88d586e70b +243af9ea1d47c1a9b95bcc4a11d4f7c045a678d8adefc53a4b9c909db8462ab4 +fb2654e37cd3acf2fe808d8e3700a8aa9b189b452f8911e1f97e9e584e46ec77 +1c615ec9bba682c34cf9dc0960efa61b147f6e58b546473fce4315c318b168dc +7bb76f081ff2a1b04ee1d81318f6cf9fe9be485c5a58931efbb98d8d450d9419 +e8ac3e11e890c0875ba7b2e837cdfe37652e68965cf7c91e7a037eaee7b0055a +fe815e0944d1dec596b2378346b3b444c1a02b77035e767b88b151f4562b0e06 +6e2200b58ebbd27e551b658390bd4a8c41925df06e1e420009682c539eecc49c +248774348390c05a3cb0e3e9fdc5c028334b3d29a40222300ae7ebb88827f78b +423b9f07c0d6de8936af40f58807f847368aa873110f89760ba702ad71390b31 +e27551835381441528f88b0765a35249c681b6e17c1017995751e8e266912c0e +b4d963cb50b09e2d4a2cadbdbca043172d1c159b5684bc4319c58580f3b06fdc +303f6008008b689c0d84ae8d6acfc3946458c56c470ff702c121f8d38aa5f72d +938ac3b42511db839a62941e2da68fd51891b53095e8abfb4ad6356a5306fc0e +06d1932dd74993a0898d541a5043ad85bc54a947fd3e288228af441101dee8f3 +55e8e698071c2dfdc95d12aeb13e5eb73def27fca37ca835a02c913442dd8b69 +b6cd0d03ee4534e166ee4760748af89efb60d56aeb12d4a88110ff09813b9649 +512d82ecf8e0afa31ede546ec2190e9c88942b98a3794900dbc55b6cdbbbee61 +3a8bc3b486f86682b763a0e11d515162a6031c91f5f3877e9b7ce5a46817d11d +f7bf50e744ce9c6830c8cc833046a777cfcebeeb52d745124ffa5b4bcbc92c5d +795f2da7ed599217e65bf0766a61536fe52a5f3e667713de45670df25b34c0df +1df60d0092b6705a45ab890f9d0a576c79d135e4157bb791a9d1b6b8b5b491c3 +43acf20a52b7d3fd75a6db26e239165b62193e2c20f4f6e01e89f735b8598b02 +752bac7fac86635cedbeaa40189eb491e94fe2b8767630fe5f8f65f48a87a392 +8f3ed0a12f3853188ff8a51f4eb724d85b862f79aeb8f2ff2ccfbc2475db5245 +34d3789286238def744265311372fb41a60c0ba728b41465f70d25346b53c3e4 +00d0b7cc5c1e67152936865452ca36d50bce652b627dd982cef2127b265ed2f1 +fda77d87c5cb3f1e3b59f33e89c70c526c69ee7a4bc0f131076e89dba3257011 +2fce16d4a42e9704cda78ea98cbef78e38f0bca388aeb5ca07888c2e2bcb3f0a +a5d1f6734c432c2c27d3469f507cdb0a044036b685db25a2e251706b012e7e3e +00a9da92c11a9477f074521c56e0c9fed613a8657387e372597fa3d6cda86d6b +350bcc7352d12af71e85356acd3f8b8160230feff8a7822b929b72cc303427f9 +be583f4825793fc0c1f6ad3410bfee2e9627ee9e062b0a4f1f2752ce83b5186c +b80e447cd693bfc1cff3f0c99d1bf9735143e975143d623a8c7ad1109426f919 +3974f3e2377f65ec40c597e9964f2cf71d92dbee15ecd5ce93d456ff58fb9dc0 +19cc347977355ee79f1c0f7a457da81c3a7e82994755781313ef79f3e77f7e58 +f51efd73720681839e7d8a17b40e557c9b4fb59bda74231ce34783c9251f1e78 +fe9a8f83fb553b437108efbfa33393af90524d39daf63171a62fd3da8f740bcd +6badfece27dacdbfe9e117c491db8a98a5f9494e418fbcff8a3565015b277556 +d94c3f5a59ac4ddb1726d21d725c1fdf5de66e023e8d456f609cc72328bf7b9a +3a1f9e0cd829311043fbb36bddbae039c132f0c58ce1b3372dc75a9805a26b32 +7122f505a3a7a459c431f37401d342a6b7be141211b2401776d60a85b0734240 +9b6db53b9e674d7d9048f45c1f3d41be932a3e29b1d3b5018576438f3a2561fa +8b9e7d5432a2684f9f47e2afd02dded3256d6a3be54cbd44b6001425694e4f4d +180805bc93ec93dad4d92e90d11e5aaac1e861b045d90a14c489d6ea27f5c7df +ef7103e91d84b6e7b26765944fab67a584b8016b24ba4bbf0bb3891ea406665a +5f1534770508d81dac74ab3f8df7d2b289f6c3dfae2db19bf3399fb3ffc61e6f +576f35b3307eb39a4915dcf7c9b312ddeab98b3c0e04061b1141ffbd54c79071 +753f0982d753df50bcb52b63c0d417bdb5c0940b92f49d002fb2f39de0c567f2 +11eb46a2cc144242a075c0db481dca8940d80c5e0aebb0487d6ed7a55b6ddc86 +bba17c2365e53fe6bcac54ec538dce1ac333a7ac3411de435e1cd3a58e11e022 +7c977236bdd1198abc4f0ad46e12a88f35faf8adcdbbf1f34235fa0f32aa9406 +f4d56bfb77287d2cef53654c257cd44899ad816e2129349ece55822494cbf275 +8d3560f1abe1af09a5ef6ce864c12be32d268648ddbbef889fe48b578af23ab9 +5cce1d9d4d3ba190bbd232010880c272383799cf1d21ded74ab950ebbd6151e0 +08833222b17215014cbe56bd7f8616ad68a5d40b204352d691e2dbd1d833402f +de4b7a6fbf2e1fec4998b73da6a40fef3140e3ff200f6d5293d6ef611eac71f6 +40424776f4358c430a563f92544db2c5271ef57cd3ee7144d097febdca5de954 +632b6ad261ddd98e9cbf67bf5fb47510a8166eac1e4e9654c804daa022d160e6 +192ff3e9a784ae08c9d4e574d0a525537bf22cc86e6c614bf5877e0f60da5e1c +2a332d33dde9dfd6aaf1fe7872c2023c20758e972b1ef9dd7ee0af19f966fa8f +0071f004fe4aadff927e49221174d1a3c357c7d11d13b78882fd40b582adae78 +e309f36ef4e82ae4fcf5a11c3fb3105ce971b8d3a9b15ec879f151c92b5184fb +59648a53e21bd92270adaad171527c7254f4313c02fbd6bc9d3109ffe587c4f2 +848d4b68548154aac4d15c2b8a4fb92b636d68d07846596337c97eef384e3356 +977a8bbc781ac947e53463841e533690a1ea43c464da0ad1bbc51a7fc8303cbf +7b84395ca77352327aa698130a58f14b19b6170bd633e5427c3ab6dd862d0a5c +345abb68c36b4dc75d366baa9f0b966f4a13533164f3553fc113af5ae78016cb +434d6f3c6bb9b3f16d6a277a2c5bb0248df54bc4dcc2df835eafeddfc866a937 +0d84d1d03e80073665eb6a174c90f1c0fa4c176e199a718fa95adc1f0cc24919 +57b98b99ae22abf7076cdcbc25760e3c4b55b0e1e433bdf1a69c911a8c4debcc +2f28843ef88d5a771d58030bc5b6b3ddc2d311473176cef4e3d0b5d5faa4eefc +b52a8e5a9c9b5d248aeda062887eafc148df4503f3a81e3ad6f71f313f618ed0 +423d8c841b23d830449776daf3a7aebfb4af536f2442326cbeffcd93cf942057 +6d052f5691b8aa94ecc91d4c9500edbd9a43725b2ac63a3069d6182bbc5d2b74 +13b6d1a5bca795504ce94b9948be30ded1be7f2549a96076c4acc2c10568c84b +2a7475323f4a529cebb452d29267c67e0c34e89d9314bca8980502ce0c4f6ce1 +3ba0e902b53c9f82b0db212e881862c294f8fe6d02b7888279de6e6de2bcf7d2 +cf4b0346817c7b50b2821a1c997083be6dbc3b68ead0a534654c3e68a8194f71 +6544aecdd81bb6689b599c95ae433236b0ed15dd78434c625539d905e841e456 +569269d493cec49d418ee74a6c214a2131b18ac394fde02b77ab01af287e1b19 +0de6755011d6c5d94ac007995181a62f86a92fd4f0307984c296b97351e97bc4 +b2cba9ab7ca66fb7871dfc6b5f8e63a9044c8879af860736bace8b7abfa2306a +800ffaa56b19fbe72ccae0ec8cb322bc11ce2a6935097afe2c02be030be4e63d +2a61d49b31952f32017e7cb1eafa48ce8bebb06c18bab1dfb7e19dd4a59fa19e +7662a59057e076a02fdef18d59664d334f441b3efe9699acaf6b0bc60a2d717d +7640806f201e98ba0049143b461d687274ac5d3f867906e119fe66b39ba5b405 +29bbd709efa37165d995cf9ea32b4c9f2af3e3026e940fb553a6ae74cc0a345e +39591a5a06f0796cac7e7daa094c7ea9915df896f8fe03d6671ec7df8690ef7e +0b03848f4dec819adf6a2bd1eb4d53db9bb7bf38a4510b9641a0cb259bc50533 +20ebe33550a28cd05789e9e3c790503eec463211dfdf37bfc39d9c0c8e0f5074 +5ac4fd8a41d11d0db2cd9c21c5e2990b3e98608534403717de7c1bdc577074f1 +57c897071f9f592ae0070de162b6547e9363e266a28571f83d0336b139d1d075 +160d0cc94080c1d9ded143b80065f2be3b62459a3ba1f8821011a1c964d6eee7 +6af4abf6a4a5cffa9c7c93c20dc863945c174565a9df366feba4bafad988a7d1 +3edd7cb7d147523ecdd33f00e637dfca27ce46a185a94c23babafbdc74fff4b4 +c447b7f4ee3f163eb0ebfaeac4248103eff5610db91cefe028b749dc1d16b944 +7af6d13306461a87099e27e07d0e870f288054af44268937b466ea8a410541b6 +5da68b27de5d183ea53309ab0f296ab6b98a1f93e699ced4fd2eb4fc324c6f01 +7002dea06d4651656ab8c1c7e883fe78d1057110702329ff3ae0cda77dc78591 +9eb5323ec2861469eecd8fa3f642e2cb69ddba928d469ad23023b2a1eb03b748 +a474cebae4c9cf01ba991954092f8cf12656256a493f1057b9cd291ac2a30a58 +618dd4615894a628a005e98055837c3850042d7a49d95b10c5aaf1af30814ec5 +94c4131531793417fa1ed7540719f046fc12fb05a15e9e9bbb2bb554ffa915c3 +987820bda0449f6fea3d2f4144faa5184e1a6535e33d651e297da7a53375a3d4 +c2d77bd0760e60dfcf10f5730ca8be5242de57a2f12a5cfc5b1f04d5e1bf7110 +782d5ea50aacd576b98c1bbc04f6b8dcafa1e359a852d46bb97268d30156ce2b +95a2190930cc79472ee2ae2951cf79c2fc0cf69dc7cb39d0b383294b053416d3 +1afef2dd30081ecc502b819a4c6968198a0d0b8ab9b6a208bea64ea4758ab8b9 +ddf5c82653296a19e5bd696128cdd8ab21997a39a7a77831caec80802cccf100 +37bf908870560a4d27859a8232a3790de33a34a325ca18fefb5cc0dde3b00c6c +4c6dcbc24886fa722d85e1c927aaf4bd4d2d636b48ee3172737f5f9d63798e44 +dc9a9730da47d88d6ca7f154be7a99441af0a7d6861b3adcc7bcf05e532ee21f +af2cc1651e2d53424028ef672885a768e6e6c8cea0c35ec97ae24ea2806b5e1f +31023d7f06d539b496133250599aab8e5ae1ef44fdbb395f040d1897cc7bf7e9 +4ae6ca8f7d227dce4bae3abb4943cb8267781889425f69f07d02433a9391117f +d966c39617cd76bd30145f410e3178d4a86cba35298f3d84368b829ffa676591 +fda1b2d22c51dd6da3a46e5ae03c4809cfbef70dd22bf1a0db43cf20f84c616c +22934b859e44f44fed2361a5cb9ffdc949be02c03b20ed7a95d06dd1ca68ed9d +1f1e1a329da967e5a5a434d5db4f24b3541ecfd33f54c568d4bca8119077d9f4 +9adbdcc33f9e2b5c0957536f711d9032041d66be9ece2b66cdcdafd124e9cdc6 +b685ba329e57277c3917116d573740c9d72bb3533ac36056eef6da85e1dff28d +0c48b54dac404aa77b5865809f6ab78192395a3fee718e7179a4483ade3a5ac6 +3ca9f3757bb7fecccf1e3ab5e304e3ec3bf7c5355f09ce30a7de8f06ba1de56a +c30f0b1de16b3effb7ff0019ce68a5e36262c031016091a7ef0227c3df13d98e +95836b0eb184889a7c971f79977928ed5f87ea73a1550bd91f918e0365d12122 +292ab625e089984af3df2ed3f196f51ef8ce372e4fc12ecdf9299fe64447f4a8 +fc2c0b42fec2d98194ec9834a1875b35e73853b0f8bd6a9594b612fe38966e30 +68706287e3ca810766a8b9359e3a5e2c43522122052af1d4ed7994dd2d7ac907 +51b47f2410baa7f2ef8ebc7e7aee14d91b3b268f050eaf242eb8e5ae9e5233e5 +facea4e80fce8bddcb53773336db32ae0381dcdf9855f76a7a2abb51a28a4c8b +f69e3f990fa82b8cea3370fa18c4d2263950ffd47d70e8ccbf3579e32cae51fd +360ba1a040b3a9069f4b4add104ccb59bb3378e38d490cc458185d19d47678e1 +11de58fd16bea371d743800bb96a303d3989c765eeeeeacb27eae218e6647fc5 +841989066158f7e9fb4d03d51a804fff3f8cf286fd142123ab61a0bf14bc4495 +2b71f68535e8e167e43f1502eb533bd56e1eb0aab57b4c9ceec391bab4ff5562 +4b968478d283d9e48d0163359ab6d09c16eb9ddfa8f492e7466e984ca6202673 +db20a53b953341aebb8f3d09002e6dca38f2a82e294146f09d4ab59a81a9d30e +9cf92b47f0518f9e2f59b29070328aa023ba141fec9f2583b42b27792a13d462 +a25bf5656ebf916afc4bcb53b11ab5b67b1dd4005d9e7f357e14f4f6d891346f +9b7513d45560075d08dd1c841b1416d05be1917b7532a57bd8a105132e92f08f +369e45be158934eb57a20aa4d756fc8ebdc22e128f763fcf673b8ba25a677e4f +9bfb6185750c9610cef46b59ccbb9d5c3959829aa4c49d31d56a41a827567113 +38873c336afdf3d468dcc00115160c12e7b7f5b217ba9914f3b0b4ff385201e9 +4f0ff2b4cebdbec1169ca8ccff1257522e533cdde29db7f349005e6d773973fd +0a5961efc576f7a4a997e5fb1841f1c9043b9f959af66730cac894560689b0fc +617e531b2dd34c811164922ff948a49631aa59e88c335c244736d27953ff5b32 +a061b077f8ebd0455acfcfffa8ac38ca4ba25bb5d37b321c270a461a1f85e3d8 +fa2941550e1e49ed261a705553e93018cbd256c2fbbd04327cd3be2175625248 +adae6bcbd29759fc165661f07200b062dece2cc72a3dc61fdedeee38dd888dcd +e22883cd558d7dc7358f3579115d18ea7c39c65b5c29a9bbe78c33c0d2aaf7a9 +9ea4dcd5e2c3c6855b086da7933238d7387f5456246cc14d985337be3bd8e432 +00887b3cc3e51de639c57596b510beb8f8b320958bc6800ed3530ed552459281 +decb004778b7e9a4fb1268a4c33ad53fe1d2837aa80a629f81ceac0c728fc490 +758038892ee1a66d498608a72c4fef57147693af4293b54f1a9a08c12023c1c0 +a1675897d3ffb278ce9e7943e64c21b3752d942cdfac497a8df523129ef87f14 +d4047e78f56c2515b7348c262b04bd6e907e7ef798d4f2ef5c385778add78f63 +046bebdb84bf98ae8101f543a6b0b8e2c15ebf8d73319613c29c6a2815f7d6f4 +46255b5469d9b4e6152181f7a6e309f450512b557c90184de19932d9431910b6 +ea0f3b075b3ecf6a00ba41a1ab7e97a494b1ec2913aecb75dde8d4c238f2487d +a4e88dbc04f91761158ea2f85b5906d5758ccfee896986da23c2ead18b3bbe43 +3f4ff4cd85fc5ed3ba69f14b417ad61854a578798237dc8e78b7345b29f4098c +7418049534e011ea0d583c2f13f9c1cd184cfcde0c0fdf8a837db6a6edd55fe6 +c212936187ed9fd04dbfa76128d509b9ab65b178f462425def4fc4f4fdfb802b +35a2426228156a693f9ffbba6597b7d7af6af6cb8a566d5d00a1386eecef2d94 +46425a8856ca2a3b51201f9d2bc291b10a6db3ccc36ee7c073e0df000922c1e7 +60d297287fb2a13377207a7ac020917a0c447add49bcb5c87d1f21523a06290a +478d9c35287d646a050970b087ef35e46f76b7981fb94430ed48c46c78361c48 +04b6128566f6e951e987a8e01065ea04467d8d4b1a25092a24c65bc863abe4b2 +39e63f91cbc9850ed224fc124910b517d6e60dee9b3de0e1acf1f59717929a6b +6036b0715d90c776622f98d5ab83a8803c22caf2c4f556121c4f219798bc8387 +d968c765a64fb8b56ab70c5bf1e34198bf0e6b4d2a87cb729038f3ba52d53934 +e3e53787d32a0345613e7bc8079cf6931b09a20b6d537468e481b955222b54df +b4eb3aa1f4c8c2eeab16a993a0bf08fb4347813ff0b70409b08ac8e14c34c2f4 +adcbc73b2a733ca097f9601d4d42e02c63ac7b4921ab5323aea8589c2ec19677 +014d3a244e7421b16d94d57181bee10c5854f97788e5cef462498358deb62753 +59814cc90e5ba641db3d16a03d5b51d65b5572c8e780a5c8465d9e8b94c9d97d +300688880f4fd78b5df622a44478529e1a873afafc64ebcd35732ad0588961be +e2b445a68d27d1390593c02f654485a83056787de90a1a048c897b3f06fb5c4e +38c1834f9aa06e388205c4f5a256717336bf24ce2fd12f8bb7a31cc4a78579f1 +bc74842111d1c6c766ae0ae8150be12b6942c3e9a124e20dda69ca9fb0366223 +1bc3f55372fe088093f82f1082c16893c51ea7f52b98b54487ebdc1d90dc9155 +deff88645ffa15e37ad89755ae8a63b78f2fc7125c33e083ae4a2de1c20099b6 +79da1025c4daa2b03cdf9913456d5db1bb832f9cdd00a7c4eff521b28cf0adf0 +a2d9de47918c79f11aa0687906d8bdc020e508ad47f71571b975134b71d32740 +2d3a3a402dcd4671a5bb83e34c0215015f5072a5227b04ab4f2439fffecc209c +cd23e9eda43c47c5810f961d56a2f882893a42d4415bccb1fb4a340ae56c9ccc +6f4fd8098915777b0ded965434460d26a0e8279c1fa78a03abe6282d1f4abe52 +26811fe2e23a3959e6e6e8fe513a91861f0cc42d619cde83e33939be87100c3b +d82b9d6eddba7b7d55a0f6c710202248946c23d6feaad2e289764cea37359169 +03854d823b0f37e0816338472055e33226d6c2065483a88b50e38e80643204fe +26ec5827220ff56ef92b3ff987d4358c0a51d114482e76067f5d84146a0c6ca3 +b5021fd980660e455abf01c8fa64de564982439254928fb6944a148dc8aa7f92 +fc5e1182fb6ff735d65f2a30dc77394003b0858884da6d5e56655e313d7667ed +25c7efd87501bf88ac98d9b8666e2bd2c9ef3ce690f0c01e199273afe4ef15de +7b49dfa621b972054d51621b63bbf699d2838b414711863afa05942f715e8210 +9e5bb3207d12e8ba4d53d796f861ffbceb5dd8e3ee6004bef4a4f03c11c2c473 +bfc91a553c2b3e21c71d08c52beac2adef95df2cc8aef3df47b21ad4e8c6fc07 +65e38f37066789b0ac29a8bbab21c45f9421bf95eeb7e2917a4c752057c73580 +d831115cf7eef8c4ca98ffcadc91db4bb8804f186eda4f2ed825a9e0d5dbe716 +ca05eac47b9279eac1facca8b25da3a06ea3593679966415a66ac8d692504cd6 +974ad7629a731757c33e8ccb47c404155e3c7285e12546ca4a22b38764a5a478 +4a1524d6aa22dbce8f195b25ef9b21c92247b6b87fe9dca35c2b3aca38b5a825 +65478231af21a18acc2cdcaf1b728e3836c9ca74b7a5dc20462b706fe377c034 +314e429383ca11169a1a08ebe20e7ee116937b154a8e48e74a4b69ad044a1860 +179b1bbda2fcf6897654ef4deac5b169e99d9c575341acb931e88b097a9d5f06 +ceafe522a10388a2f0c88af4275fa3e48a180d670855c8ffc044b89dcf57d718 +b6612b0bb9911c787604fd6afc483ebe53b66cf451dd66a162b2b09ada5032eb +014cb03d0668cbf76f00f2c424789990a302ee94d934bb8618e16a700341e658 +15734d8ffeadb040247fd505c44f07895b1501d815c335e0b48d00c167f8a44f +921740bed8816cacc348dc32d9eb5397593146eabe1594cad58e4e21a4524216 +f668e7f0d96dec00d0de71dc67bb3d87c79e4dba89f606339adc7981b6aadfae +9ac66ded594fa8e64de560168572739c38199812417406cea30408d6ebabbe94 +d49e0d63612c244c994bc32ad0231a0121fec84136c15dac0f66f489f1fabb04 +c027cfe54e9608a35ad33426715c28f19a0608dc07a01fa5eb4c974a366d8631 +c24e69971f18eb3871129d729a3b702d768defe086145c6180e63f3de59f1453 +f7e459117b24aa3eb4ad31a5b7034919264852f8e4e6346837971baad72744c9 +dbc5878b96494eb5c5e2f431eb4b14e28fd09e775ab36fe6dcf469858e3702a8 +936603dfaa3f03ade3eab15f8480eb3fc62b09b565ddcf66843b149a6f55a507 +a7d48900cac43aca897a5b8aa4a37d8269451f9e07405982eb6ac6e1dfdab248 +3abb3134ec2659f2c3884cb66d3bc1b5609816039de432216995f349e864b851 +cd31a9d4009fbca1fa09febda2bb1a838cecdfe92bd4712226d5a778d958ede0 +927c7c64473dd5faf58938dce42e3e3f47b4d26d35756948c07e23a869fc5c47 +849a7853a18cb954310431a4dcc0a8c50981a682be1cc10e95e22fe2e987d51e +81bad35ab6de6d23a5a16d3b7d8aaf13001bbb0ee4b002c9a0980e165979a692 +f922bf1ddc3e0c3cfc569ad1f1a537b1ed0c7b55d4465037c556cea58ac8b0c2 +fa2ea7afb70856aede001bc43a481f8d4781b9daedd9203b22ca7108c30ff864 +3d8e40383df2e1bafeacb2ec8bfbd1d64bba49bbad82ebd02f23d2d4c929d2ee +0811b74cbf3e7d769ea5dcfe26f572c5bbc9d581ea6dc129b0954d6fe6e76dfa +9b789b2aaddfd38b276a68aa08778fc9cf1ce8cb03d7d30851ec259f3efd7fd9 +a9f1179c203671555688f7fd8195992bc1339fa19e51416ac291b56876b5cfb9 +944bca51b1dfa40e6fc0c00e18af80e19c44c7409c59d986bcf2bab279a0b19e +665af404821016b23c543d6ad07bd46182f6cf1a2bda5f542918392d7a21fdbe +f0f09fe9121ab8f398f40b1e171591870e087cff6a5943895db82bac7d5272c8 +cd3421638696d8ef7059dc4bd8f7fa5039f4937683c002ed7025eecd5d08e9ad +1fb6b52ab6eccf62b08e8381708635fd71a06de461d018ea78d70a5305b7bd97 +ad6235bfae842da44f610a7d48c69c87a4b8780d842ce929b257e2f07a2f6f81 +c2ca365352be0440a30adfc4eee96d5679325d88935ce4aae395e8cc940a5431 +d067f27497a2597814e4be4b63af2412a6ea17130909e3374338daebd5f4e88a +f1cd05037fe1aec6e268882045f4d457f711be54aeb0906fa5113a95c6163a84 +557f3a70e33c85b9ac7b734dddcb6736da1a44145a94afd4eb6b52ae5eb4332a +adaaff260ec0d0e8d7877a8eafd3dff860b455fcd7fd38d95bb9e8e5ad6289e7 +31310eff8037900360407ee85b80e56b7baba69c6d526821e9e008e01bf2b040 +9512d53a654aad8ebcbd35a793bf6d3f389b2c56730c2b9bfa8e6ac204a99672 +d40f41f4460175c0767c662845afac71671138487a3952e5ddecf541f6483bdc +e4b848f0a6aa7a513a05522505fdf760c4407bd8a0cb9575a865091d44cb4173 +0a85e108234ec0814159be0cbece2a0b7d559de0124f3d79f18c70f926d5c3b2 +3217ce6a654b99f3c31d738d1ffe697447f71f8a60005b63441c7823a3d213f0 +bdcda3993285c336d12c9c0897cda6bad3dc144c99a204be63e417fda34475eb +8d745e95f113e21a758b2b7e8f2e66e96dfb3a2688d7442b731b5d862e955b3f +937fd9fe08dc5fb692440f52d5ecd7e229208489fc9fbfab020a9ec6676b532f +7b6803bb553478223acf60f10d7d19482d61af39c85c59c2927a15fd7b3b4ff6 +0d99bbcb5ec107c4f6dd5710a16cc14735fffca7bcabbcf3bc4e9b0e028ce311 +a0de1e7d543ec929e7c004c99586d10cbc1c9e8524e3310c7295e9f0f1d99864 +b9981af8933311574a94ebc0f6b470e12f25334eeb5f1e5c6b1797daf32634bb +383d49e164e79cbb3c5c2ffb6a05712ff748d90310be0fd383efde217d020ca0 +0da13fd2cffd83318553780888b7a3f1301195a03d53244b3501807d1f070775 +eba9f7f7e70264fe394b1def76a0fc16df8f920fb0f8937eb6b451e34e1aeaab +3a736633cf12bd1d328e501542decbf7f00539061eb994286dd8ac01c11c2892 +e95c6027db93a0e0329ae2d6ef2d78fb110a6f0e496e286704cc5b08909e243a +fcd8669c37c59203482ceeb50bb7e415708906a432ac399d09b4a4c61ec61fdd +dd57328865deb333c9a2f515d79771fb4a5902f0d99f0e496e7284151c2bf0c7 +97d4bc9293d1a281069d7ce393d6f473a985d98221eb83fdd10650aa34e19418 +5242ff9d3d2d755410fd68598c4774c93d680125baaf42182e7a0f74a6eb33eb +f4e0441575c9a64c59aa7926b3c5c747a0464b368420fa357f49cb5cacbacaa1 +a77ce4a39e3d807ddb3c6b519c8dceab86771c77f411ba1fe3637fe867ec3df7 +a62e0169ed2825d5a8bbd8e3dc758cbc22f4a6a860c5f10db28196c1fd88df92 +9ee19c8c1a81655b9cbb181bc60882079e1ac27fbabb85b7c810695df4c789a7 +3a3b9fbe8c61ee3f68defad244fc51b245789cd6c22f37f8b1543ad46a97cf22 +1947411a3d1156efffacd9a433059b7bb999540a529107fb5e3a70a8530ae513 +a354af1ebbcac940f2ce905d7112a7ee7bb5a9dd6b1b0889820d59137754c148 +997ee70f457320d4f7f9f4bb14203702493cd6b3566d5492d0f4f37bd2acbcac +bcf01d247ff2cf65893511f35a63dfaaa539b38f2a1077ac5f1f438d897730f5 +32465cba6bdf504fd5bd4529b2b58f0324bde154624bc7068c673e960ca372b2 +f5925e174ed0ac9db12826281674cf6c6f644f0a0a8717aae437a5c1dc097526 +5576414cf8dae4e54e96791ea5cd2c7f64aaade7c365ec1f521cdfd7a0d7ad0e +aa058dc5ac9c1acccd1577a4711b13ebcb489b6d01c96bf56079bc2c57eca056 +1cfc5376b9e51f793584b528335a024c390421bebed9b4ccae0f39fa1091dca6 +00aabf08da3951b91971efc5c506d6a7f48ddf5c88411bab37d1b19e268d3290 +465de0fc3b1348e5e7e8ff176c94669b40db3bb7117aafff4adac7e433cf7544 +c46b23c1fd84446e16e0a3df24df00d24f3e4f90649f32c23c619130d8776dd0 +77d896b5bc0095228f50c9ed19cbc6b98785c2bf8570c6a979b7c3895e94d5f4 +200de9c75b190e73b75301447a8d24d769d0554f41d7b7972f52f63f0c5ebb86 +0723728d0ffae6199807a9a9fe58036892cb30d768cfa491d9516cf9a340828c +a43d8745b66311b1751daf1d12090b9b80cf0c8c0d4a543f016baf2c6b25531e +af7394fbe40fa752bd8409267c5a06ee3eda629e0e18d39c4a7119c3a8416d65 +45eece5bc13f6244e44deb2c32a5226054c33c45d2db0522fe667091130793e7 +00e316269dcbb78b8b3f89f8850c56eb6e59f21cca77b70e0333ebd5de1c1304 +cdd6ce7ff2981ea58860cbeae6a91984dd36068cffcc52e375373a96b9a2205e +66a511992c00703c56462d52d6ee335c1fdadf5d1d6a74dfd66ae600aa7ae96b +0774952fbd64185e676f6c2f12df377cef70494520c642de003eec13ca647fb4 +b656178890974e921694131082c8e7d6f279ff5f316e4fa049ed71de21f662ec +be42df382ef2980ab26ced9a89b65af635ab5279134872ce810f40bc086fee72 +8e54297dc92677bc1de0c6f42c3fefbf6dd75ce90ab8600fdfe57b25fab714df +84923c94f37f0d4e8f5bf94efed5ce7d128313bb555272fde91ea4f2492a7915 +33c0ab5517c2dc7c41cfc8fed0af2384fd8a1992e9a071b3221b4241fe7eee1c +0959ed63c6fb21686bc372277e2d42b7ba8cead55f23f25a66a07ad09b0c6b30 +ba5b3f61e6285b5382b4e9738468ff320a3aa23695ca432742ae31773ab0a119 +7778f7079296de4f228298d9f3dc552871adaf338023fc00e9c1a545baecd709 +ca50fc58e48ac92b8bd511d88fedc91d66a29a7c0b24b19d7dfdadcef66e8dfc +732e9d942bf1579de07466481a211d665b3682f97c99bc2be134f2c23d1f6f63 +59137e5a74e3957f3a59d43fe768c01578e3fecc11db45c560b52c6caeea6d75 +c84faee9ff44b7b88d5249bc8b3eba6e50e094424b55cb1e980c42cb9157b93c +1464209f88394424b58e1d8cf9e461e251a21c99c46c18141a03e192769e3559 +02b78d0e01ebb601fde381007bf86bf3b13323d2e15ce6e599905f70bfb5263d +73679a025f5997f2674f10227d8f64ab1774f2dbbf9460c07a708fb89eaa1b27 +537b5e378f7565d0db10baa053629f733f9152f91908d17d17645b688f1c3b0a +b53595f3ced709ef2ca1443f76e41d1bc45d953ead7c041fd24d234a0ab8c31d +8db4442a8363d4f946e7120edbedb07fe7c3320c6dfb6e1b79de373e1734b3cb +2af5e7781de07525d75cc8c2cadcd2652805b12569281264a2512b97909d9ae0 +d6bc0bce3f01437c11613dcaeaed9adb71e881ac339ac050eea57ddd54dc5efa +d97d1e95669298b33bc99ffdee43b225adea8f56e2cff5bfabd8aaf8c312d84e +d27046e7d65248b742e4539472947dd4b6456080efe9cfb26930a1a407bc8c81 +3c877e5a5a34f2acc6786485227e04e6c3710dce1b760747eefc397250996be2 +777e1d9095fb46181152ef7a96f9e55eb0da5c230ec56fc3cd1e4326ff90f313 +fe6a7b7d5f5d6a5a2ddfadc3fa88101850cfc2f9598db6871d91a27ed24560d1 +e8c4d7416c03829a89bdc9be6a3e99260e593497f460b0aff800bdb6eb633755 +25146d67ef0152bf4e29d586ae609681e5b7fae658af0e4f1be063a43a1c2bed +ddf5041cfd0d3079512cacaf3735f83710f9979df7375868b7a32e6b5671df08 +50b8ef3bb12ae40c49ca973b2a323586d5968cc064c9095194b464ab666188a0 +ca2c570f6697af23d252799cec110d85feff6baa9ddf4c28ff0bcc13e199d10f +ac117ac16a193e0c2d79881a1c0ce480b79cb473995021f2fc18efd2291595d7 +d6291c8a7998fcf2bbd0de7a0a3431e69bc82f42ffe9f035ad54a91868c65435 +9ebd229e881110f257f50e953c7d1a46480b71e4d70d62db67205155ae540d1e +261c962056033a0049f89a49a3424ad4793f1f23d0a2fbf992623a7b8d6cfa75 +96c9d6b217647a3a05008cc7b2a1185f4e36fcdc702093f8f702f6e898eb10f1 +1b2984d9cf4a5558f7fb1513d806ff4d6f37cf6860fac0348213c500330f2fbc +014848c9c0d5b0fa2dfef75561abdc64ccef5a40fe35f6b2b82bc30a5da1c450 +2154d57c816f6c78f0e4fad1de59d3e750647d887329e4d75327b2d5f782d9ce +0c8259c6f54c2beb358c5e4dd471eb438e54909ee7fc77bdab342ccd9340ba78 +be46e3dde7e733fc6f71078c789e57ebde929b99f8a7481a7ccd2bc76cbc2f6e +cf2efb4eeddac60718180fcb28d6113928bf76ed95054d5bcd4016bfd6c7bb4f +c007db6912c603325486b63bd3d35ccd32fa61cb7a2583b00da83f6aabb9a83e +91786de5e8d5b812bfc6421bb44b80ab0d7ec880cde140db4136b0913b064bce +4334fa63d627325168b0fc94f8749f0731c560a2c4234305d4413385d606cbe1 +0af77b227a34b4ed14359a35e47dfb334481611bd4a6a7bbbdc2652901bd69fa +ef3920ea867fb89cedf4edfb9be0c44ed2fa2706d9cb9dcbd5b585f29a3f7146 +a4b727edf3fd14b44d8c8bd3033aeeccece7dddee225d252b026dbf90fb1a1d2 +d273f41b63a78f56dc8add41d489b3e4dd0940d0a4903f60cce4239aca6f2cc5 +a64f0c79a9baa4c68df59e5dee20b15250d9a357700106cd85700fa4ea196838 +2dc4ef98eb8ccf0c6d69e0dfc237f5e88ec96b3042bf321f7764ddbe4e9bbda7 +5dfe64c1e04ac7b879b1d75ac41296fe19ee48b1501b5e65672fafde3787ac7d +73fa6183dbcee2d58d5f18e15d015395e0ff03bb257401a5fe9357a3c0e3895b +3b8807db2b3500d478eb0541c4bb8f67c8a69b38b417673f598032b84cdafc88 +5d7f70ab46ee3df2204771756a2d069225aee990c58e6d9f53fc1feb103b5dc6 +4c8f4598ecf734331ea7d1397fc9fa05a7d4d66ce1a33437c13c305c0aa862ce +1004725d4e70fe13d0ab6397b1bc5180c4c4f8025d62d700a8023492259a4bd9 +a17fe242100b462e5f723a387a35fef7f3986ae67de079e2f920148586d68647 +ffe46b6dc7026dd8c6e3a2d6a5714e02fc22e0e1ccd91368f946c1396d1938b2 +cf25e2f93e30264401f1059447ed6fe7318ecbfff748d8c6f32eb54b913883e8 +3423a58e13b3f3937eb63eae4b0fc4290d5332fa9ea1ba4fec1be763ec3ce2f1 +fe23e2673696efc430a9bf37f77bb1c444db2384e7561d190e02d102e433557f +537aaa6537eb2f5825d99c9a3388db69729c7f0f34640bcd2bd7bc352333e95a +f2c2dca791b0ed70e9c84e9fdc4a15c23725b527eb70d8f0e9c67e9fc1cbd412 +4eaf376d3c0818a30542f516976555c696d50499b6f2c3d108650f3c5fead948 +ab7e0e8c0600f08636747b961c133429a91aea3ff945103ce4e316700948ee69 +37f18fc6d899c689c3e7b1687118486e8224b1bddb2e4ebbc07a7dd1b4b84d3f +eaa704f71665c637d8fe8b77f10481baef7ccf72cc62e9909b53ff05bf14e1ea +50f19be21bdaf1b3240c4ab38b77ba595025f5b49cd4401ea4ead7e9ba63e3aa +f335ac299aa799594e4df5ea87c0a079e841e9dda35de5642dd74b24efd5739e +a025c05e4d0235a93122a3d5d2244470729108cdaac7809abd61ad62a60c1ef1 +8e46a365225ee535e6014ea6ea6d7997ef7cf18e254dedbd9f6f42f600907186 +d7f65f0e0488f335184eba2ac7e11e526490f67b1d37676e7ae41c21d3f82185 +c4e87db5a6ff2cf0b414dd319998ce8fdd9a3d3e3fbbd60003fb319521f02f6c +cf7e8d09b1bdae21722cdf213fb01129ef94693fe1701756ec72c2c8efd429a0 +082d316ffb43ec28a98930e826dda8dcf4cafc72e9718fe7ba10e6e3b417cf12 +0bf0f56c5b01c4c67f15fbb97c330df169907a048a7aaa50641cbc525f719a4c +2be05fa0e545fc3ebd0af44610cd7316d396682ae90deb93c6145cb58441b630 +7b3a144d9a7c5f33d98b38fa206e60dbdaefe1261518efbcd0f89e07c9215be0 +b5e353eb8e04e3f6a092b3a2f13db1de2ac4af7e8637757d98d60af4a29cf048 +640924497b7e75e801e3f846b7d49758c87afd1aca6fd9467a7f7d80be9fa247 +73afa050c8778f1e828e936d5fbe191fd114954d2b0a5afec54a37338c1a85b3 +3232ca14c5e5e98d936a1a7949887695f7c940c730e49779b36ae672af6d0ce6 +b267a38648e6d01982134464ec088f935102f5feb9f89a5d552e9dfc12eaa777 +f724c260ca72ae186d5ed6481bdbf20ef7bb61425d79dcd2257ac7079abfe4d9 +7d6a0f5768ca6ee4167b0650deef2dbda2187a1e3650256aa0b9f1ea3feb720a +2c2b11bc3960ae3f3297671b835bb39c5438f921d19ae72e286306e8fbeaf5ae +ecbc563af51f0ed55fa0fd539637856b82772205b5ea58184d6ad351aa8ed2c5 +ac122f53664ded696d1713a12699241f058e066cb75db4dba8011c9412085bee +e4ef0718abc2b671aecf22c007ceacf5555e8b06e38a7bf30ebdecd979485357 +4fe5ac953109ccb9f93fa05a96715a57f7cd5059f374475afef9795c99cac615 +633839ab2a434184495a37ac4692a672294fca3bc8f956530bc560af7e9bb7a7 +ec6603156eb7a110f7e73ce3539fc84f65079eaa8967f50e6abf58d0254ba09c +64a2e3245206e5d255ae80e901e8aaed6c76e06430f73dad824061eb7b46d990 +4bb83998e73489cb7dd91d61490a6d42f3dd10ab9039667ed83e9ba56c1a63de +a241755fb90b9b34ea193391a25a5c321b68d93098dc32f519f79fe897871538 +f593e687296df28c1978319076a287d7a5dc56c648e0c90d89c9656537568f6a +0fa82d8037f7e5634859e40205f19bb4bb91a3585fb8bb5b129ef69cb2d42c02 +308e1931f5be8e7fac06c4effe5615d3b0fa9a808a25842d2ce8f87f8febf631 +ff105d1bc9613737fe64bfc2899c0cab13bf277bad152f6c3c134dbc419e03ef +1eb1d03420250ab323846ea1299c92f3c983db1d92f23d403fe2464c53653382 +17b27651dab87fca30fd9f190eede42ddb0a706c81763aab1a58cf2f095fc4bd +5fbd9802f60031379c346c03962b9ce26fa3ab65c99071423b65d1d1f16bed4a +9010b817afb07818367e11dbb02b0e7923f1b915010d0a327b3e55e530574696 +1a715d2ce96cbaad3fa64e22faf30fcc6240f09d538d352f0a87f2148cb4756b +2a8ab16829b992466b9b3ebbc5ff20db07a8a054adbee541f238dc349d85ce62 +21e14bd5801e865cf6d6f2f6f4a5b9ceeba485a51ec957e1e5de3ecc6de0998f +0b93d8662e6b831553abea3a9c198da8b52f65e635221fd5f24ae75be59f6d11 +50bbb6803ae865ab04606af8231a2b7a76cc7a3a18a15b8999721353bd364080 +daaee3acf2892a2f6a34c0dddd50b25ce964e9dfb8f67085c35ad738274b88fc +d55250d1388a25666a5b51d9cbc509374cf0a9c0002b8ba7550e475b2f37b269 +397280c5e5889835a145f305458c79585a1bd69f4c5c2b27c0b3f01d7add6848 +6292a30675c0643bde20bd7e929dd4564b51d8338a69bea90a9cc52f4ba1f01e +b65b0bd4528ab90c343b56b976ffa8421c6ccfa1c5e2dc737931c63ae59d758d +746b48db22706272774d31675fd0c8dc062892c7eb86a9bb619816b1b87ac6d6 +3a2465545ae490e7aec1c1af244d8234c1380e3ddc19fbd32e558d79c50d7544 +171ab8882c0d03f4494b0d6182457a1bb41e9b4e4055d442f818156636db5e69 +95cab80687f6e1bcee174f26de82c72fedd570c3f8126d862a5bf14035abcb93 +92039803828dc7ac0f8269d96621cd47d948a4e6406dbeb6c138742eced08656 +9583897d06f478f40d11b8513cdfe8c2e3ac1f4e1a713b918e3734dcfc779046 +f7c856a052a604313fd0e49568d8b0c5edf6f3225e3f0fbb8b750bc1362d53ff +d82bf33f66b7ec30aa809e369f0ef526aad294b58776cfa491abe814a032ccc8 +d9ceca639270aa10c7ea7416d95027cc6216a32ef194211a7d28806a5965c1bc +d7db286390a7899c7fac788ba47b27cd8b812ba3dfc6ea5b56f99c420357aee9 +27a14cd89b8537b7d788c8e982cd27071240ea6149eaacd6141b78cb794b552b +b6190c7364530623e72e5de2387cd735bfab4d149432abaaf4fb3dc734c06d6d +bdd2cb14549b137b864161656ac3b27b7499b08c32b3fe636723c842bf094fea +354436d842cc4c82c57a5b6257df79a17949caaffea7ebe49ff9f8d37c8af87c +26311649bb12024a4f41931c3da42f14929fd998ad3db74a087342c658f7ac01 +16de1aedbaa5ced0130780b98d70b9abf41bbbf79af38cdb5dfc639996d0d062 +ac0de71c8599addd90a4b70d45c4f8458b9f884d5b02e23b24b1a61247d69984 +87b705a63252a3b21f8fdc7cacea910ad2cc251ee2dbfc7e1ce30f6b2cf3039e +75ed860809ecd10dd0ed5fb5375d3bf3647017dcac9d3761d47ba4299d3e0ea9 +f76412d6b55c9691811cf4c92e5a98005afbd71c97dd6197f0ebef5954a6441f +190da54f1001527bacaa7599796f3a274eb16ca40c6b11d1e077b13482e61fa5 +5058c040cfaf2452f70644e7160c5b1b52358ada1f54e21ca06bb47a93521b44 +76879f00d4087326099afb8112dd82c5b970b614fbaaf919bff139cec75b76c3 +f66ea211896cc47d1893b1df5f96d91d6659b301b4e7c6ea57f0fe3fd8402fa4 +65147fe093ebb1cf9aa27dd43c4e0f6fea0721c6bc1f0ecf5e74ac72f57129a5 +13eb6129dd96977d8f3257d2a9e081229203bf29cd3b572a46c95af63b8c2665 +7d2905a9ee79c4b5ec6417aab82cfa343f97df92fc4b5b78b70c4f1c6ed991dc +ffddb8c3684d20c31f250bf247a0f921b1f917fb3ceecd25b6611cbabe9f6755 +b19b553ee064215143a87543bf891d7f5c4782bf50f265f28d7bee3dcbc00cb3 +2288cc19c0d5def280c717c431dda0c3efe8fafd2e53dae56e924562d96f43a3 +38a5f106ecb6dd01e4555e80ba9f3c1e2d195ae4b29feae8bc8b5377ef2e69d2 +52d5aac2cee46f9a43bd48e2b48df0d43a1f88c5e47bb244be4fa4651f948ef5 +e5a8ea2fae9a93cef41171b3f356238af25af8497fa2b164d07c788748b15560 +8ca499720f28cfeb231e7a88fcc36b821f5ffe8e6a5f2e2b50b48511f1c59a3a +47bfb1c3ac4fe912ff455570f366ecc535f3a9425bfb542579d7bb9dabf98371 +ffea352817fba38e7c9d9cf359023713d27041029aeedd82f2f1b8eb6e4bf18d +43340cab8e93528e8848ac6b54e8243559fc97d5ec11ae6b4cf022fc31202a53 +26cf9c4999d4f387ab2118a2b337070d1eb6af2c011204324150ab33269811ea +5b65b758142d5ceb125004ff23fdd17fc1ec2cc3629f28e6b72aa165f6f7435f +3cd7fab74ddc567b784886141bb3c9aeba83c96d5835075b1b39873545cb2cc8 +06e684fa5611d59a8df50ffe5a4ede600c2b576bc0fbde6b619db87ae02d0390 +a9072c7ae507683d4c40d049d3302d9c3510846631725530bae106ffc1290510 +144d5eb15f43a0336bded80bb51ab28b7ac97b3b7e76bdfe38de0b38965cf771 +d8a2086b6884d9313d57320418a3177dbd24eb996db53d9cecaa050f31f34ec1 +b752729cc33da2d8cc7c3cf70dc490fab7a74a5b46629f026b9820ef8bfee084 +b4ad675372851b306e04934ec8790b53ed4a855ef2af915f712d6ba9b5cb2af7 +5c8353dda11963b1443361cde18a0874412c1c8ec30572fd41b4961e18d30eff +f718e94114cad7e91c40e61ad30f037c8c719b6d9a503ad605cd15cb1878948d +61828c099d721353f70129cb99a9626d14093f918a46c769573ec15cf8672476 +4f7f178bac50475006d5de731d14f7a1cdb1d241fbfda2431c770cb8292bb5dd +15eeed61de18c0c2917494a7e40ffd4ba5a5e77987f142032c7fcb9392b65f25 +6a5771af87d3583ffc11e8506bb558ca404557e2b45e7ae592c57f73beb27277 +69b7704ac1f189da32ddb868a0168908a1481d91c12760f2e88fce74097b59cc +a5a0e419a9a3ac86b944360c10b84babccc6909821fb0f5a1d9c11d939fb01a5 +8399e93cba95bd768c41dd0741767454618752cbf94d339d532742030d5b3404 +3108dc96a28c131835dffc949fc6200d30da05681c6bfc62d1181e6b0778bfb1 +2f87b8071b3a7b5e9da01d20bf9595f2b2ada705bb6051792515c5e134e39b53 +0f0e2a0362eac27ff883d3545baf97e0d854fe492854ccd957fb4783483b252a +21bc3902059fab00ffbc73a73d945bb99f2ac0ff6b72cdd26eecc7ab370ee2fc +ac69fc93effec6bcb61a68b695d8be6a6854f5500a7ccc975af180aa863c473d +99adb894ba1cf7125f1cbdd3eac8749e1c9d3f514e103bd8689814c82027d9ae +ef2692fae17c6fa557cdfc0568246167c5238c8caf07010bab41b3488a6a86a9 +1b5642fbe9fabfe3612019f3f147838229f572dc1d9053c1c6c48c9e0de058eb +e117beb8b9ae34eaaf332a6568b7babb8ec59fdc89a4a20013f8cb99dd766819 +ec0a3cbb5ca2294aee48179415cbfa3adc1f2ea5db32ba008220c18e9f23ded9 +1e8601fd0fc294b068845c77c630af674acd9f93128ea7707d44e8254c261d73 +37f1ff1c99fe074a0b4a41ad68b07e225f5c5c1d76faa4794687825c6b1577cd +2f200bfdade24e6b626b0d9e244b3b7ed70cdb73601995b7680353362f891a23 +baf7faff93158a9a872537ec8a3cb754206bd0e00ee30672d90a42ed7df31d7c +9e2c24243ef417b5825fd03cd717a806bc54f5e5e8df9922d3d8b5cfbe8c9280 +b43a42196231371ccc834acc5ff067b607a9fb62df38a600ea06009904c52110 +c33041e981f1d43f88282fe864233c25b69efaa7ee8ca97af12ff54ec386735e +44529063038118e119054d5d0b88c56df6088c84dfea8b43530b4eb1f6f879a9 +22fbc347151d2c0018a750bc7af7936b9dfe0a4b8e0560d33777f87d7c76612e +8ed1b506f8652301b011e626cbdaf8fdaebb38d96f2e3a5045c9e450b2bc9b16 +e029eead539fb69f6561a6752bb440703af75245ea72bb3d7aa6d0e6ffbce44a +569d42d601da9b4a94b091fdbcb9cf8bda7826b5103e174b73d4a8dd46b72a0f +7afa714f425b84340c4ea293513f9d50d4ca016893ed0befdd0011330e3eda48 +48e7d8c69b6d75503b9730a9798ec3ca741d329fabf356f9580ebbf5053fbbc4 +0dd6933dcf1d59daad5b1dfc440541d72dd9997ca457b8e264d3b340301b28fe +75f05ab2d105498ee2333a03c3f0a993e7f03a91606bc345769f82dccdbf729c +9853e97bbf4952e4ae93021fcc5dd2d25a8b046a96a08670505c1dd41abb7803 +1b0fc85675a41f518bf0732b2fb5a05b2b70596062d6d27d5e16a42f3d9fbb3b +070b5b372999d90407192508946d6b7df8048b01abca31ebe9b32489167e5d74 +ceb81cb9fa8bc8e4c7a04d186a22d77ac3487ef4cf61b9e1db44797fd781796a +a5b60a5cc4fb90d951b140d2b4a2c56536dbddbcbca78d32a3f814d8409ce71b +ab5e77d540987b44cb7db40edd4f3a83485db1145c92603919731ea55f216482 +4662e6f73a5005ef67137ec2c5eaca47bc2c8cde34058ef9af711d1bb2bb543d +cc60629de4aa5d0f1e7c54bc3629902959ad8e2545dd50d798cc341823212a42 +b78abd2236f707d5f2c513557764a24869c2fc83af9a0fd6c49a3832ca310f2b +a222366a9f73d9c02d6a1347a980aa9c0c6c3f060de7ad75eed4ef66ef3b3b6d +f113b54add2be7bfb901d859e24959cf983190485223a85383493c8801b3f9a3 +fe9b0fc06f74959f4f5d6671e36d863b79cf00863ac09a42d1a03ea0ced501f3 +22ca653b622983213dd0f21325e5f5fcfaa5b8accd7ea82c165cc74d1e7cee81 +ee01586ab565624661d8fdf601b7dc2200ef4aff5956187c15775ceec658da7e +97f1656fb294a28916ef55abcf022a7477b1ccc7f20db2933e5e1ea006f07c24 +49cabc4baa2499cd63db422c9807623370c722613143816401768c00a6791e97 +a76696484716309b6ad1eef2c02a438db288c657b70451b478b1c67f91dce505 +f04023d875a481b9b6fc3948f33996ffda3f54b82034b063ef8f33ecd975bc0e +9a43d988a4ab5b75bc46a4dab77726129d25637a2f454e15583f720cc3c77244 +ed41828582be51da4d60dfe94855f2b2d0bcc194136475ec2774274ac1283972 +e4ef45004303759d9149195c0d2077401cfd014b5bd179ae68b4677b6408d475 +cc0904a77391559fb2c65d3f287e4eeef5d6b4f26d9c8fdd5adcbbb78f92ecc4 +c514b72882325aa76882efb5225da097681fc6fa1cd2af4a6cfc956576015d76 +4eab34a94445ced5bead1c9a67d021c7d8e97dedb8aef69eac03075b915f6323 +9789f8e89a10c981f38797d5d45908e3c3ee5c137a8c536d0fccf864624e6130 +a43e23c411fca9f7cc133cc45a3600c239a2c2b5152d73c4650b9695f949f05d +061bab701018ae7a0d9579f2c725df67955f47c213f0fd6266279afb132d87c0 +d63bf9e4f71ecbac94ab02e319127fc552f02defa4aa4e37ae0ccf02e7a7499a +8461ba0b2a6d37fc2c03fc3667d9f6b257c0244bffb5134811f9d941280baf8d +eb27998480b25540d9e41fd942cbd2f9252842ac3f9171432a0b727bf17164a7 +ca604c1576da59fa84d7f6944d7ab8c77d89c7d3428d7fb3832cd0de34fe44f3 +5c79476830ece26409efe79e8bee3f4a3954971a72add20ae095a39d21ec39aa +2a21ee415530ea753deeabdba40244ebb34c81c4328b64cd694ed181238a54ed +240fc72641c4d4ed5bedff5b92a7f48098b6e1137658725b463efbcd4db890d7 +7f89148afe5ef0950722d165ba7d056b39d660cbf08dd781ce80569e71761b52 +ea38ef4ffbf58ad18e642929f544f16c3bac98f0d71a3fea57325f35fd5857ff +3d118b4ca02066f0ea3a889a268c443edfc6fcb69dc0897b1da491b2ead2e6fc +ffc8b5a6c2b59f94e8bf7d84091c10c60e608cd2a300be6cd01194cf1acaa8fb +863d39c12a7fa5c43ccb50deee0b62632740e599e003646588a0f248132008c4 +29274b4cfc3cbcb82222389b2d0bca822cc94410c17ccbec9bbfe68aacbf576e +d4b249adaa6267f5c918739fb450ddf1a409fc32c46e243135c756a6fdd93ee0 +709de88c42481f58d3f18caed88b705f544028648fee6d869a77685624348e29 +8e71e2378c502be319c16601420f56394c41b146dabf170cb4eda64f61826ee7 +d5c8696f122858a9b932bb4c246853c73fd9e76485624a05a64382ee81bddda2 +5cd807b889adb488fdad7c4809167ce95be1812d74f623f712e4f071144c0fbc +f52ec0854fe512dc2152d160bfbe516c17a346d6790dbe5b85c2b47be79a42ad +0f7735de7199ef59f8ccef0c132d8c109c2bda4cc06a4677416f4abfd60018eb +72f81be1c55ee02ca44025c7f8e16e02b62220ffdc2110cf8cba5536f9b63baa +d84386e2b7210e3b149b6a08c750a2fb7b817dae3a29021c1ada0b1df65e4502 +4d88847da3f278f71eed809a343d96956a173da828eb459e3561df16b2e43067 +dda03ebeca201392373330940e4f12bef9d45bde3e6665dffbc224476e5d8663 +f9d499d9b11bdd6a6644e1e62b0c3ec05118382cf234eb680f9c875393cc7961 +2d5aef1980e7b9655847efd66f0fc1ca89120ed3667ac9f5f735d1e0a650eb95 +ca04937e1dc1490d8eecbc606099f5f7c395f4432ad2bded39504ee1054e76b3 +6789b0eb88801765ab464de4c9941897a68bdca8987937a1fec9f0a0d080340e +5b6c3b87e2d4a470a2a20c9959005eda434f21a454c2d2933296d6ace22edfc3 +8b6cbc835c5491131d65039785e45d9c3191098072df5246f9cc93a5f30f2df8 +7910309361351a3e321fa886a31386beb6406532783e0f8e52d92ced7ffaf8d8 +fb3a23a19dee1d847e0e10a71bf12ae574186fb993eb9d69860bfb1447492b56 +7f5c9d0fee42931baa571e7cd1f1bfe3a7acaacef0168049304ffb5902f757f8 +24e12dea73d54d61656ef0ff5d636231becd5088e09dc29d1ec13cc6d6afed53 +87beea2ce5fdf2856cf3bc1c74b97ee4b329738de88816dbeac3c99fc459266c +19c4ce997db46f3a4a834e7d401034e836529a99da3416a894a7a4c01bd8b858 +9914b4cb7a4a3e50c0c7878ddfb15fcce18ade6c2a04a4872a72a03d0ff4fadb +917254bee4bf219ae022592c0be61740648fe636c4c2a5fdfabfdf50ad2a89d2 +29ee24ccc82f66d891173be0bac6db0b4b314595464202431b12f1f153749407 +aaa8afb70f4f26bf376367d58168d674a3311df21b28542e4665a3284f6f2c31 +99993ba20d5cb4b004eda9bcb307d911fe8ddf6a263f0226e2941f4d3b5c6482 +40a30f38c100dbdefe2032b592843d38db859b46fb44e200dc51a012c394ce19 +36d9166c0883c44883f97cc2771a8d5454669db911c8300b61fc83c63041e041 +4ee6f9ac898f467d2a121a3a2b6584a216b8ac7795017026a1965c9398720b33 +3cae2c08f3a7ccd05c68b08ea36af338db9d86e125c7314271fa84013859ae21 +1d4130ba29774edbc8e6eb4ee9a6b1eb414f7095ede525fa745098c4a953d354 +3daee452c158b78ffa5c0fcb636b8171084d5073c4fbc29f197fba4af7ed6527 +f555fe3956b5fdd2f43da761f3e255dc76b5020c3cce89984611067f7ef2e6a8 +4a0e60ff367145c2912f06cbd66d855fe9cf6f6d8a4101ffff365e8596e53c86 +99fb84dc4dabbc4b7c33a558b8a4d8917a99164e02fe232552b57135f06edf66 +b9c1516f658b71a5ad8a4e92fc246de6bffa36ae1bcd6e5cc44e0bf4f6974706 +c624b66a0d95bfaf1a62cace077c35253aa63c193bd78667065b6920a37d16ae +3abc88982697ea1615ff6e9405d9bc52892d85c587c144ee98427c10a62b518b +641ea2b77364978b1a79c52e9b5165514ff3d8b90c280c38adf8197b59edefed +098fb7db078626cba9d74539fe7cff1c6a9dbd1e7481068e5996010f5221b59d +3926b776d47043e92974ce1f5faae11baa827bb2025f6b669b28b4af5552c2ce +503be12f28a88eb8e89a98d91b91456a8d196844977cbad2fe1d1c9dd6e60084 +839ca666db15f029a4f2207b0ada9617284ec18572303b6a4242618a39c35332 +c11acb77ee8fbf524c110eac8f21bd6e9cfa0164e359d6574e3f332e0ab54b19 +9cdbbf97c176d5e6daf6b3bd5a376dc68e2ba07f287d23a281c211e08445f92a +ff8496585b489b638c86f2660faa08e0dbf78d2e0c545ca5b1aa2045b75623bd +40037bbbc689fadc1c3cebcb6540e07e67ceffe53425239f7aa06d46a45f7e04 +b31fd1372a8065427fad161f4b5e1680bf82b4f6a9d6ef098b87656a9abcaa00 +aec1eb9ceb795784c9b25b510f77f6a62c56176698fb972107faffdbb0c6ddb6 +92c57eafecb2792d8d67eefc5f1f05dca8cd4aaad763235e4c6238b392ec327b +05e4f8cf214cf1568fe76b21f92bc0b7045344a150c5e61cdef830953fe615d0 +3197967551312fc7a8e288fbc277fe615bafbc010e82a174e253d5f3d7b82268 +5706008558852de1995180e1f36b4452782511b01e2e8cec2697863551beefb6 +cc08a8f3c007e1d4258a72eceb19cb44360a555050b0ce20b79e1f3da7a80901 +4a45c9266a585b6d6b113d9d6a3df34589daff99045f046fae336196f205858d +ff4421ef3d944284363ad2718c617ac91bcdbfa77287a58f75952aef416a5e9c +77ddf4e202eae1d4e52f2df29e61154f20f4e362d996e8953afe721f1bc88335 +6c76e0a044f3e41a3888c28ed40ac5fee775604517c99077bed06c03c23bd18e +229963d7e4cdaae349fac25206e0e39d3bcac2311dd69134eee6744f4fd05092 +f43c2611dfd953f71ac2df1495e29d524720c47f00c2f9b4218364ca921f22db +22d2975a3be28298d49537b445795a469a470387cf874489a49cd869c7db1078 +3d9cc562b6b8f2580a7f3375aee1b29aae620e6746d2618ba1ace639ed669b12 +96f970bf202a748a0326af5f13cda928ea441b62fa2e2d3400519cccb4cbfd81 +0d657288cf022f7bd8feae7f6b339e61ecbf8df5f36f67e2cf2c54d4e509c368 +65875be4f87fd359fd5fd96689d7bd378908704f9f2a4d2ea56f71638cc8d999 +b959c5c224f2a810b488e9f7556520841b47d9aa2806e8d292c9c8a85cab1220 +237d2c48a55a7b85dada28cd570cd9dde892dfad8767d2970dc2ba60241e86ee +2d0abf5a17bf27c38698505d4e2cfa34cb053f10bfba376851a0a4c3a5a7360c +6bad541a0fd90915d32914a53a13bd28bcd03e7ccfec7843a97d6750dd5a8a96 +3ed1cb9c3681b8da762054d5a9eb155e1f88c4d769c6d24c25d0be98bc717140 +2d0a08d5261cecc0eca5d80e50073ab37eeaaf1db2bf4876e6886342f99a1b31 +62204f48c374ce5346f8b0541ec47640e269b16a60a0a5be27d320e9cbde22aa +323d1345a71db8bf53aa3f6c54ec2db8a28128f0d55770eb13d40a767c4af111 +c5ed15ac75a1d1ab1c32ddfca6396046b90196d6dda1b9c686a2107bcdfd344d +0d9e9a25d6141c0f6b0679b2b9432a873a00be8ab054be5083e71daac514958f +21330c20281a69d2e43a54d923fd9baca3d4a2665091f6b37c1643ceb3fd52fb +029e49fc4b08de4ecf3720b4cc5a0f90b1e1007dbafac37bb94454d2b90ca109 +bee003d6b3a92c971325981fbbc18d4da669c03c106154956662410166acd7ec +da9f0086771390fb32b7f702762b739bde81a1ab869de9195934ce64725e87d0 +5c63902b5f889c1a70a0d29504cf3864607187e5577a7cb9178db339239e71a6 +16fe2daff6064b0dcb59af11e8aff00b512454462c7e566523716af1e048de3a +6219c75acb89bd1d81132a015439f8d81752b591785512fdf431a5885aa48e38 +7efe070a0e7678212e97d69c910608c4e123bdf9688b207824d9c7bc1e2ad3fa +16303065d50ec926463c75ede1885f01af66fe3bff50911c8ee10cef083363e3 +2fa48f42f7d34c0863e6ada3fbd1aa7b94c9aac5c4a120d1fc28ddd8594c4bce +0440c623631f436c2da0f41d6b8b79c8a80f20ea7a42a80d6f61a583128c61f2 +757e5d2eeea414ee45e1089bdfa20a80fce7f96c7f084f48a147afb1f0d7ecf8 +4927f8ce234bd7fef4c66d4c9f8cde456488aea008b592b4d4f1002bc4b57729 +c53154ee3f131bc4d0ffbafa328c6d59b17092adbceaea849fd5348dd301874e +a81dacd62950290ce296d04ca73de75091ca5321f0a379d749280e553ef106ea +5d4efbb313c55855b643eaaca38e6856f1d2e7440a8f31d95aae697cb97ec4d3 +6f4b983a47fe1a3f67b4bf93831100f674e0b97ebfab552881f59a0d1601883d +0429430f4eeb48ecc29d659d1ebfa92c5617cc58d54cbe8fc47dd95ae7702b36 +4a9bcb6fe841a34a54910023480e8a3f80c35d20973b40df3320dd26b9e3745e +8608e0d39b909d2950c1433bc538c4e5f3577511db48ad65d744a1e5f26a4ff2 +3d1d018daa8d79200c68eca635eef6f52dae26a564b61f47d57cbb7fb0eeba9a +677f96661ec0707a62e8cbec99c5f5f7c6e1ae63061b3a6015485d6a58906756 +a387f88586f91bbf62d6d9420e8e90583892603227a8209c819cdee436461a42 +450b33abfcb9ffae926e2d93457be48b4554ed8d30e1f0ba5b2a2f3071c81ba8 +2a929a6ad92eb1bccc02ce057a2dc709e0fe33cc6076ee8172e4ae980d09382f +b84c8611e3f723efca9f38b4ec4e20a75c2995d15cda3915ccb102f8eddb2916 +e340e0c1513bdf23cbd1230c4f42088682f89ec0596f3e069b8ccc4833fd7c1b +e946c80ff1ce81e3dac05bfaeb584be205aba06ec1ac8bac9026fc6dae0b0e94 +6f029e5c959907a055aa4b3d498c03ae18f3538f0729ea9692aa47f3d0097b67 +fb452cf12fd71527b3e0a9514ddb47abe40951cdb0db714eaa825a7715847d10 +c0f6d2e908686eaf0ef84b7d3fddab727c958d6fdadd5aa05f02a4d90680bcf6 +dd9b9df2f4a4d61050520a67ac785c666ce01f9d4f8d224e2e21053f5b64c9af +143cd4bfbf8cc2d2b358dc0411a0aebafe65bd3e930280a35c605a473f882f17 +fb9dd39048b9e1a8a6dab7b3806339fc49e187fb0055035eadd4ea6ae43d701a +dc4cc89f44703c31c5ba8c71457f032b8840830b593cf1304eec2448f29d68f4 +8207ee7eec89597c61d8e4ac540296fd2aeb0639493534da6b4e792050ad07f5 +de9545c1bea5543c5fb7d57ba78f14b75637d5b866d90f8944247ab56d51aff4 +180d2246d4b42a3c69fd178e646b7affe815488e8bc762f9c4ffd0f07942931f +e3219a2ece1d58c0275ab16b5c1d4a2884260525de351082fc3009a04f49728b +16e20f01e57f1c5c8c5051ba9c4350bfb4c71ae901ca6a69bb0ccb112de000cb +070959597bd55763e198a555d0790ab28e75ad2100e5a3d4f9f699cd3bff05ce +fa341b1096e9d865bee4f123c18ef6dde2ce8658dc654d5d026b21d56393a96e +f3b65d3efa7a0d32a43f2eb404cc68d5d560ff211daf60ddf96527bfc964fb5a +a6c18d0ef07f5ea2c529a5ab1729f5023c81eb5e531c49e4b22badbab6c930d3 +51c9b07975e782934b3c73af91a6d04138092a16fdd6f5c56be41182e6b25453 +481e08fae4c27905ed8a7e39108367121328ccea59744996edd4c0c4250a42ae +cebf25f1edeeb4079692cb73f3f760e6fff45571bc6e8d3eed47049579254c68 +6a16dda34d3d8c5d9f0ae20ffcf5bc7b8538b74b3b370f86377c2500d9a13332 +b627b78286b8b81ed878fdfdda622cc66bd26bfaa046f04cebca140f2b92f807 +318197b9305094897ded5d543a31210f41db6e1c077ce47b94bcbb2146400bfe +71ceb2a9248c856add14bd949030b124e1ce93a1ed1f04282a96a84d9b877723 +4923e6726756f150c0f27009d1488d92d73049b8edea95ef5d05831ada74952c +efc496189174a9ec8cb6e1c94aa8b632e27677ab35216061fba2c54ffc4fd056 +fbdff7f2f29661d893ec24be4ea71cbc0ef7123d2d49ebc26176f92d66c5f379 +b820be30eb462a32fb28392d14d54cf7e1b1481e1eafa51164517a68d22d0937 +9545804b655b8286dff409d9f0ab31b5aa9a4a1d4344e96679e43b403d7ddbc4 +90edc372ce77482b54a1ab8c22773fb848679a8a7d6b2e87cddd3a1133ac4d8f +8dd5b16a6d069586c10e62fb5af92d3dfc6175b5d19ad215b71635c767992de9 +a920de9fd38f74562d2220cb540f46b2010365ed2bbc69c7f8735de80e4c93ab +5018822d6c97de1baea64c8b91cfd1f609ca1717c99017169f015e091b8b97f9 +475be37f0e3e8a44e4e26ac56d0cd7dd2dd5ffd5f38248ca63406d9ced29313d +53cd725cca80ea5909c20f236fbaee90e5ba71cd3d5328de1daa84cafcf250f3 +f6c16e987bd0013b72d8a5483d46ced272247c7dbc053fe9e3cbc63d4d6e7ba0 +45e74e2785afd59d858b71353a631a4b01b6198763829347e36f8d8a3d92a539 +1e4d116666c7cf1d958c7574976476a747433a115dfa06f75fb4087dcb5225bf +1534f1adb3cce56807658a295a52438024c6167ba81b3a55bacb1e58ff2dcbf0 +7259c046c7783cbb66dfdcebd5873599031884154d879f84305105855bae3824 +1d0999200cbf0e74e35f514d718603019648d3d92b9ea439b08f46c487bc6b9c +0c0a786ef7d05bdc929f968ae8186e53c65806bc71e14676a843c2966381c450 +46732c3fee0aab757fabab0d2498540f12f5f5eac58196edc60e295a401fbbd1 +a42f6705e36d73d5ddef49877962dbd9853e95858e552dbb932e0d743c8144b0 +26cd9e9e29880480492dba7d133fadbb022df2c3c68690d449a00b4eb98c10f0 +f01b841d0c6ef0b37b5d2c87c1419a9ae0d636d407b32c9c1a79e9d9ed0b15e5 +df1d0a573f493895e1bd085bbcd7883e8260a620f58ae5a1eeee5a01f2feea4b +acb005737d9d589064c18989a8e10b9e6a6828e168d53d34eabfc17fe7d0ebb4 +8008aa22070847922cb1161af61f43bb3c86c40bff2c54cf9a11008dfae18a16 +dd5a8bd91d35a19504f2ba58e4cedcede89808ad00c393949da11cf33b2f3b6e +fa139c76e3948ad02fc44fad3610dfefb89cf956ed7c7fab7eea39cbf7c3f9d1 +0548f923e8e99f37d3e110f00d09e84c65f58d35a50a61538e873f82162df5cf +a5d01da97f77f711e9c7c36fc499531e70d93163760caa0c2c9ee5759c998ac2 +4d9349c5fe7d716e5beff4d5a137639e5340173724c7421d34ae3d3dca9e32de +3a7aa113de4a685b122df59a4c3ba1a875fc7c5dddc3ebfa4fe579fdd0596ed4 +156ef653a04d2ad33e9cc000d4f1aaf1cec7f5d6d6c76f6f252e56ddf77f0066 +c0845d62cc297baff729e94e4c9d875b7fa986e775ad5db07bf00ecd42220b02 +3b8c4ebaff2947b63e296f18add419f7a2ed88ddea5874d29b7a65fae73a23fd +504b334e773b11d7b3b6995ed8533b2cfbd98fe68d99a84f1b0a303ad840b1ee +7b06131c55e52138534807f26986b2e88f41df393fb9fd48c3151405fdad7259 +9db2b0458d54e13022b7a6b58031bff4bb4543da0a99c02006ffa9f24ad784b6 +732b81b70b23016497a736093f5758e6f006d99bc0e92021e914b959fc41bd1d +27e727ab6946258e400f1cce4814488b2a38cb333e4b39c6736b90d4c030dd98 +2e5d5bac7da2d6c73f9619b0c636fe8bb73315e04e49fc5d78b1d9637181d209 +3ac87057cdadafc9ca874840b9902d6eb3fc8f44c7105506134c44b00923e412 +f253a18c1445290372a257a6a5e5393ccf44ca5f57129f07ee907282b318b97c +33f5c4836cf56af09fe348aee9419f73fcbf4e2a8992f998b118c6e65b185d94 +749c3f6a932c7193bb59b11d2b6a041d37b946bacebbd6acd38d4a920d7f1853 +f109dab5f51820905e1d0080032b53d52623106a601c0f4564ccbb80c9569ce3 +3f71c6ca61042e13f8900c0e0be23b7581cc77dc0b6e01a23a6ac77466b373e6 +edf7352c08b99b91929e5aad20c32820325cb0231a8608b7b4a5472fb2eff2c5 +73e9c86165e7d56755fd562fb86b5d16dc1237938b2943c222c1953d16b950ef +6454471b9dc6fe0e548c7b64c52177684f318eb94f65326e9a9051029abc6e44 +4e6e94a58f2e8fb44ea2ca8abb75a3c2975c604f27529935760f7c28ecba35b1 +557c9c8c0e6f3acab55238218a587665bf35a2b7f928c51f967d6fbcec9b3548 +51ca33a27e94f578babbeb0ad10864bfdbaaf51616d15582c4def1af4da8ac9e +33d957cfc0b21962c4286c35d99e47c4fe0096e185f74b477ddade0198fa16b6 +f24c00e22d940d2296c267687aa0a7281828ba300c7725d79145e176c5292691 +d858e7ec5957d8591f04cb6c27b14dc5ece4d886540faa5b2b8ffb8c7f5751cd +26e241c1b58ff4e7ba0d9ec448db3606ca0957e2c7c534d0b3c726d296e62ecc +27458180fbbc74e89d3706d2adbf63675ce8707e5f537b7dbaf9e6a844bc668c +8de93fd2fafca1eb61d634dc0c9a2a98265fcce415ca88d90529295c2e3dfe73 +1562088e9886a21e22d80866a68d642397a6f5ded77697febfc9efe80aac62ea +1c460cf3979c5c785643dde3e4281919f91f0f3e0ee5580d4061a3c016ed479c +f1f633a0cbd30858da7256797d92bfc2a5e31845d9cd97271a21c3a238c2c0c4 +3fbc6d8570a2ed8b234736018a75ac00df3e0553ff2426fcbdc6debd092de900 +918a7ad356767759f6d425df62d9ca9efc569f1ae4a62856294799da7419480a +861362bc698cf508d7888ff50261a19cabcec0b6954e0c02bef6eeb61590bfc5 +f6c24f1b782a243fb4378ac0f033ab5c66941f00dcaa9402e03cd26b48ca9659 +2422eaef5e47bc1ff10cd6c46d6bf59d0a14fa59ecf263cf64e64ecd4ebd6a8a +64078196e6c852606e7a3e2e281bc580e708ad93057fabd5c2c83cdd33604454 +aea5b5b4acaf1a9dece81c679bbd873f4ecd80c6d5cb92870b4ca7d1eefa55df +0a0ed724f66aa33743c197b4aeec6079951be9210e46fb5f5a5012c7672084e7 +ced413f4feb98b8c91639beb967a2425500bc6ac1c146bdb8e922a186c74cd86 +795511b26035e102f542e9379a808999e264a43efabe55a7db13fd5a58a2a5bf +35a7d11315273f48324081c128ab132572822b0a4246a24a2b67e8ccc1192de4 +ef25b398b4b2d73d6a42a7a14c1e9625c2aeb86e19fda2fccdb8901d665f59e4 +4cfeee241f78413bf38e91331534702002474f5751643ad9a6b3761d8f94b962 +4ddec9b35f568c433d6521139e19622a57da46d4379e7303ab76f7a42fc4cee2 +dd62e1752a5ae30e395d26a0cbb687020ddf3a3634b4bd8822d11aa0466574cf +6f5e5c592013aada23f7d8b5aacf776eeb82757d5a41b33ec67ea3613d879dd1 +44839286f7ce503c29947adacace3257013f2ebf45e8a3c547897520780e37f3 +f2331b1cb2f2fc1b9b42913907ba17093b13bb5a4d28d60188ef0f5415145beb +182139e44f6c3165f50deba47d0e23f331001ad1fd33899f2eced2b5865a315a +ead04d1024454ddecb2348131be6007908953472de05fddcdbc402b7a263c921 +7b92d3d47882cfe4b0ba1316d0f34dcb0d55628d8b058c4343fb40868687e8e3 +04286ed767391bbbc73f0636455c671a7eacaa3bf29e347e8f6b69bdac81711a +94fcaf9522b2ef8980effe8cf2a77344b4da65a9370656a598ebe7e255a2e9e3 +8eb10f5f5d00fdc46546b52c1e98662bf91441eaa11a4d9829d930e6f428b0b8 +69ffdbe7c1ec0ffcf278a1e401fce65b72a13ab5df4947af565d16b5da915600 +2bc57e3dbc098db1a176991e5b1b5f54bcb5c8c84cf962d33c71c8d3ff58f143 +e79bcd340bf1e8f8518e91c0fef47d4ba7278b123c16a9b1644566142003f802 +63d7623bf4485b9b36929079d85ce106bc3e4dbdf411dba6e6a1f0bf37d249c7 +3f808ce25b501cf5042dcf18b6b0f57b4de5f23881e223ca97ccfb63c7196b0b +c8d0a97f6a73ca9f6f53abff0034b05e5097ec30e081548e85cd05614c536f5b +668af79d54cb36d22b41796ee61c751560d357083c0466c82b1f2957cdaef683 +45f8c3e16346b6a43b239c307f593ccb8381b00776118958b3915d9df424de74 +6676d396dc4e4610140fed3be34619d91f85f8d7a0467eea191cd0068463ef47 +c3ddb452e15f36094b472a1ec55d10a9f4754d514cc1f0a823e78659d0e193f3 +2f481b736a9e48dd89082f12b42654c9dd2a03526aa65d25624bc2b2e5155f82 +c05d9a0bcb2e5a993fa4408b7ba172646d228031a6cdbc8d5899a04f46ce9336 +102989499d3a33c82b4b1f18bf181aaee70f965912f7d55f581e08de236069ad +523b597b1626929e726f185a7961740adc6a6ccb6491e9d228be77a46feeb3da +4f0fc737ea092c20c30017768efd13a8fdce1aefc2c37050da725fd1c3156ec1 +afcba7949d2b0d3f11da6d6402ce5369f25fc64151bee3dd68284bf24bc46785 +07c8af85d85d7293b2c3ac3cdaa3b75de2430a65a8dc7648035c95139bede266 +f6e0432f8fdfa0c8b6f2006d3907769788af9072ac221ec4a81f546bfb1f3482 +cc84f27678672854eabda191724425f7b1912b998f0301dd9749cb3e0e2a946b +c7ba483c7d46a9f06616e143261676c4c8486e5fe98cb9ea96a89125e51c36bd +3c91546f5545f199c7211ab7a06bc53f5303907189ae86673d5fefc4e4e8f920 +cfb4da2dc8ce0c0640d17058ef2df621ac92fc0098e63885be3c7c8912095b6b +708195c9ca201d378f519bd5cd9dfe27a5e85cf4db0272c08039e79586e76a3c +5b0101e3c8ad25aa158f814e5f31de04d20ee5a1a7a3c76ec24a086f0de59bba +fdb1456f3306621b4f25f211b09d3ce58283216b45eb1b884887389913b99549 +f5fa6ce504381de702d22b381fb2ea4152475c182b509fbdf27c8fbd9387b4d8 +f78ba100e218574744edfc6e2cecf0986395354ef8b3cf6d0159e7f8f43fdee6 +0617d41436e91aa3580ff527487970833d51c4bd662b8cc29b02645961e08b8a +030b59284c3be0e69edabf0b5317b4cf24dc75f38f8aefbbeaa79ddf1628cb26 +cf905cbe232b7a0563f36c583449bf19ae4e82b194994dcc1a22617260f6c030 +192a3daef1724ea0d7df9bee265bcd7ccbc62b3326573d1efb02b96c866fa3d6 +e716bcdc06fed217d90e2ba188805a79c962d93be2cf6cd4a5546a4696b40019 +ca515ce484147c0725a2b7e24d1195cc562531979b214f21bb49d5765ac771d2 +7ba3576e7caddbfb417952507acf3dfe951fdd25b4ed1d7705ae13bacaa0f2a5 +c19e90747e1a72418878f9f2fd3b0e62966a2e5d38816e9e8bbd14406d04e141 +e69f0bd354c864458b79407419d14ac81da22acdb147576b4e5d3ba8e08c342b +23b5273b8c08d66987188cf9e5a325d565e65783e973f416113f3cfc4292f6ae +e22e5caac3401b6b1977a5556b0e1128e02cc41b3fe20d46cc0da9004c6c4775 +c6ad75c8f6028d78c4b4941d0642e5509e2abe9635a5d7d67ddf56ab7a6bb214 +b4b56d9778b7439811f026e608d28224047f1c7e030dbf0d8a3d45a24276c1d4 +baa3117dabd4da867441af0ec94f09877f07b020a05867971ce586cb6ad7639d +7af511286c0b2950d9a2e203cebbc748640974a79125bcd5c9e05999dc087c64 +22a2957afda7bbcc89f329d123524cc17c68d01b43f1bc7437ccd329f542b590 +87cd06d77e049ab505e7fddc122cdcd258bf9d3b7ef363f1cf72e35e137894c5 +5c1b6af40630a36b0f134a7962aec6fefa958f60ba7d3aa5dfc438b31dd3492a +06ff37f82612770c95fc65a8a46debd67ef866d15138c2765ad042d5fa9856c2 +b90d03063adb8edc8f5f373444b0c950a406e2d070409e4eb9fa70e226f48fc8 +c4cedd5fb58c74e6fe31835721c99da51309d200e53ae0f5165475c68d2e91ae +fb1ddb4ddff174bc1e4bb47be3d04ffd63b6c7d46b29050aa7d357badc05c16e +fa25f0b19ad211f005f51cc29b6e3e0af4df4d86b89f77459e363f462a17d756 +ca969a41dfb1334fa3b336398112b909ebbba940fbfb29eba6eeea60b67e3ca6 +1a15f7c7c4c8a1a1fe53b5ecca553cedd0a8f6c1591e8436683be57b0c19c43f +068f85d38809616d20764a4c265c762d653b26017417e866d6b292b60c1040b4 +5eb6d0168f28f683ee558e1d73859e96e15267d4ef8a2d5cf2f5e8a3a26e269a +8fdc19a592b9b6d9220e41db410d9a9ae6dee553102503be4af931c6c4218d60 +d036275a2f51f7f83dbcdeb4eb2dccec5b0b46231e4bacbfff768b2ce3e08461 +f0edfe784637d010d3691a817d515fddcd055cbaa931e7ec1a33fa479b9ad532 +1dbdf5b6cdb06839b7fb88c9dff650e39c8b5b945f5a28924b3126e3e8b8296f +cec7d53dca66f1eb86acc7ce60e1f7c18eb9b2335515ea880a663d9887fb101a +4f42f63d2fdb669368c723bf95d2364c4082bf5d3c9a8288041cd779348ffcb1 +746d60963a1c933f90522249f016d29cb5a288a7aaddc3a9c741ec5541438361 +2ac847f011d14b602d819c5accaac37ad022cfdd478dc2bbddd8540e45e719ea +6891d51325e387b5c5d27fea90819b10fd9bf28080ea81a6d44d90a4b0caa966 +e434a9d3fc88e4a1ddda2e1d55bff6a51c8ad7dee711b6514e26e9f82b16c955 +077c464ca07cf7cb3da6a73c22398a9772ef47e5969e8ec9f9dd4cb2051f14a1 +6a00b49e677db12bf74ca384f6ba2e1f29416a724f934b90aec217c974a8b063 +17d09bf15663e83c4399bd3a47c95d2faa0806b58af4b71913f8dce7a60b8f05 +ad43157a574ad41032a128a1495fa67fa35ecf942b72281cd1e1bfe530d46f30 +7df4f98ea3c74ab713424f6962b63f9be0ee7c61ec4ad6aa6ccd18d9f55d8c4a +364f5694f5636c5ebb525e0ea1095c52698f6ca17c0f7bb16d6656820faa4f45 +044621c471570175aacec9e134100381533c2a3e22796812de6d637cd3e2b46d +bb1a65033a651f481629c0b7e639018159e316144f5b34b7cf1bf14599e46cf3 +989be8bd2bff30986d5bf65af3dacf2a3c6ea18b2d157468b021e05aa06afbcf +f35a5504b753e239fc7c5d6f9443f73c669156f3648c8ae0950fe1584dcb8f20 +8b20bd25796282b5513d35945b8b3439d6ecd4d95cafd366310ba4f724be0511 +7913433908bc92250a3e8b419760f301bf8da87cd69f53737f8661ba7e63387d +5aa31d245b6d84b9ea925abda2778bff829785d27bcf56212c391f563b444240 +5213b47ecba1f78c9679fd7cd9278b309efcfc1d3656941e65fe8d3a6f702f96 +f2f4589ec0faaf3e7759886e2637f570297634d4b12ec38e054618bee7533f0d +d0b278097df5b588d8e248f7cc5d0d0546225c0ff60f23218a4a039556323e2a +040ecddb34d076694092b5479a9b1f269b3b56315dcb42328a6ed2560a72dac0 +5e1c689f9b8aea8dd9a1cbead58ac4cd29216d25ff783bf4ae6420025c441659 +4f316f8fef450798e757bf17d5821778e8ee36e6b3d12855e51e39eac75d9b20 +e7269464a352e493f948e1b7d62d271b756c109943ffd0e53389a4ff60922bf8 +1d6942ffa17d0cdac6b9e341d98ab641fc70a55a91fcbf0e0874a3b861163a34 +3b84d22596c6d583938bcfd4d6d05485767524a74089f3f4809643226f45ae4a +4dceaec65963c7632e190059e5e57e5a7d0e563f9ccc9f0eff9e8ec2f00ede18 +7bac04cea03432e487a9a88676016a70a9872a57a3f1238306218aca88b50ac7 +f8664893edde75e17edd1ede0a034b3c19f91f9d8157a0b3d27357046502a38c +bd8e6c091b361faa57488a61ac29e62cf89d9cc4dd90c437a63323634ff7b316 +8e68730bd0846ef1c34acea0dff738a0cc23516e691742c887f58cd669f71839 +65120450c2099fdf0b7bc8e0def62b9b61da7646a9435839ab2e68875a6797be +abffc0759d2a5ee301b8a27658a52e56d3107dcf6b68a8128a73e9b2cdb53694 +d127b07e1ea84ee70e613cd0082ebb039ac7179c2f8d99ca1e99ce0559819539 +95330a52db52ef9a9c022ee16ca3aee3f58af2708739406f3cfc41dde006ead3 +54fd187e2a06ace440061557a97f6d5832fdb5193fc40ad2cb622302e8dc818c +72fe3d04d16873beb4c1f68739e273b50cd9de895f67fc4cb57db53ee2e97dcc +5c0a86ca25c5a0cf8054078883cbedb24afd1f79c95edae17ca6dc1a95e74b5a +f312077939c2db4ffe182dbdba63845344f7fb1cdd916f7c7e4cf93950bfb50e +5509b1522b3ca283420d0147d460e93d95834c1721df511544ae607ab5b97dfd +87c98371ec26d306e70937a582669b5feb503a4bb0b435d571dd1bf494adcf28 +2218b7bdabc366b891b02a4cf307735f3760515ba7ffdd6ca564354465ae0af9 +05b7d5fd9d62de18b81045d04a26a86e00be85746149a11a9689d3f7dd9ce469 +b32c705f67f27c5dd9c4b3c227502ab212bce7c596aed8bc66c8b1b2e715c659 +cbfb6cc71643fcd4e43222ecaa063707d35c150cdacddad7c11023fe9a20f348 +074cd45d977bec9bcd55599291e245df629c5ab102d542c8e1faed2c40ea78a6 +2f3a22850b782485ed1d1952050618a516a37ed0e009623346e44c4678d0ad14 +e7ce53d68ecfa25eef3d0720823e7f77b087ec17555918322edc18c04af85e8a +5110045e46b26e1583aee13bbfd6e308d34956ce3629e36989a98bdc0b7cc1a2 +6f918da349f734210ba8a3f24102e9c51bbb5d331c2f4fffbbb833aeddac543b +6e023d4826c3d2480a9ef6eee7b1272414f9b72230d9294bb11ac0ea3147404c +447e93b1c90ec952396e5af32718a1b281450db87c56dab7aa33938bb7de673f +1033e2052d74232375220f304e6339a4519acf9a5dd40a842f49e3956bbafc01 +c84587539621da7c532f85d8c9150260cc61cfcbadc15ede4400672a9f618009 +a8a1e4fbf089528f645e1f22158589f0bc381b762e3873907c544799884547cb +424bf692ad18bd63c6c7c1a215668d18d84fef7bd07eb411e2d62be2987806f9 +e3320ba8280227c81b07f27af974f0276503b95c1f565f035f84b29a8e713794 +b7cbf3ef649fe3af746c5da30515fc771b394f88c81d1a9ca6b0df2c4317fe5f +8f0353e3662ab25f4dd20260aef9b69cfb5a377676791949288bc3a5a2af273d +36c85006c9882eb8f5958fa74fbed7de56099f4ffb447f89ebe28c92306cc608 +0aba060da2dffd748fd348976756b22d94fff6df04fdbd93951f46aaa0c7911f +1ee1ea96226ed4d0c2b9247a3e168bf21fd7571a7931b5711dedb5643c57c1ad +8929cfba0ccb5665ec85eb7fb7d6aeb60f8140ca375182f78b278c1114dcd939 +445081b923f5257e5e8e7cd1b26e8adf8b9e9cb995a58bba65cf1bb4abb3cbfd +f5bf10f7d87a8ae1cb80669b11077107d2c181a90e0558c7e90dc779447d3d95 +3f9aa5a11337590c56010c46e651ba94d5485ba9e253885fe5bda98c911b39b5 +df4e5707337cc446be1bd96b1a60dcd2562c6eac5998a0ba83f56b2db947b2da +b06fd494f317ad8b3926a63058a2f511e9f3928e111f26c918b690cb04fff5f6 +ee0ac32f4bd79d3a2caa89fd1e09edb5be5f18916fd0ea83dd1068ae39d9198e +0039950236785b04f9acb868073ef86d7c62a8d32080dccd1f0b8746038f5088 +a8194b403f391142894a670815d3b0b4f4a5f7bdcf1a20b95d12ed063fc78afb +63f1b6f1cdfad29e9f7b59ed160e7b0c8b7820ca5c7003d39f033abe474d626b +210d7e165e4d02cfa83999ee7dc7c280ef69dc62dd9e1c04e69cfaa1754b60b1 +dbd547b6dee78d879d19e8d49bf08a05e4d8857b9ecf65d086d049e8a61693fb +d3b06957ad1bfe5b8a46f6d57f67328a98199b8465c58632de760a3abf8c3632 +1d04e15edc6c9ef0dafe58285fff42f7ad2e8f27ba090f94318a3acec6d1362a +32447c3c2cef458a4599fd45892ac1c7a09584ed4c7536827040fdd9aabad30c +00fda68dd52a1fc77d5f277e92d426f9b606a8c0e151a5dfb5c46f79249d3964 +b82da9635055a17ecbc2d492335bd10b5ec69fedb055d6158709f06dea11d609 +ac39d095874b1c11610805d12b238037d24abb2ea953a9316a0454129d701bdf +7c12258ac00f55c82a84a58238cd070332d35e457b75716a61e526175a54df8c +9b57fd84e36ce86ae64c5a440eb155522f2cab142a2c248b40f1bfeb9582c608 +497ba97c06aedf47ea4a673c44faa33dca1a0ea9aaa7c50d31cd9ceea2d52766 +fd64dea743365c8c97e9f5e9a40e936c333d2fd597d9cf8909e5be459d10c346 +ed9afe48950a72a9498d23462b77c25b2756c717821ef293ff33e1ba92c89325 +c91da1b902a29accac37591222945a4ac0c21e44c8017a48dbd58a09bde086ed +ed36430f1052c58c6fc5b5bfaa6243b211c2d176a0851436f97561bb4c160890 +cf32ce918b659f31d6ef8fbde548d3e8055999533ce36b43ab730854bdfeada4 +1ee5634ceb1ee0b1b22299e6e50e14db9c50c04da1084f562b0c204d48c08df8 +61a9ce0bc09e55a26ca1a60863f5c05537bd528b2b373480aa61fbb2568eed0c +bd0d11e4924aa538c62e24a376dd43fef1dfff61c842e9bc40bb11473fff2cf2 +a2a57e20acb294a9bfaabab06bf85ba2dd32db77a9097d19e4ffdc51d4a6dd20 +ce5d2ea0c42f68c5249d1c012b583b661b4d0ea0cfc780f65fbc1eb97fb860cb +23458083ec844148318dcfc2f3df6432fabc327fc2c35136fff6c1862bab2130 +8a6116971c943fae06ea19e801e784c3fc6db4e1a89ae43f172396fc3e5555ae +ad57d21b08f292a8f419826b7ff3d4e23515b106b103d5f01cd3dfc5ec6f1111 +77d3692e69ac6f3e8e871ed38c3fa113d1abfe9cf9218d62ad56df7cd9ebb996 +da1bbc3d543c54ef66d6662efa8acd265f2b539a91ca9bc45603fa50cba2a30b +1a80303e1f3e12db90040a14fa29e9a379de0f753051055fe404f1a14a5905fe +4b11be2fb59e9e3bdb2280e58215cdf60f9b45ea9238920d9a4dad3cf77e1aa1 +992fc776733b2d4cec0035b66cef2acba65d057043b500ac90dd205f8cd01139 +2d5aa42b64487b9a8b7dce7c7f8c4798f0408940ee46cf6faf1a29719cbf5b7c +39ed1fff63e5fe546e5a268c472c4645fa23eafa88f844572a5fc15723072a2e +a5109624aba015e48761a3ded2643bc2ea5f371bab795704e218ee5529b3e398 +77f99c087e813521581362896cd6782e4331270099a293b3e3723a3881bfbb67 +8f94000cb30064ebedef50907b8481e54044e9744ccffc4921d20584ff6ca151 +d3bd3a747df1783a629accf7adc16ce006bffab634074a59717aca174cce260e +79738d115acaf1a400b715d006de30252baf31ef39d804372213ef91a95c5061 +7eb7fc94e289bb1729dbc51533a44f97b9cb4c9aeb95e8f318d870302a9be0f8 +c69e8aa672864340f0edbee7c821ddf94590001b171bbbbfe5055b90c7b3379c +31a2e16566893ab1dcfb3c829ed9eea2d41e6e9b212166dbf2d4cbcd76abd1f3 +d500916f6218a9cd15d365f06da6760b93c3b1c69fa13b88270d90db9cc3b6f1 +a7e3945984f5f35452a4a94c1198d6618818f01b7f2a394691bf680b3edaa52c +8f5a32bc306ceba0d7633c651f173347272ae3a64b3601b7d56033999e20c482 +3d43871bd2f0db4fa20998e7e222fb3737a6cfc06099bb5b6a15a3e35a3d2b84 +decf86cf23ad4b44d63208657b281e93452530f6b615dd91fd33d9b163097500 +e50746baf4b442eb9e728f537718b482f66e5a6178d6d25f2beef782d36937ab +3cac46bcf59faa04618d30e00024c37349ccae94d3edcf0255b2b1d0bff601fa +677794619dfda27e072753ce2f5be068fa6b7ac8c9be5816a83e79730c0adbd7 +da77ab65598b2b52e6819e835d050e049b7f3ac6b6c572dce0f6f0328fd4b192 +998f17a591d04c6b0b00cb21491faf084615335801b02e0ef631a315ef185053 +008d759350671e1136fa2df517d329c22432108c3aacdb2a1eb038d3440269cd +fd65e7be86d9e0745a6242f2c6efe7c3ce3c9ce5f8de972a6548d8b7381ecc53 +60cd18cbeeb5b1839a6948606b4ed49095a2dd82d831c1fac62302e2f533b98d +b8d91815a4e41b12776fce60a00bf68aa37bbf4d811a2c641dd493f896f1327f +2a1c329e8b7e0907a659c077baaf8fb1a9ce2ec37f983da1033d62a4bac0210c +eeeb2185d2265244854ce8dca5b00a8df3f29256328d39f955d1e49414bb6636 +adfd70302e566c6486f1db80bb226e64b280c0c5caec867a1950726681ee714f +21cf8625e25a9f6f2dd731c542f09b2a3fc6606883bf1acf0736a54ef1158aae +025521f07555ea6eb1ed60372d3e7bb50340e53fdf37fb471b3fa6604c37d2fd +b8c89b52b555bdc3b6d6338020d789e8daeca41cdd5fe204d90942d994a89296 +234be3ae615d5b48c022ca4ac9e795e13807741f0fdac6676cd4c272e57c2c30 +7dce82d8944fd464bf0040ad9a1805032eba8de11106dcd697f7969d347c64af +6f098c6f54b05fc56216c59174a79633f34559fed13bd4660f24c72a98e8d0a9 +7bd0dba87e5c255fa1efc6ecedbeacbb908afd71ae1910c9b5840024fdb6e048 +e5907957dd7c6a9fe6bc3019d0831b1a51fda357f6a35248be402380d30e7daf +eb085219d15ef51b1bbef70e270c1d96ce077b7d288d17c2f110b1017a358a95 +d4a9ceee1e079bb2afa38dc9006892043732fb12e11b178c53132d0db18d601e +ad558d3d93dcd3d6f8a901f8664a09e6032f419d8cfae73bf0a7d3c4c241b855 +4e11c338d19d72380e6c703096aa33c43ccf0bebc4fb5ec3290a28c4a2d1a985 +025f69bb1d3ec3cf65ac009072a1212f16c5c9d94ef88fbbfdbd8bf151479a96 +4698c0f42c71612865138d6534e76202dbd93e595d3f0cf3d1ec20ab61bf70fe +c3596dc675e35dc810cddb67479ef104398b3895f4e23106ac0b72bd9398a9d1 +1e951ea0bb6314bd443d141d34f0716aa331d55109d4c6510785a5dd78f4324e +129fed5426aa531c9b6ba8b978815686cdcfda4058a08c0b797ff6247eb545be +c54bd1aaa3ea34eadcd3bf83f2bcdc7a553c4230682bb05b4d1c3a2844f28f91 +03ba045c0e7bfbb647ebac7c6f1a4de966bd163a3d3e411f7379e4f291877a2d +2a7f996e0aa66119825e5978cc2d445b6c0af85092b84c7f8ddfb5793dbdc5a5 +6d463ebc5c034972321763f0812fc66a7c7879d864f8bd78befbe25c427e7774 +aaab7c3d6a8e21d18f59b65e2fb144dceb519e86929abc6c0bd33c9fa9efd1d4 +0784f35e11d81d58d8499195c677805aac4b6a6664310914d97dc1b9544e28e0 +21240674ce5bc6f9c83aaeb389ff1d3674afcbfd91c5cc1cb57f0b7f28200759 +dcaf13bfdb59479faaa429488ada77d531e72aa4ce8669fb232de28b3d6ffaec +f66af63c92e37ea088e25c817fb2da7e49d719040bb13a5b7d16178135000072 +dc20678218aade6533be632a9e1c370816998f58cfe78f06799dd0b312bbb992 +979053aec48d0e1036be27a0522f5831522d4c039b7097b61b64bf9e412cc259 +e793dfc6c6c34ef300d8bba0c12bc83533553d8bb1bd9af717318334677292b9 +bfc6c27a31b0293fed3f80366ccafba72e3d425ba34710c81499954c11515cff +e70906f079b720513b6587ebcd0bdb7dff750adcaea3675dab98f57cd90c8775 +0d9129246525dcc3539cbc6c17849fe21be125ade60ca4d9f169334298862c9e +ba7b5dad9130d40fb07b2bbc6a0ed3a34f3dabbfe8639792de6daaf3563464c1 +d3e079b530d2dc58fec42dd0f041507cfc72859b08df27d9a92ee198776186b7 +89d872c43e0b75c26128f4fd2994143482d3d005dbce9a80cad97999b8444811 +2b19b30555226f74aaae800538bd8afa1939d4d4ca7cd05d169c0858c69e3c98 +78278b90cfc48dde7e2a2b59832c82bde6e5f1a635f651d0036c8c101be681ce +c20a3cb837babfc93878f8cacd938e1abb3d60ceec40ab49f32c63b5969a7bb4 +0da2149d8387ee733666b4c6136f3561f6a5b8ddf41358e5f9a045d5ec33877a +35d2c2cf2d33a915a50fababca7017dae53b9a0714f663b327857933637b4c29 +dab2e8c6c7788602dffedd93a6a7acb81ab343792601d7604d6660646885fe26 +6948db4dccb89d06954d3ab7123a1394a60d1321a79a5ffe619561d1323bb3b4 +c204c35fa4de4e03d144e510fe01aa4e53d8a4052c45e6ea640390e9f09dc40a +b60e0800300588b487c1d2d6d67af49f61475927843ce4464d6ce01b99c35403 +a8863a3ba650569bc1d79855c41bbfb24bf4eabc6f1cfaadbd1f267b376c8446 +dc2cfbe05a05c8722b465131de5585af5c0d5beac10e00327de1cdaa464f55f4 +0f1477ca72924586a257a38996fcc3263f29519a8e27b3f330311e312da3895f +5476a243134c71a73014fd164068c44fd5915379b827b0e26d8102b4c10b1aa1 +1b46626858e130a0f3884c74c9fdeabc4d812c519103ea16a35a3f82a3d0ed6d +34506132a5c58700f5c43a41bdbbe3fc28df5319cf2894859467ff5469bc068f +dd568a7bee1a6c8ffcb6eeb317a65cf9ec24cbf0552b024bbc94a5eb766c7588 +3b670da2fa2a9b25dbb9345251bb415182765e26f4af38f9090f69cd20b48108 +6b8ab43132701d00de997d21bb68a8ea977a85f243c60e0357fbdea690aa2012 +2a4f560b5cf0e9304f89c9750cbe0c920f26e8391b2d8452c1da35ede9e891f4 +afcf7cba4c1b8b3fe6aabf1f1ee96892b388221122597dbd4fd23dadb10e5b7f +c13a0fce7e654256b9ea46e589a6b0929e90c2233f35096ad722c6b95583f6ca +c13b8816da1231be21b968a693c46290a78998e5ce89c3d5f8e03db2217e1723 +136a0b815088261acd5f6bcf6bddd6a2f2f7eaf0913ffc0cc7c2b57af6318b39 +05c874a18fa666818e3495a4f1cd6d10c8f4b284d382441f4fdfb3c86e917e90 +e05ab2bbede8a262773714bce09d52baee8cd87ec56fdbc63eed55df3416e942 +190a12d0adfcff3d77faff34479554d16e1048d1d790e091b431d9550d14d3aa +f28b2987d53e2b25090c88a990e2ac78684b8c6d9ed0a249b33df4b5e1cf0dfe +649532d138c6d443ec5b761fe4f840a1626a8920a8916b59b43d5223905b3ca5 +e98b1264670660d5c11d7b9cdfb25d3445a8c660cf6a85ec03c29eb181a392f4 +2b2cdc9bf27688d8810e85c53c5eff3ce2a2211c5ec02741d4778f06d3bfb0c7 +5148dac12ae73bcdfd2b618f0564a60d0616e859ea3e02a17f31d384955cc75f +4657cf113235a80790057bdaaa47577d1c21d476cf87f93e16184d7f3392011e +a6ad43fb5340b87e4cbced38a96d483ef09baa2389b99939a1e74edec5558646 +d3047df1a17eb7ba1c48a366e092c57d20e542b11a3ed8d5f04d8aa517f05e71 +f511301564779780d7a0c13f65eb28e7228312e83f8a04585dc5b4dc1f4542c3 +f52c3c111e6ee7006dd00b9023cf4ba83d41900239481701d4ce2586e2a4b7d3 +d11fb90df0b62d16246d0d6ab7ab09510c1ecb39942703462e61acee26ef42ed +bb578ad9f217ea8f81c657e9bd4fd39d0157fdeef2c55aa2349b263eba24cf4c +af4f07d61def618be2f1191a2985ae352e23c44500ba67dd35ecc036f08b756e +e753fd846d7b1b5690419cb2182652512415b0fcde208f954d4e4546892f2098 +f202e03521c2952e3382336de672094a4b0c5b1cdaa1ccf0463986bc20013117 +c9de61babd5ecda4d3dcd1a260fe6e109f2b4d4f486547a4086b394e4f6851b7 +ba32953158dec2a9e866a303076a679b6fb36f1bd55104ecd48c59a6980d56eb +f42baf8374e5db038228e3600e95b675442cc9e887664aa670b7cacf6e285244 +845721cad591ccd612602adfb10d2d347c675e04b15a83cbbc0b707cd0224e5f +c385185868a6059f4584691921471e3cdf10e1ba6583ec0d82e2b5ddf67ba1f0 +df5d08b2438a45e9dc10ad130add147157ca4c7fc20d3b994deb739d2baa8f7d +bfda94adf1986fdbe8cfb918121a2de2997599f22608b1da955526e28443b89c +833260e6db1c2eb6de1212ba12160867f05b34a49fe2e7d7c975b4d988fdca35 +9462894f8bfbf68a225f3ef5595ce7ce071eb6acb16119be30a09769b3f98291 +7a053a222b2a5b775a91c34a9f748af2db901fd4a0155fd257a274e597d4392f +3ee5370ca9a7a68909cf375d4d933f03ec4dbda0aefe07afc422d57f43db2297 +ed5ef2b26a69eab20efb95778dc6a45deb40fefdb05e6dbca939fbc455ce1e2a +1904b035dd81e25baa3a1a5d7e1c21474980d100affdcc53febbfa4e2c9b4ab2 +4f037ce67f0aba047fe6b05026e3a371acee346ae31403fab92824c731b6d276 +038137f968a6df2b662d589da89cc0cd36e8c96d0f6d9d21499e625510e5b93e +7d5218788d40662eeb8babe317da4b678d7d521bfeed9cadef8cba1bf9f23489 +e3b22b6cf0d4e4c7336f557f5ed7c1b1518c9a253773a6f6393a20faa9b0e006 +837a14f0595a6db618248185e4d6389e99a80e7697f4f2bcaf51c67e37f83f6a +1ceb2a901ba9ee958f233d53ddf3d4fbefa53aee5323b5bfde8634a2556f5c00 +ba9a90311c291176262ef12086a45de9ee8a11189065b5554849c239ce73aa12 +383994f0cf4d51d5a29b10819caeca062ca857a31576d358acb94f8ce7558196 +a78672f8e57aa882c3fcbbd35e0d03776f94c48eec105d37221ab61f551e7614 +abf3f5be91b00b81f33a5abbb3763f6a779cfe8bac3c3740bf3a9566688c196f +fdb2851c29f2128f1a1053fb6a028ecda5836aff028386be5eb256b99df94752 +2ebef2e163e6f40bafbe1bc2a39c43ca9dcb30d508b28f4d3fd9c658d1e33bc9 +ffe400516585044091a36b2cada2f17cc2e5f92c193c4d1f6a639187ba30fda6 +61bee6da89c74768b556aa916ba73694482c11605aea2716397b66ea8f43b151 +8388edf48cf17b817eb20897b58ad2e0659c6c2eb5283377c0a52069cee4a75a +ba49f397992665306996cbab842bffa093a0a666c28a31272159e038ee66f3b9 +423c6b2d2a0429a773cae3b4b1cf221e72e33127647b8d47b3ed1bbc9dc9db7e +544d8e1614b605f06bc6d2899ce1f706dc3c990a98fdc2d150d83b0b8a0cc590 +6523159949eff9c18bbec385ba74269be84250b2bf574414a8c0802e83ed12f8 +145e677b4958ec37643b5036c2275bb80ba1482f93ca71bf52ad97d5284dfdc8 +fc8797beb7d6c6f5f88312ce6576f269f01e0875bdf6c377990de5eae29d6b93 +dad70a3f7c488f59452d23ee7348b7c105e274dbb67adc326c62c649500fb6b2 +8d80a98e0c4e76c09f7df88fb9251783e66d8391043409f6d32fe2366d376271 +9293a0ed6866d6eb3be280cbcc64b5fc05f32283e6af0ccb7c620059359f3419 +902cfba62d2177b68c2eee9c2ded9675c8694ad521becd72d0f549521a7847db +5ca02e496d3a9b5bfe5c648b758e00331719b9cdb27abc8df6a7bd7c3624dcb1 +b92033520a4cd14295cec48add4d1475785154f7b50c2128068c15a089c5d5e0 +507051f472adcdbc95995c053908a6f297c52af720a71e32a83c9b206adc2972 +c3d2c36ed5be39ada6a9c34f524cf8d27ccb1796a5aa0048da40b4fbdc44459f +f048be5a22be596058d3b4a8f24040990e3c348bd495b62ac630667ba5100102 +1ad26daebeabfe2215dde6318d453a82bf337aa73f7b0ed874313553ef589106 +9d01d455214c6b826009c7695c3cd27a01463d8e60eb4ad63d631e866d512901 +06d8b31c0476aa68aceefe679b3f23f8e680204b9e5161c163d6ddc0f25fbe03 +27912e37550beda247439eb42a7788f2247a44a39b19ff9055cf261912187a53 +2c17cb8a1a1cfae94955f5ea99819b213fd3b42eab2f24c3c3561c8fc110854c +8299691372a386219077aa54ea4e4d2e4860a9c92f12bb3a57c1b8d5e73b2c5b +161491091680a371dbe9fb6deca59080901a0726eb13974ced7dd5c8b3672fc3 +21a95fb438a732dea1d328e35d42c599a524c4d674af5ffe571d5b2547ab1aeb +5bb66fd1b26fc86cb358b15679ecd02c3666f096d3a3ab10773a56ad383071ff +3781f271d0c79c3caf6ada756cba527f62955dbbedca48112832c1f828ed7321 +24ed8c98f314013ae9b4d32b2856c57de21da038b3bf366494531ae7451637f9 +c1a4f9deb32cf23c6f0b9dd3490048c40f380e9c5f3a6d05f52d2e6230e777b9 +f2368d28a5a48c7d89d5f719ab76a2c658714328597a52857e70519d4eca2203 +baead78efd8bdb43aec5e577a9b516c706d228bc0927c12520f23da120d01396 +fc70d9dbe0e99cc0ff7b1221e4cf16b40956186c2317fb9ea03651c46d7d0259 +460497c380ead9cf1350f014fb87b715bb0efdb8beb0a9464b7dbc4892202596 +d87af6dd7f1ae418a709b9e43bfbcd3a2199afdb659f2ff8d68bedf3d014424a +7dadd9da381290a8d9b50409392f4358ae2a83e9dda394ef922d992c975b84a7 +d82d97fb6d78af3a94e65fe2c6117a2168831d3c657f6559bdbadb27f785d500 +46ebe56d82ab792308abe54654fd3bab1c121abc37d1aff3b6d47d24e178968f +286fd5093b27ca3ec9c7f62fb0578e5c91b0c0d3aed06094f696b7a1c900cc76 +71128b688183b5e1ce8eaae9ffbb11e91ece66211983175e8dc20df630bdc7d4 +174b94ebeda42a9f01c454c20c3047a7a9e675cfebee1b85bbada862c29379ea +b5e7ceb24ab9f911369a8f1fe57f91ba40d3f6e3a8e2bcee72dd2873d2e9aed6 +2b6c2729b6c41c3a273a14a6330696a6bb0d691d2f689c3717d5a38e176aa46a +57c65d89a50c146840ca47b5c4785c6ff6f4048e352f9c28498d5f048d037f0f +6464ec2c60110828da84ec480ff8913ce70fc9ec7fd21ab52409ad0eb86df97c +289a39086a40f4f2c52a924a7d04e3308ddb2e08466f67890446122fd89f1645 +80c00b2f8adb435bb9b2f1d1a0e3db2ce697867aee338011c427714df08c3614 +c75091d48ff59b284666388614cd2c1bd58dbec0d37916d5c2336b17e0d52b9e +07ca59cec37fd447a830078b3c9820c736cd9da42f205c618e0a142f2194f5e4 +9ddac5be5e61e906d20503990eee27286e1e094309bbeecff1fb95e5cef5c074 +a347d8da853290dd9d0385f023605566a199dce16952ba7a8dfbb7ddfff73b0d +9eb4396f765989160d1e8781279169a00750b0dd010d2bc5ae5e8bf932d8ee10 +0a96b69fc60b9513b167291ca89260730f67b2ae921e1265ec92cd83a5e95f94 +8cc10721fd2f014c13526fbfcded505cbac5716384922875660fd14f3f50c042 +b9af8af2b9b875b96c68bd72655a7bd2d0f68443d71b7b37bc9cd2eda235276d +69f3fdaf6ccd0010aee1a6e41a09af249d37ab1bdcccbbea08d54c9947192902 +a4dbbd2caefe42e5ffdb91cd52bc63658d2fccd7ff98e5f35b6aa5ced8d8da8a +fca37ba3962add4e214c0bccd0e3eda93fcd3c761235ce8b5c87f95ff316efd3 +17df154504e350211a20a07d1d5c81076fd0b452bf26e9afdca1f547394de974 +d83e9caefc7c8be0ee8062e90d35a117ff900d79f716d0bc3e0591c5f7e2aeef +e7f221de1ede941ca2f837b58d0e80d2425b5bff175ef6c3496294b996c95116 +03a2be00647b1e013e3f918554951db1149a5616ff46db38ee02056b120748d5 +5af70f1f91381cab6b49daf08a9c5d689761b5506fcba7ca0f767db0b417839a +a64883ba5e208a5e0c88109aa000a25b9ba4ccc48ae846c9c6685462eddff5c4 +68446ac1a9687b18ba36707e82a9560430d4ce880dca458c21db25d7bd6f636b +b33567b049bc16dd3451ddf3f4fcd4c987827237dfb76a7e819a8f0152e600b5 +7f63a618a5e9cb1dfec80a2c690daf4a5bda79b118f7072f3d75a602b8fadf5b +f366e7156ed167749decd8dc8c11464b3962707a264c196b22d31193b8b7a73d +42dc795a11bbb736b38f9b7b341486aac93417ce2639381360abf6c7b308eb34 +60b99158d530576a58a7b6183994acd19502092f035eb9724c905d786c7411b1 +0685454edc3d8315680d97afa7de48c66d8243656d22456814ddde549ba9c736 +7657dd3399c16c8d1f74c7e54759ab72fb21b43cf04957d250b74dc1671af0ca +8e4d237244843c9ab58c03c1d1510d617e9a5154f70532dc1dc8b3377c07fb8d +2569a8f083acdc75c479cc1b8fd5ab69d65db5e652ea3b39eb2f4e520f55a8f7 +5cf654b5a2c7e420163c9f91dcb6a03dbf9afbed83be0c3af5354c021c4d155f +516fec392cfded9677aa4a44fb031fb96d14f7ac6b6ae356a2dbf5c5c737a7dd +20f80678c0810517336bc64d0d46113686863f68d524a17dab300db2acf042dd +c223181eafec9d02976848161bd493cfc3ede526e5077093eb92dbac319fae87 +ea230db03447387984fb81055e4efdf1d5bb08b98efead5e4edd69dfbd947dba +e459d2c4fa9e738b0ecd0eaa35ae19e81165e82e0ef80e072a94e4c54d933da2 +e3b55e9ef366f08ed9d58c3f53abf8e63aa60adbfb646b86fd3e35ee9e3fd52d +c15834075b75ade8c67c712fdedecf2cf43af680dae79cd34684853415c5e366 +a01dc00b1751feaf9cb921f77df6d5a8351ea0acf229def75de0ae89a1a78333 +0ff353057fc1c65be91eb15864bc2e3969727a833b6d06d236a4f8f2ab299a0d +54951f490e71cf917cf0a53d8bde429e49bda80d41bf22cc6e80182c476ba03b +ec79ac28e0ef4a79ce8eb49c3c9eca473a090e10c40532c04dcc4b0cf1dacbd4 +d6f1367f4ab509f04c77a7d9848d949aa5a008f1c4d1a7b9aa738b0f4e853402 +32ca1cb47e65b4f6de0595e099fd0f1801f0604ef00709df422ee35325b83d3a +29976c762e73a5d528d78e1dbf8f49168ffbc6f31c6f1fc7512e720fabf0cb81 +931cae7cd3fe7407600edcf24162f7f97d75def8f9b4396a959c92b14414f8ab +2a82382647ddb0c73ad569fd92297bc0d9168e823367c1104711e77dcf9e08c0 +d2a5c4d5f3fabd45cff0437c572c2d5ce2e883dea6f26cfe8e6a9ce6e149b8fb +19a18b36fb342367283acc37d99e724ec83ad8ebb2462f977aaa13bdde6d9e46 +25caf1e074270cbe0254e67df51f8582ad0a82ec1f01a575ef9e46ce5e30c2ab +cc3f4aeb2cbeefbff861586f0e9df78e2d11a6c6b9e8a2454ff4ad620d284da7 +30a46919e64cfb39599131c1a5c1a830a8aa57a2a50332a272b2a6ac2fa89ed3 +321efa57a2fba18385d72571fabeda69bd9ab616e47875b03731bfb1bd8ead08 +2fe3d6b11ccfa4c44f64bd21e9b80d2d5527a7ac1cfef3ac6501b417f62c303f +1c523d0991b53c0ae975618c4f1f2ff31a7d37e85cb366d7cdf2d09265404df5 +24bef624dad5d4448902fec3b10b7e196a0d6317e793070b75dd80f3e0070b37 +b5e15d57f44984e2b159c4675289a8055693411d7523171784b527589ae661ad +4d08abb7464790bc14a1903500c3f57c204f3e200fc201704af43a75b5ba8006 +df0604f43cd262f3cc013f67c6735b474620bf2f93a572951efdebd5b742b935 +54b8cc04c92135d86081851e3259a0b2088f56a591bfa7cd2ea18d7be6237869 +bea04e7e9c5dfe5127a4a362b8f83d414a126bd39ac4074163e3698746cbab54 +3fb32d13094808726ad2a36a7cfc498560e7061798da5cf45b1dd8f698f0f486 +9ce8c45241456256339c81cccd1053de2a8705851f9ee7e3666c2b803e2cd655 +b479fba8b2b56c793ff09d0abf38bfb0c41a4c27bb97fe83605e7f0cbb5e574c +3f080e2f4c24f1e58bba4eefcedbb5bae1b1a9bf6cbc80102194b794954c1c7f +b121234cbee9f9b48e15daac8b2486b8a2fb8479ac5584467719f4d7fb7cc0d2 +d042b1357d321897da010c343243d4f7c09a8375ada4ad3c16787ed2b69ded8f +abdc63022a5e4acc9bc9bb41d484f4770b845f144fca8adc40674e950cebc16f +31713e5b8a523625e90619826ac575c9ab5705b3e24910976d0baf902772afae +7b260587ccdc66f04a2cde75db91ca743c6921c113005638533a8255931a6496 +707fc1edef0b3fab35e573a1bb2793db8902ebeea65e436c8ef2739e09e1cac7 +73e9ac192ac5a62aa35d95ea3c23c738c347e2ed4f1f960ee4379af22ddb3317 +b014703dae59920f07492a0d152f2b8e6ddbc10d8cd45e7d8254b3e1e419b0c9 +54cf05b380f7c8611bb476a66dbd66f33c633a856e285ecf090903ed7710767a +d40a12764d7fe74b89af5a40ed338f0a69d7258d2c8beca2523e4c6566d72db8 +dd6cce12f3bfacbd1925e8c46fed90195ab8a70346fb1972534efd973469f599 +9792de6aef5df605f65dc7f1e129e6f9db476adc829a3839d07ec0ba9051311a +3e201daa9123399ca6a1245e5a99dbd75d8a4fa063c1f293c7832fdea3c94c20 +e83b1d226db0d21e888d91ef3bb30eaa51691442ce8f0b6c988eeb09fabc21f1 +83b57a84fa97a7208999938e667011dcd7997d71790a015a984605291b618356 +296e557eb5d983e6f31106dc68407d715c098b614f4a79eeb7ed796faa356975 +78f51d7f4713117fc158f014cf54ca59bd941ab7685844e5d2de49445bb46b83 +7662b6ffa73fd486e89a43ef9cc22cc360437b5634f45f9f098df4ed24249fa4 +370c730ec5b391cb42a71b96f698efe1a147f0c97a6af442924a5547473ed6cc +91b06068b0a9e873af1a6c5d8a3c191c7b1ad7e53260668253a4d2f6c6ff0f46 +3b29bdb9af54c02d276c5fb7eecdf12495f28751361b899e2022c70e5474c3d2 +419e98243c33801620a0f24e996518f8b62739a6f00be83ce5d7b439ef8e38ec +c1f88763b70ae58167541aa96c9438d0a68d92f9245b53794a8c213bceaaa027 +dc1b8e8e2f3c6b1a64837e9b7ba1b48b988d2cf752a93fce1e30425cf620c8d4 +51286330540c61d0ffd2938a6aa870d9f8762d0ab6a9fe32749fae2e103f0866 +333e09533399fef564a3258c3578cca657adf1ba7ab7602b537d977771ad7113 +9dc51220bc71af57bb6eb2964629db06632751854994f06255c4cbcbc771ea2a +64de05223b558e2351e9b2c3739013634a41bbca1c5522bdc963ba797cd806cd +3034eb7fb002d16becdcb79e20deafbda8ddcebc76f93ca23173bde5d18635ee +ceefdea22cc79ccf11fded7b1067a8b1930abd51b3665a81c4a49eeda260149e +8f23ca7dd288de10c7dcb9a1c835f78a66c8c06ff0a8ed941bb47e0e663c6de4 +db81ba91358a204ab63eb915d8f44bccaaff8104e9a4db4fdb4ecbeaaaa9c142 +78a021a5f253b5aef0ae8c7c0219d7ebea0c397f61ad3c072954fdbaeb99bc94 +d3cb6695943ff5a6bfae397746432278d22f7085408cf846b3e1dafc36247eff +c1ae31ce2ef147d4b792879dc276128b312907efa538f87928779e8d30ac5468 +7dcac408a27db829f92861e83002c38ab452f37835edb99bf367e3e0c9b3f697 +57ba4c23544c95b16a1b2c3d5ebc1eae1b95bb9ca95d79a87d70315cba3dec93 +7915bafc8c36e433e91dcfa8fdb1f3cae145e0a8c35cd313c09b1334b4ab5933 +d4658520f5736623f5908155056150c9af29dbf7a3b58129714bff2635f13b88 +c9991b6ddf50a4ac250c1beee0b7da98a78e6f1b1164595568fc1cc8be62b731 +474b7d7aec8536a011be8c1ed54ca9c9065bb399c23604a19d585d2f2c5a7a7f +098e7ac75bb6d4652247afe761a10f2f9119df568b0a44b9fb40692235482920 +848949fc6782ac7c478670bde32c433bf7d332b213de26df60de7563e76b9edb +dbf53db92507ad09f776f58f15bced6a8366fce669a5c0adedf1944c78275ce1 +e84e5ee3094c9a350f94069dc9ef14b7fc727af43ecc38acf9b682e9930abe88 +1b94156afa6956b09d7fc3e67bdd3227f667828af84a9edfef311acc589eb4e4 +c9a3db46362a8e045f6ca3bb904f5dd84ece9bd93ca4c8a314a756993a39d5e3 +567cf8be3da001fa3c61e3429ac573a0950c99a654e9a0504e28d005c0d52f3a +bbdb8d6fb1bff8d3a9332ab002b13c73bd584cb942a303d2a3ac5e5cc516c41c +d7a119ecf7853bb69d3198285046ef722b6fc79c5ad32abdb13e824def35bb77 +3bccd46ff27de9dfa3b47efe570b9e71e10622920348a36ce175154daea1107c +7be6958473ee9b99ab44a72fb9b7b8638df559f499509fc41bf344eff654fd54 +e5f2a0320f446963b8ca6eea60615eb7584b60bdcdbb4459346bb092d2a92eee +b2c8cb045bdc519d1260ebc284f0aeae1b282341ee915696befdd4e6bf6303f0 +578f94c58328c467a26401db5ec7071e68d4f049948b83223319c2acadc94b74 +d4ac3322006719d5f5dd2970a3e3bae219a700e8a3a0d2d36178cfc60737d4e4 +72bfcf1ad14f25644fc35fb2c57833849d1ab5406322dfe2a25e53faaa2a7add +e55f06a5608cab1c63764f763eec48bbf184e1c477b720afe2be7d4c511b2ef2 +10215f490f31e9576111f6e0d5d987bdefe6cdcc14e80c41548975203cbcdffb +e4fb6bea09196a36ea3e3cb0b5d538de1c0b9df03063b48e32af851d281faccb +83402ea2a2ab66102a265b5e1aea1ed799dafd7afe01f65eda8404152ebfd85e +1fe26c5a1544945084cbafcb10a6bd665a1154232c188b45250941a14c0e4524 +cf679348f4e1bea729e5e35318b36efe5cae2a43350a6fb5e15cd28c27641f71 +8f4cb42fa89f0fe8422df4b1b4d21525d4361efb56d6f3806cac6b88c405d70b +ce296d323a1c4a56154d15e747315a5361e00375a57fe6687a401e9919853041 +d923a6dd94fca623760da33c42a3932f22e33aa72169042f6c5acd8140468644 +1aadf44a8492a98388fc123fb8aa9b5f1f830c27defbfd223f9644bd30fa640d +437d60ef7ffcb28877a055ebb23e5e1fc4258d5d52a3457af0ddbcd67addc31a +fcb88f572d63feddc38681d1faa867622c6e132880754b57d312d5dd5a7b151c +f22788ad49617bd1c030e38d7e441e48d499c5af0a6ca0e4d8d9570c106e2d5c +4f95045d2b7f96873a77efa5c694bcbc6a6e4a86beefb4ad21741aedd99c7d41 +311559d11f9972c23592aaff323614727431829bee8a553984c429091a13627b +cf044c8cfab9ac3579f4ebefae7db99aaacb47e19263735b6eacfdd3d9d49539 +9ab3dde8928e474a515f8eedee58de85912ba66a511158b324e278d1f8ff8e12 +acefe0f098f263a44efa0d1b97a0ea8383709a4a0fbb3d3904c5a1280c5ea166 +9ebee213ea4e4bee0669037467a2f98d17df9f237b69ad251ce99c2d86a1c124 +35a378e4da32def4107d35793fafc267fe0f082b22313addc91032c6c7a28640 +876a5437dcee14f8daa2d4a69d6f0941ad5ecfceadd00af47095fb12f8373250 +6eab5dc639b0aa52c7e9c45b2efc55fc54362c2f9211deb9d2f41681fc3bd04c +c68a6e96bae7839f6a2296913f92aa9d1a9aa584d7bbaf3bcf497cb85b40d299 +b5fbceb170cb3189910a38833eee8db186f593c8f87d8812fa3ed9efe7bc3b8a +27ffaf89fbfe7811d3fc001ae66aebdeef65440dc123c14d48d14aea14daf168 +bbe8f849ef4aa8c1c4c61d2fe89c7407f2d716f37bfd7092160ba5249b3dfd68 +e1215fbc07fbf21aaebcd864dc7f0c51500226cfddbec500d17d9fd40d845dcf +8a856219f430a40d8908f944c0de0a9ab92a99285554ecf51d916740227b0cef +eef36b9ee10555627cf1cafd3917780f581f9cf7e4c5a84bbf08ffc5f7efc50d +cce5c162d3ec86c02fd110847c07758cf4514f7e4bfca2b5da8c56cc7877a380 +bee93bc1d4e1e4fca6bb34b3beac6e4b1ae204ca07136d883e4d0ff54f21885b +8f8f3dff74bd2aa9c7143cb7cca7f6a6b9c1f3fb3b33ea77ae1e747ca3ed8fe7 +3a0b41891b320c695f15b5221ed198ec4a859bda3036eeaed493ba77a8b6208f +10495e621a382fc2ebf73073f4c765764e6e8341822097f86a4659f3b0176729 +ed22175aba1315d0094636b74207b789e74892c705cfa98241831646173c7026 +e98cf11f05c866934150f6abc60038677a2708436431dc0364ee287af111b220 +59c6b11344d5cdc83b6c621e9de5ebccc36af156a08ca1408c0c89b7818293dc +d0a85683ead0f39909368868bc1cad344b85da764492adbe0681675711a7bfa4 +b800e90449acff0e2304324de09ccaa1ab79f4018b42240b58be039076a6d60e +ba39f9ae4e68f0f949777d2e205e761c36e67cd34a9ab234b116ccf8e906cd2c +82fc8edf8e74d44adfd0e29f2e7ff253e7e19a44bda0ebc3cafc5c5d33f1fb49 +89cb24f74dade94867c793225bf047844e402123eb154ab99105f40b29746560 +0735cb20e90593f1384c94ff14cd771ca6f91f4bd6a952fcbeab348b687f9c49 +debda5d5b4a126c1617c5e798a10d60956fc2aa754d4f1ece3d0ae970f6b7e06 +f1e12383fcbcfac885752193c589218e62883e429385f53c1b7c2c160d9f5d58 +4c9b12c6b40ac42d47e57da8ffad061e07dfa9efae2a0950e88993fb57445f89 +de22d3c705ec2c617f8c177a0e952846098f96a0228c988e3e87c8eff68102cd +06552c139387f2730fd8bae520e52ebf8cd1636485510f853a43a81541d3b715 +65bb985f48231587093b52772da3a75c92f1320434e707b49d02eb4e1c211b3f +2ae4a4af8b07471db3bf672210ec955d02be4f021fc6b9ea67bb442b1275e40b +abfdb6a7f0874405673c0ea4d4478a5ff0aad750debe47b7fb866cc75fb0df36 +29c91112ecc16978d527e1ae24e7a42547856355222e08424278c3e96f97a68a +7c95167282b3ee4466b8da0754330a2c1d4c6ec620f0093bb3883d2ebcf65940 +5f4b71931b0e0ecb5f857202bab382d91eecb60915f83fcd56a700dd24d5f8c4 +4c98b76053369e29ed23d8beb19f71c82365030dc6fa5482bf4b0b2455815529 +fec661ea435814beeba1cfbef6ec18ec1b110d34b20fd1777b4aa3c5a4a0b54d +5be0d25984727fe8e833552664a66e7ecc1347dba05d3f720eb2dadbfbcf0f93 +81c2bab46c84772b900d7fa3a4e6f80d2b6b467bb32a5808297005eb8be28035 +ba68466f71da6b0f1d5487b419924fe20ffeda14b4e28631d382fcad985715d6 +6c3c7faa9774732119078887c2170fd184829353b27c6d5517b46649ec6df7b7 +a3a2c8e3870391e97fed5567af38cbb282fef48da0436cfb4a41a24890cbaccd +8e3160b817005d11b0c318b7bf63131988b989b28db289acee84941f35dfdbc7 +9505c6b648f564ea27601b483e7256d7b7e0d423144e403663efe530d69e2551 +e70f58a6fae13a36241616d7047f741f095548250673a6c0a96d1b3bc0469a12 +18745df03a6aee639a597c371ab513af692e7584681cc284dd92805f8b9ce2c2 +9fbeb3e54fc05e14698012a1779d87e35452c0ac721ac0b0e0f2c0adf6d3c6d6 +0a0798ecdb204232f182d7c3fde8708b5ef180e7077b8459b2ee9e29cdc8cfef +3658be57aec4e068e64390b58cd6161cca325e2af09da15785f96a3475ebd0f0 +abf399cbde59dc2e9e436b4f0b56522957dd0cba51838869fada0043fede9100 +a9d89819ade1522e0dfe44e4e03875b02c3a32cc9c6f92bc6b3652250397a825 +119370af525fbdbb792ab722df3d65957e77f8ac3bd35632991beff3fa3e18e1 +51d5ed23f0352c725a4ccf6d17807954d02538fae9b51662125a4ebbf1dc11d2 +a39361b798fa4321db2c2f85acaabd8882b352710a367e5027d02fd0eb9263d4 +20aba5d0ba014b9a6b9404a747c76c971474599aec5e76d61ba8d2b1e47a0e37 +d0bdcb26c6383df014cb81a6acb8826dcebb118fe552e686315d0afa2dcfa0ad +adb5f7b9e5e2368248c12503f99e4ed729e4bfbe1d3f8bc34b83b33be413e564 +7340da019c1df37d62cfa93916d3328d77a88cff27097053662bfa816c7e6c84 +a3b20dbef376762780e9308b3d56027be743d52d3422ce5a3c790bf52f5435e4 +a73921b96aa9a5471c42b9a8419e79709a380c49d3f32a4379071699484460a7 +d085efb752c519e30adc77cd93c9aa73f9c3eab2ec0bb90f7890c94b0c16998d +f67eab6632027e4f464a5f8ef86468735d751605414a574b7e51291a1fb0f3c7 +b2be1732e462f986d09cc9207d64e6b7bad9575ca79e395d7228c4f9f70464e7 +b5c6f360adfa376bc4c567b28f247bf1345def5ebe8ece589131733a655aea76 +b54d6876e44d63d767635022f955cbe3f9f068587be6c3825924af0b6e522a57 +b34a7f7bf283de87043b652d9e0dd0d0be539c7cc4b144c66132e4afcab1f4ac +5cfeff6ec3387a7ec1698e78c344d4cf180e3dc08d54e2edd5595b01d9bc35c2 +692fa5f3d1c2f9e958433ec7218098a216d15ac3684603f14e03cacf7f381955 +3db739aa4f521a17421b1c42487cb0238cb4dda70a59c37a8c7688ea187446db +83faeed8c37e66fc849d6a42de8343f3b23e017e859f576ac0c1943fb39bba9f +f2060997696c351fc5c5dde7b7dd9cba46f8bab8617f6d97087612b8b46d60bd +63a41ecaf62753012b0749cc389a8407218c0f494bb9be215d74d17340777918 +5832f6678e5e5f7c134d708d8f784d3371bd21572cdd40704bc06f45dc8c6b93 +6955e9ea7b552a6950434fea3b5c49335fe6ab6e9cf0908134aaa7305ca7859c +2f31675d91e75eb78e5fb11c3e47b0f64b03d845c8a76a478516b54600b47abc +11fbdc3931c7dc77b1623b9b401a44625ea69e17c51542de9b298809e5d74233 +622c72a9c4b8d516ca8a69e4f1d729b0925d4924b7c023d854975b978e33f8f3 +09c55d96ed952e7b10e7c5f625554c0b95578a1ee428cd71fcba1b1fe104d0af +abdaeef0ac38698f71b4aa3bb3904a372d5cd027909c8ac47f180759bb6c9788 +325accdd8f3f8d15251962f74ee232609b5474f694714a56a7eda59d461cedbb +d7a3c366dea5e95ccc271f7307cf863e9a1073989418769549c6c04b1a71b27a +e8799c894a3b1391baa9821d54c71171fafa342c0642c5065f00178762ae129c +8d6bad76721a9d4cdb40db75ebaa5e1d84825fc2a169608d0d783c68fb3561f0 +00f1bf1dd284add14d5e6b9c760b6ac7394645be90f4238e34d750ae5a2841bc +ffb0d24e8d197bc4c6906c8fb871100959bc46ce76c492c682560a076a6af80c +cc314789b61969f1efbf28c2bc835cb8e0237e12ceb0a140b5f44598b69e1bbf +12c982e1120c2a68aac24f032d8deda011ced4203864849d96901498cf311e4a +5e2db88bb8430dd7117e4e39515d27ecdcedcb2d388f5e43cf0c7590b37a35d2 +f96f1cfd03a173b478046e767f1aa0fc7b50407f143208b6ac7058ebca2c924e +8929e339fc0cb78e94e0bb49a06f32b1e3683a667fc2f83d0d14d58eae1c99ef +885195279f2bf390e3c6d4ef8d927f1a5133ea63ed9a4828aadd5228d1cb0a2d +c9fdeb6b72b610e74dc7c135bffe385b5f1ff5cd281d0562aa1fdd614c377942 +0c7c795427033612b0288ff8ad4ad5c71b7aed8d558e325d29afc115729aa0a8 +172d076299ef561b6c96774fd84986006c0c07ff40248da44f66df48160f7789 +e18184ef44dbd1ee51ba2c71ad9811e071dd933305427fbc0ad0d5fad11cb308 +b39fd0e99333ea4ae5faa53a6d9d32d4d7a56418eda418824a13830e8232d6b9 +7b4685ae3819c3e3124aa5caf2536439a3df02daf17759cc214d75f5968ea6b5 +bfe3088bac7c6137d0df2b91173c6cf66c64b10186394d37fa2f285a9f6af6f8 +8578bbd7868e4fb239299f6042ceadf57a5c9c201cf607f3f9c7c73020c8bf3b +345e6bfb25e1e576235d2bafdb8d35b801093eb992d642553922d92665a282a7 +63a9a6d94fe978b425797d3c2b89a295f26bfb06299a51546a638f334e3074dc +9332d0e6264627e904ca56be3fa48016a8cf919146dce5328539eb1ee343863e +0bb89a2fc82b84179ac8614fcedb0ca88211b436bbfbd2ca23eefa029f040081 +1d442c21bb4b1ca03cc2c9019f5d6495a64f5b19c4a68de6336740b61336116f +672f74c1e3fcbe49843519e145876eb50c4ac2cda329b8c088cf71813f9637ce +05a573606f3ad93008acfa639b748e23ad65c59e4b13819bcbc84721a989d82d +e7bea8bbe43a7d4e30f005de70d0547f0ba5a0e15c8c8d3d7a3ecc6bffd6eb88 +4c5d78ab5c1df15b4a85ba23c501e597c65d876eade6e3335ccf83ee3df74810 +47eb4895636c8950b0ab921de6153f17bfd8b118a668ef19840ae7cb8cee1b5e +192d4622bcca8769478bca8e432fe4ea35e62efbf863045f08ff25c97c5a6459 +21c5ae9745c2d958eb3d8ffd78844a6c4646cd291ea4a303dae2abf588ce6409 +0c881dc959c47e31db6e2707daa0286ead2788574ca1b7d2398cc9539ef34fe1 +e5b4c23fd38192c109967952ffe5dabce0c6b52ab74a11bc7da584f77d86c6c9 +8f004c3f55346dd36392a8bb3fa426723586dd765258eed18d44395ca9bb3fb9 +919ddb20b32ebfc1305f0b2d4839e6b3ab5c9f46fc06309de270054c469fee5f +098667bce33fa31f18155898652df98d484ddb2464a8176785252013fdba623f +9faa08705d6240184209bf6c6dbc8f30d839138c195077bf9bd3e7040c1336d5 +74958b9dcf159c08e7e4f6e80c89e36cfa94e82f38235048231acf49739a1f38 +52db3d4baca9e1b93a3ae900a95fb49f0537d08688a94b59fa84d64e235cd8d3 +aad053ef48b34d99478efddc5989c37373c398dfabaa1d29422d309b1d920ae9 +8abb9530338f2167bf1753230e3c93417cd364c72981e0508ca06d7c7ce0c618 +b475da17cc3344221a4e727ce3398a34d10e43bb4e3a78014c5a76a6677cf9ec +61912a72c5fb366f6b227756a96e67d899473429d7c1b9458d6c7d8b3a10086d +0815c178e0fa880b2d68dfa230197684d0db6aa0000a5d41ea057df461be3545 +a44de48e39a90ddfdc1a2c4308a918264f9312cc57a0971680b578edc777cd5a +a2ec32100de038d8098310dfe026d70b12de70d03de988ddf10af2fcb938a5d2 +503418dfc426a69f556779301c99d468af685683f357593bd4ea2fccb0b73cc7 +97b426a9123527899074550d636eeb0d38691756c4ea50411c5751f097ab66fe +f21fdc3edfbb22c94df0293e7bcf68ad49faf0cc69b3e2f4325be89b8798abc5 +e87ac31ab739cfca196fa880e1d53fae5db9bf1c4ac7d921a0dc34c585c011aa +e3a15f5bc0f338b6c38c9c8cd05a79a4c62b4e41d77d4fcbbe1f0510b0e037de +4e6bbca8df3b09d7cf6059d5eb71a814905d3086c9ca682aae99ac044f42ac4e +a59c33a8319924a9e9beec5e54c6141a7598d76ac67dc14bdcf2cc4fb37d04bf +b31ddc8b1170b5bbab58c64f98401bc738a4ce5c0c12f418a40ce6b2477789ec +2ebc25161a754f3659955efd4c1236d8c8af26118b14b524d1fe630d3d5fa9f7 +96ee236123cfc9d981249f751170cea86940666462a4b976bced6f90fa78f65c +43b81c8c64a9718be3364cdbe1ba1098b86e6b5c53d3df3ae5f217fc34da468b +937dc8b307512ca50e95367e13ca544f1512fd315c3f484b23c4df6003902e78 +14d8eb8a1baccd782e7fc1d532929710867f143155d5158b982f2dbf3e7ddacd +421bb83adc7a50f732e9ba64b770c089443e0246b712f794d6ae502f95348ccb +11580edba6fea8e70fa669ed39deff615abfddeb0633486442d9557a7b6457b9 +406348326037d608dc23450b7943cc950b6a022eb233af0ad3cb56a26c607026 +05ce86dc25b3afa3e88f70f4368f35e10fcfc7587b8427e0ac4c337292034750 +f725a22f5e70cb7b327acb302e3db05da0afc2772bfbfb4acf253f8f7060b5cb +73f3d470d833d6fbbb52e723a69d4c019192217a62a66895f1feaf657dd6148c +6a2ceddbac30c11f80e2c0f1b29775ae7cda55a211ea50f4f49ad5c73cc8f940 +9965b22647294ba72dfcafd7d5094f90c2dcca062f0ea95bbd111e768d0792d4 +01ddcd0f04d5cc002078497a0cb5b5c1fb4c2faf4a855e4c67d1934573824e3a +086a125a4bc98387ddbdcebe129a228689319b7841fbfed1bf0718fb3d417d72 +5c845770f16705dd323d6ef1a20a791ea29f5b448d9ae0276bd8b6d365e3eac6 +f67a1c6b0b17c67cd68e5e81839a83338b9f1cc2553caef11eed415774d7fb63 +a7c7bd03ab15150d65015de47c2d0f9b7faf05b8231dacfea3edc0bc900c718e +2b2703e46d225662c61bdff0f96aefa8dd5db8fa4d807dedbd89726113fd6c77 +6747e4ceeced7e41cc8f6aa792d598c151ad43be7d976c51f9cb8c6bbc73ef4d +dcc6ab0fee1a91da29ffcf6d1f1b4c36f1c2a05187051acd1353d2c4ceaf1538 +ae95d6245588bd07dba81c40fad70d6bda3f6846139278c7621f2fd4cf89964a +2ead7872850abfc8c609df2e4d8c158b86dbd39a00bdc01e82aca5780aee76be +c54e3e68151b5020fb35b45d0f7861d7fbbedc18641e08a20dcc58f4be115022 +da11af06c777d3da2830bd6d4f80941445959720397347bbb6a7dca119e50324 +f4b318b8338fdd7a57ea2fe5f9ed8400b4e9075d6390fc5a2b408cb0a65ddeee +d8f2abe65703f4206bd42ecaeb6b76abd818735dfab77c6c097385368b460264 +e83cbcd3a2c22b3d4eb7144305ed10f1fa5ab10eec7609fb00fbee5621f4db5a +a1373b3a952f31ad3280de359d109accec78ca81310b0db60d6881ca174c7091 +8da1e26ab36c53aec0de47e9aeafdff38e027b94bf377e1d4141763ae71249c4 +51e218cc99bcc42831f553744604985dac2d6b3ef853b43d07523fec4e970f36 +b8c0f364de756826870f2372f5e72561c51c3ee445ace528a97b74798e195b71 +eebcbb58a79d10f36a72ebd92f745eb03027fe967ac9a0ee4cb27e37b0d26e4d +d970712457a710e08610fad22690d24608067caab9463111cd17136e05a27448 +7c6108c1cb0484d71e68658f408987cbd23360736b30df03e1444bed940a529c +47a20d0bff2efe8cb714406d6ae1fb207c075169ebc6d0d323e5067b805a1399 +8d5fa4946b6000984dd0d5e351cde25557d31ea0348cf794e18d5d90d81eab15 +d0f88098fbed6c06a5e093802a60f14aea632f32667668f61a290246b8667cda +e3533745a202a093194ed694c8faa4b492e88e43c7716594c61737ea97c8b53b +6f94087cffda39a12198987ad65d6ba5f9506d84a3850937fd77a29d736d6bc9 +d35a3b5e1f8b4e72f88213f813dcf44c55c9c1b5282ca7c2e8533211d2715af7 +6d9140acb2fdf51d20f08e1063075ecbed66ccdad6d2c1f4a92ff08a5390252e +713d4bebf78cd0b6592e99efac4177b089a231a6b99039dbc7cd368b343c9600 +c5590edf8edb964d9377e8b32152b03eb7bb177d663806a56d66fac2bad2b8c0 +24b12093f0b2d0517d0e789c70a81be7e8b5f7605d2a00233ebd6bf6936cac5b +df0ab4933aff3001c3ea2cbfdc527d27b9de24ae3413874d141dcbfc4f07a953 +b647544d45231f91fe7a42c8819a7df67d158c8fd2150043430dcde00de521b7 +3435f266f2f4199ba90260fac41f15379fc973f02fdbabd224c94865c3c99d66 +a320f5171daaa445aa25fa14e203e44f0977099d9226048f8114071e0bdc95f6 +74e6ce1c582deb5cd3cf63b8d37c75a1e2058bee7464dcf5001efebbb0eebdce +f5c0bf8be172c6803a5b66c54435cd9c2f52c7af057b08452edb7a16166e5c79 +703afc5f3d832e9f1ca8ad9f0228d750c83d0585bf6855ff08b02c3d65eac0b0 +cc5a41eab99571eefbb922e97e8408dd98e8f44e39de3b6d439fc2d7e163a75b +56da2d30738a8615d73e040b378dad79b8fbbb2587a6ba1f02c63b5cd322f915 +d28cc0043352792cf8d130965206bdce25f7f24affc238650f0079c1a7364dde +23fd85842c1d0cea4a1bc8d89a2470e07b7807d09852c3e9ba8a8366e804412b +07c3f9f1abfe0d618accc5416021d8a67b1587d3c98bd57383873c9315535b7c +cfa6e5a28d0407e866adf1f321f75370d6e5bd5d1222dd0414aaa6c8ad7eb287 +df476d1addf44299a1f9cf7804e2da7ba54dde7ab82ec898e1b5b862be5542d3 +793cc3189b07ac5ac274621c9a4c6a7debba62279e304f82855fe73d456de6be +02dd7c35c77770f9fc93567d8fa9d088d4cc0bd088a1c2114a74a8fa366ed96a +d987dac24bfcb440c1d99472aa7bf38de02ce0abef95d5d7b4c6defec0e3551c +3ee14b8847790824b8b0129350764beb89190413d5d8e242486b65056a576634 +a14b829916bc0529ccf076c661738e533cf3f7b6aaa22335e09f851ee5202dce +cca420568c18fb7bdb846383983b9fc77f4a7e23f5d600f27a0f15cb09499b73 +8b30a6a9a8b0a43976d075b6d3c1484266448b3bc7391f4865ab9e763c3542ce +72623275dc5edaee9ea67af8db07921b40eec1a862f2976c0c7e5ebf55074903 +23c14471193eea29d0b9eebc13220f669b93a830e01e3ab970789381fb6424b1 +c718f37f9552dc0fe760c9aa5e5291a37f7336d04028eca7351eea0e7eb3348c +b6ea356e093cbfb09d6598d058725cc9141bf71c6856a4dcbc7a225ec6fdc40f +cd44f4fd535f69cc07482faae3bb1c7075a0cdec68ed8324ca4ded162e110661 +f7a94b2cf80dff8f3757d42ab89ca7d763ccdb78cea39b4829dc4b6ba32513b0 +6c2bfeaf2fdb130ff7f02e659696efbd80fbc5ac83ccaf5c657f8bf7acd4bd90 +38bab1b520cd4785eea0ea3be624383f0bab746aa76495f579d0cb5c1915882c +03240c7f638f51d266feeb10977d516309b902bf027bc8f0c7512712db9b3aec +37de7a5d279f96ad1ddda5aba856fc1191cb0b6f358faea44416eb8ec56bf9bc +b794a13ce01044dddddfc8e53e8a4b4fc6a11135ce22507e53bee2655d47a38e +4584f17c9fd1fbe719d61c597be561dd5775c0d206e028c426d70cc7904b11ec +eef2109f5f034fd1f9ac4583cecb768c1992923618704d1867e544c55f4fe9db +c6d511e2b7dd2f7c7432a935bcd4c06c3d77a82729268c70796b06ceb118963d +7d5f4003255c164408d6e6f9e82a7ad14fd616088dd92a75b314b0ccbb0667e5 +df717e4f93d7814d0af431db637ff2450da214a63ee5d628505d382f49eeaf14 +536cdd409cd10c24ae3e678e2c70e2c4a7752cf597f2108c03aa2746ceaa620d +82e3a4600697c5c5123e7f55929a302e5274d3107931944346308774329e15d4 +39e697345d72e466554677fd5479ff9e7074e4aae512ecc5e22b8e7ddcd92ed3 +bdc86c60c18080ffa4dca10a528a05bc269210694c86857245dd3d1c3ad2484b +d4a689c7ccde8a0fbdbff2ef059c4f570f46194112455266c32afed09fdd601a +1b92605b7c37cebe8ea7ebba4e2e0706c8a61a0c79a637b1d7a79348c1af7b68 +96661854819e5b5ba82c956368e5f32f19c9298256eba8c4244dc16e0c3668b4 +150d5db056e498dd12088df303c46d1f65a3e5b7bcb55bd1319b65d86f250a6c +3a033005f6d275b439054cfd397b717b06078c87e94fa9ccfca602f9ce8b6f72 +7a3e9c12bc75af0c1effce0009e05e93c77cbcd994cac8e2892c0918e0356ad2 +c0e68ece8c47b4b437cc19df148f380f71e91653d0d3cfb99357e5b6a74e7c54 +5db0b84778f7c1ad98e20ac1d8758fd76fff83e7e4304211169557bb14e02c04 +e3e412896d514d85780f9da961ff4a3b4502761737309b26db9b19caf517f9ac +118ebf8c488db0253edb0561dc54c01924b46a0809ffcc1b9f4fe4f73f04b907 +99b7508833d457803eac83e67f16e617c8a91a912684cb31cacd5ee60c334288 +8a06739e67d985be0a3fe3f4d5695419e37536a10873d1ba739dee900d225833 +20321037afb15b33d4e48b5c224dca34a4e3f736bb5a96fa2abba710b3ed5bbb +47c55130253f460f3d38f3a96f365322a0b06c9dc354b262914d5e9a980de495 +2bb1fb80f68b481c24f9d35717f8356a552c53c588ac4c0d02b5c1044d22600d +ec424ffb5d9b99f1f3dd6b46afb5dc40b52552aaf001992820fd363abee7f88b +639d9f82b9b5d8d91c3b7b655d233c4e2575fbbc89420afd4391e9b8af743552 +a6164ac9b197588c87b91a955bd62490ab43eda430484b04fc9f47d7bbe7c134 +13c1ffc4c75400058382de5293bc78163bffe59c56442f7d3139a8793e17039d +3163b29b873bfecc9045337fdcfb6015c5ddd51ec276190bde4e93ec3a7b8817 +b24c348d544e53cab0f6a34326fbd1021ebb6dbdbe7ae680bd08b7b639ec6293 +a32751e9ed52e58bf0250e102cd0d2e34557abb4a19849756297d8912b47389b +3adb72bd6e13d1d82a1c44b7fe7da95f8012fb5bf74bbf571d4d7f54e2eb2048 +baf72087caeeb7f27bc9cbdf8a43ed9c4391b892a3f6ad5f0a95a2f7e1272a54 +eac1d0f4f4e00e90bf2eeab2f1e3c42cd78ece5505088de7822f68eda9cb6696 +5c6e02f2acdfe0f116bebead02c63c5ad3fb169718e9eb29eb33001571baf615 +944f0a945812ddd56581a16ec6242699d12f5f2f77fcf3df485eb15d46b0e908 +34ea84ad9436f3f11ffc446070038759fe431a931e3c1e5ad20689595ffe8e40 +e3b1f1885f47b9504567558dc5f5ef9926790aa1f9201d13f71b02761ab22a50 +6b77a7af5a7d4b9647302a578496b687f554210d27a0380bb6c293799f0b875f +79833303c1343d00b296f5908b72ba6974a42431d8447a80f08301402b63d5ea +4d39dcf76d4969c90644ed50bdc36265059c5a692e33c518dc45f1bfc18c575d +c1697e8fa5bfebd9ea782423e689aa08f94b6570e2152d1847d13b58a254884e +15fd1bbaf265a08c89a5d11abd1f9be10997eb593e51d209778a1f2678c06f9f +dc7cfbc9e5e39a2d350038253edb252aab5453dd910ad7873526d8999df427b9 +7ad8ea34eb39c4998444cd74b9b90ee7d83c71036c87fdd9e66703ae564a1cf0 +fc472cd7e99347d7e427ac2a68a4af795609aa3a889610aed80413f806216da7 +82ee101554adaf4579c314455cbeb104619253cc70f7d30b6552694be9b2702c +8e6a3395bbada3a32e626d8e5c289fb53c462c82451cc5b20432e35298bcbbff +075a5ea4adb8fb2dad61089a96e952400807faa9feb7e26e6e0ea51cd293a006 +4fd1fd703e185846ccc39564b59cb029d4345bc6006f9ed77fdc08027c7c073b +cd5a056da997c8a1d7976af6e466bec7dd51a9808db72a7219d3b8cb8b574a40 +027947f1295ebddfedf6a2e6b74869f38aec7e15737dbc91dc04b5c175fc9b69 +9305822880181c0ca9321a11c0f16ba79a9897968858dc5091b22f9d77e9d565 +ffd3c7894a6c37d78e69da3591aab52f1ca65c1ba3c8daa03eb5cac6688fb1a4 +6ee944fa0f48a13014a78539f6e3e162b87a84d2da670a2ea2c7c6b4c99fd022 +1590c8c84185ffc2ebdf1dec05d0da29320a034c8595c1879395d786345e49f9 +e29e8c192b2a32ff902d078046ed23d7b35b61f14e1018fadacb76f8d92925af +8fc407704a9ba3614cdb5434c3de2ef6d17210f8498f1b06d8e250b1caa632db +60ffa6ec86d11f13e89e63b068402ef4f7e43034d9904b88ad604fcc35324c8e +8d33687affdf8b3702a0a20c7590e783868dbdf4058d62d4b63e935a406b0213 +e17461e6e79c45cb1602bde3f63bb47d0459a35f5aacd5d2f2019b178f06df74 +10b3c52336667fcaba5b3eb7552b61650d48254837d22bc34431b158379e693d +0f7556010c2cd4832a41d9f875c4d1c0570c6c01e9025d778cbb47c37dbdf637 +216b25311a860ea996939b5eb89bde1fa63a02e0ace5a070d70d3b71fa7fb7db +c0080888b5c5521a7517df180d7ba5c9b367ef65855a0e4f02d86f21fb3d5a42 +af8c3236e03d4730c942e79aa3fececf0f9af1c10d3807ab956df83763a19867 +e128d4cecbc2c26e79721e4d1c7c7fb8127e04eca2611ae1b7f575e29be887a6 +f8f63487afa861c237e8d948f37254be7967e808f8833c5bdc606087c6a3f55d +bdaef28e139dd7fc0e2169dad0afa1a1043d583a82c312056828269eca6b0360 +12016ca2e1550cf2a7dee89247499eb1b011cde81d93ad6bdf0e7cf3270ae88a +df4f0dd2806d2e9ac1ab5a8f572142e423ce12c90c78e86e0afca6a634800698 +f1d92694c7a686d32d18de9052333124d712cb3d61634dc2816de492e106fc82 +dd2be1677829347309eb1a3df84e9f555f0c041f48162ac47c04ea304bb5069e +3654249b1f4298f952a96932ee509e28d29722e59b9af79cc7c3ab7809ea98d2 +7bca9e95a664499a18d53b489e8efbdc935c6dc365f4dac427ddd783be4759ff +12feb34accb5806f35e3bd31bdcc758d42c44ead9b1491b1882d5a964d59f37e +debf0daaaf875e0ae572d110c1d19041a175489500b6051e8aa584010127e598 +d696f9a1165016cc9d65bf3b87154b0ff298780d3da3184dd3f9a7c12f80ac10 +d22b521b98d8613d2185a80b1adac8f9705a71f8da71dcdc10bdb92c0aa5c04b +e4af706756ad3c4b33319346997d254d82e8e760e8f718f6a09735bc182c93a6 +60b11ee09a30103c08c9e38b45c264748ce2363cb5015cf7f534a4c50c0ef080 +7868c0db130eacff973a9b7caa7cdd93d1c65ce1cc13b9631894db6216664449 +ed13ffc1c399b82c3c273c75944afbc4534ecfa567c763223d13903351414d51 +c7ff4040567583a6c97a3760e22e58ed88bda076224c670abd4393afa4b03e7b +0d48ea5cabed495899a19ab5d9e29ffa3ab4136cc6d51c8ff761a62fcc5de8cb +f2b9a9dc8f90a4f1772e324cfec2c9e100351515d2cf087143cd8be75a422bf8 +5ce3382b2d1d5297e956d92e69628fe429f6dc240312f5c13f9cd1b5c6f42e99 +ff5f151d8e9819dffed3be44f835fda97e78863888ce85e8ff680a73ed312918 +d94bb3135faab1ebaa679da6eed440384681fc52a075cbd78f945943dc68c180 +228d2f75c431503fc46da6c24c26ec0ada44c18a3b1ed0a60f150244bb7f0b25 +afe4eb88a1d1b0721af1ea60af668df04cd9bc1705fe4d2ab0eaeb57e84cfc3a +2b75110ee06e2a639db9df73fe320d3ce9de49efe0b82540504bab8439fa6168 +0dfe6bd822dac8ebbf07ca60edbcac859d3ed7185d779a1e8ee2ac765e078454 +6c3def20a268effa47129c5348aeab5cf7f3358af88b5fb810cc5b383f5cbc54 +c39353debed61d61a1cc524c32d653e312abb7988ff163bfc9870077dcf1cb7e +8539aaba66b7108392271255f12fe7d4b117746d5eaef4995f9e8a93e4096a90 +9836fcf8d0e193560c2a5eb2cb8a6919b6b8ce1fcaccf88892c8ae5511259073 +c137f6d6b96f4f3b1da0952e39b4e637259a38b51078dff837af23d1299e0fbe +143a0e50f0940591ac7535172ae9c6bd8207d41ccfabec1d987173a0765224f3 +1a1926f760a3b5ac6d1e2fdb62401908eb8157751fbc5ed799e3d53101deb259 +ca8613a7194c2cc0e88bcc87d33a88e24c5564e454bcd8d6950c6468d7274517 +e236a31893ef43ef1f7917d8090064172ac03835779428d81078ce48204dc9ad +3c2ff72eaa4bbe93619818ec035f36905f50ca1e417ce60532b43e4cefa258a3 +074f57f240a85ca82eddcf9e6edea1039f31a842a455cd7efa99a44d0d3b50a9 +e1590e97a538624f5145d481d9fee1d0a671a6d9111b9499a4c075edfa1785ff +10c099e788a0fcfe823e59ebecd753339513495b8ff9457c5a81ff120b028709 +11bf750d45aa9f75cca814dc969a945bbaeb2d25ab6fd6514fa654b8fda0a85d +3079f0f67d75f0fe6575240a1e1ed8dcd05f8d41013bbb2d9d1df89e6155c424 +caabb9955516a7d5ab254378f9bde20dc6b3cb882430961ad903b7fc2c1562ea +f93ec43243f4a59f43ebf8ce027b705e2a63c77255b70d43520864c0e5bda192 +87a15a23aef598e3d29206c55ac361bd313d250b442b6701330700f38bc66be3 +26b5d1034ae8da4f0376330ab537ba50c1a2f47aa0330276c066ababa0cc5249 +3c76fb932b7f7ef636d247a4009621d5bdf378b57d0fc3300262cf96ffcdd45f +e913175bfeee18c61fc838cc1feaeb6749eb00fa3c412404bc3f1158bf9596e8 +fac5cc5e179ec1d1a4b3b111ad8fdea47272642ba24e951f7cc788652c11b0e5 +f4c1738f536904ae6d45f91f0b9887e51d11f9dc75d68e5350aa905674181bb9 +237e022e56633f1d0821201a3ef26c402401a9151609684ddda47cd0aaa3333d +4ce041374d8ccf77cc1eb298a8858c3a8da0a81b15fab1542213fc8613ff5d51 +d680eaa48b91874f8b8c26b13e03be0619d19f4d52ff3879c1addfa0509246eb +9c2049c7040bdba182828ad19415e92efcb632d291b24753a7ce1b32bdcc76f5 +e8fb06a7f89e92407e0fdb106e3e76b50ab02ffcb69bde532ec0271fa6940129 +068529d9cb98c918e96091018597beefba94ac96cc1a26a280a9a2031b56fb04 +e9b0fd1d0742681bd605574ef5f22c55dbbf0ee4df95f84a2c0e318031727184 +95088601c1d850ac8dadda79b2a31bd4ff25a9415e3a28a49fd71e1d9a4820f6 +29209d423d92079403062d4457222eb23c54d818553a50a70c08bea6f734dbec +a00423422033d9fe3c02d7c1ed06ed23662b3190785b5076cd4192c5ad697b9d +07a21f71d83f0277bfc83f49b03e51e4716ea8c1303fbff93cac4248b6852c12 +0d38762da67e51cf286f0b839492802abbffb46d63154b3e36cac0e48be73b0f +7940b0ed6cf8082b3aee76d9f17cca86d76b1fa753200aced9735352801831b3 +cebd577ecc6cfb29ba4928cb7a1962d2501a69d442a5c542dc86e3a01d49427f +2d183d502e8814355b0f981f4896f3ba33b32d1021bfb9179abf80fa9d015365 +aeeead8240b75c09f89141c96abe4b64805dc714d67aaa59b50bca6af03b1cf1 +71f2033a9623cc07087d449af95ece9c12777b8f2e4b32cbbab059ed259ec172 +10b4fc9c32292eb3b6c1281bf5a1ba68bfd94145998fbc7c16acb9524c3b45e7 +953246b7aab8a4b02dd0ac5b7c2c67066e10573eb1f332371419e60aa1cddb37 +f8cbb8102a883e471e7fba016c39861dfd3853df2773fa3a4ff1e5290b7b85fb +20fc889f1e08ccd3125977678ea76ec39f6ceca0ca617e386ebeda875e83ec7c +bb9fa7059555db814f6670c9b1d8929326c737346aad69b46aaac7b4b90e51f6 +35615e5da9a5a2ee6175f648596273b1f766be7d255c51ddfdc7f76e0b1514df +b14e4e5afbe974dfa8d42f7b883dbc5945dde311b41f700a54d4879e5ee522dd +db563fc373648d0d43d8a6bd41fde084f04d37b0ae8da230fc158b8db2c7f107 +9665590b73e639409dc8f60298b46b38d2ce180291f05ef2fbb4e11e2f560341 +443529d05c638676da88e6573fa43e07c2b88fdb35d5d9b471f8d55f35085acb +8f05dbc1af32cf5deaba24bfe384777b14e886cc7a8b2f3a342d1807591ce686 +291bce06f28b50d784e1363ec948d3c76eb96d13d5c01734516345bed872fdc0 +e942b0d11c2765c0917af394472bfde45e74701fe69030b883f441ada3082b66 +170eff444bad8a9f3fa7830db8f3da07433f1d32bb980d513f116446f4e17028 +421d62e6f5580fc9b4578bdf2dba9edc7b2431a84a07ac74aad72ba2458bcaad +b68383076715d30ac49d609a1d07c6446d4d93112888cbc66ab02024275dd771 +4428b28a2a2e2af385e19a2076752bae291bb471758cea2f3738c02a0651dcea +56d459a5a49cee49671ecaf5895f9a1fb7233f7d3b7ba904088f62dd4b5a25c3 +6da29bbb57e0e45dbdde0c9d83057413ae17a1c654c2eff2bfa311f72af770d0 +0b3893b08f21c39a9d66f5139dae08991e372e212126473d6295f1143039157b +da04fb500a26392ae1d0cfa96e6c8ca531d954991ec32ff525354d4a9dc62819 +28a80664e8b004ffac2444baebaa6589821c289391acaa3c60b700819bd33eec +65035c00eb2ff181b6c73b2d2f2191a93288a78c49c487fa09413a61c7c38663 +2d344b8384d2658074a3c39a0148b38e8a2956b936097ca427954036f427183b +d161299939050f7e58397f5ec7504ba7371eb14dc3e3b634ec7525686c2a8f2d +17e735ddeccf8d6932bfb7af8a521a8ce40409b43e6e427b1e58a1a1af2e5167 +65d1ad6f343b7bb65cb1aa769eba303e39e032705b53933b797331014026a410 +5fa5f3525a0d0820c9152bae82fdfc8d5eaf468a034dccd0c8089c46e1602a1c +4e84a43fb420dd05a87644ef3bcfd264351e29e046a9abca044d05be4804bd82 +9ae466a39322451e1610da97aeec5da69cfcf52551fee62359a24ea82e8c303e +0796bbdbce271833ba16ecad0306cd32bf2b82e8047565078e3a9bf7df3765ab +798049ae0c0fe36d56b6f8872d6a5e74d16882d06fb4c40c46f7b8923e265bd1 +b1dad50164dc31aac1b853182f2a92d2be171247d2300c8895c71990c8b6ffee +8313a83c07942eb21473d51753e49a86f1ff0f70163a3e147f573e93111fed6b +07176beba95a4b64526bbd05e323132eb4c6a2cb3bf342f11c7fe0eb776a26ca +38f9a105ead5e3288e178316b608cd223a1cd46c9a6ac3dbb9df23e1a6b443bc +22286fbc88b574b55ddd0b85bca9b30d8ba1387df99d69c0975b366232b46e18 +6609e2e26e0c64ab7ae92ac343c29491282e06f778c4fca07c59a0dce12fb6ad +c110e06116c58c4a15becb0066de27e8763646b659b7507cd4adc32c7a401286 +2d196a4d5c7d41a011f3b9997b8830f465fd07bb692e4986067661731d161b2f +88e191436e4249534084c1e23a3bc41f166585875261da19998758e9c3aaa208 +c139834a5b26867050bb07463dd16b2d6e3c92dee88073de1b5cd0e9cfe06da5 +3db914ac8a5ca7902b9c0cb7217b5e153cb29677ad50a6378f857d8c2dda5ac2 +02cbd606f89d0d62ea9d1d70e86be89e6ffc5e2984a2cb30bbbe836fa0eb36e8 +c3734360dc3d62b9c11178fdf662af068899d2060ce0748f6daea193031ffeac +b9972030fd5c4019a0bd30cf45ca092b634c0b18e5e99e07ba3962c568534478 +e05643ac5f89cefc878fc0f490fd54e968f5b0edc6ac08c2487c287625c1ecb1 +fca36d758823c8cff9edddcc4f7a623e8ffcf30d6ce66e48c9a109747d422409 +3a17bd9189907bc0b6e2e33e051dad01d8ec19089a5b97770ee5b0440042fc50 +3c31dad1e3148aa25c18e45a31f4c66f70193cac5d3bdd5247222331e687585f +a24226563bd7f50c5bfca243b5d5c44d330316de235fb47ff25b58111d86a2d6 +bb84ba76824992932456517e69ef08a765c5850e5d7b4e7e65e6a61ae84bd596 +ec16a1eceba8a6a4689fc401d37b2d3d8543a201c4b61f4d5aefa81ff1e36b26 +b03fde07a8aec4379bc040fe7fbdf1688ad10c37a51dc95ffe1d1ced2a26d0ad +b2ceb69a1cef6ccfacc9c1078c17d685eebce08f17f0b61dbd25499b7f229beb +2af83f8246ccd5629823c64f57869249043ec53ff20c20cad83e315c820fcf09 +12aaff109a379cf07885a0755f9627e5667aea9b53606ee84686c7f824f7ef43 +353767058c5e4a459a87e63c6941fcd541c1921ddcc35106a8eba89bbcbc142c +b8d6d606661c057a0905c7d96858672dd8c03c037a7719edde9ddc2b259ef5cc +1a26f8a1ada788a9dd3a3fc9ace0c7bfd70e5720e2b3681107828fd30cbe8e5e +aa624a6d414c06962b4209321acab024f6b67ba3efa8039d07cf711a3199bd03 +bba99fbafbf3f95aef86c99891012884dbfcf415c3a76509305ca5b1b5527e07 +b11887ee2e84e2e1f48c520b85c38b6a09e8d8535fabe86f96eabbaca7fd2aa5 +5e610859fbe8a8492b0e8f867b5199b3b3ce01b7107d88587b79573f8cc9cb56 +e13db70deba128db4025f397afc97ebba4a93a25e114d944bb01d206c9cc935c +e71b07b67da811a7bd51ecfedb4c230fe673f6c7c90f3e88920a793f7397e25f +69727255207a27392f9954a8873665fa978ee11207d23f7d182d21b0e0461da8 +f193a51d220f8251231337f97abe357f07addaf15e921dbab5846cc194cae6f5 +ad458a8f73d499d8be8422471a290536ace638b436515970a3ffef51164dc455 +a235503bde153f13307e5e919618b10497204e5f65ec63c733eb15d1364fe3c3 +4b2bdb963926e5a69436fee6db5a3af6760fb1b94da7a55273851415c5f9f11f +067eeabe77dcbed68cda661cefc53ad16ff88902d19fb097256f4a6481b5d7f5 +087a78c0aeb8d8a52daa5c10db7597bed84c753e9eb7e4f4a3be9efd0ce7f355 +95510399352efcddc311f04cd9cba67ab7e4c2e0b5beaa8aa5fce57a8255d0a1 +f3bfd3335aa4f0ead36f82a2b7f2ce33b170bd3d45af2e1bc432ac8292f9eaab +e7ff3b78fcdb416be4f6074888922be3713f6e4cb7d252fae626eb6ffc2809dd +01067b39e629052d7b042b50d8cb85791f5f110dcccc165d9ba7fc673036caad +7d21a813c9da71046454d3a01669f98cdba265e2d8f4ba19fc92f84adfd80774 +0e969b92acddb78d2d15fd3c7c4e71a0b87c98d32436d857a7a09768048cc03e +017d31955bb0ec732a416f355fa91f39af1fb71ee8ac920b78a3df707bfcc00c +8241e0dfc8b29aa2be03f13ef89eb46d2dfd1a313dc96da683300b656bcce4bc +c28b54a819080cdadf95d4f0c040269a0362d8a989151ca8aaffcb657a7ec256 +3bd96d252fb2cc3b94b5b943b97da925fed5162a04393c0f0ee90949408a70e8 +eeb50df4e1f31f9477495cf54e213a6e3c607da8db8ef524eecf0b923116246a +ed150fd7e33f305f7b67af033074268f18d978a97521afe5e14093f4b62a7c56 +1d6df074468a2895a7566f1d83129d9a5727dcdcf33311b4bfdf6db770f6d79f +467b27df5d43cd380dab59c47fb703fcb0a2166bfd5f7f22b8bc07a2e93e7604 +010e0daac1e766d72f8502a6124e523082d3814a54cedd6fd337c971c986bb57 +292d5e189e9391acd3d8329b073a698a7ae22c7551815e3262a7dd5092f6758e +edd67f75abb1733fe0ce94fa03c6ae5a2cad0c962f4e360032302ec19dca2aca +4c460a893a5911944ce840207fc4c5a33268e06debf33ed4a6fbdac19dc2ff9e +4a455d1fd60be43b6e539bd1d2fe1ab34d55babf19d7c62cffd59fe28e1ac523 +c0ccaeb463718dee5157c39856039fcc39cac79ce68f17aeb60f561a762c011b +bf14e6a13b9dc08bf99d8cc79bc9693abb6970eee0ad460c2dac66dabac87c39 +3c9f4481960a26f3f755f4198c6c9cb1e3c69e2fe7499b493283b24c927d490c +dd870afb91a2b277aa9bd0d5aa95d718459fea94a160761fa78420305fb3ee7e +a17e54a5f57fe0f579444e804227a7932a83791571c9458d6a27d11c5f8b6c14 +0cd8cfc42af280d583cddc58824d79e784768654e1436550525f9618ac3d2432 +cc7842033c33085971242c7d095b5ad559032ee30658e2d8402a5257055517c1 +37029e6904a79d3a81c9e9484852f7051587cb88a579802abe1c3cd13737a68c +17c051ad3dfc8fdf9d9885990883d5b30acd5877f5150586027146eaa64e778e +deea3a78a6dc9dddfb22f18f883ef0e29b8350b4b7eee1384796c68e0785164d +1be7fba8f00a7524f7005e3fd53a9916f5123696ad3a9ed49fe91e35d14621d7 +833dec291886007b8750a27ab832887cdc64b72a2ffb12dba9ef4d36b91358f5 +d758ca82a360ac3d937c15cf75eff9511f51f8f79c21c70f9a8b886e6526361b +3493f4ea2d3167c3434179b8707390c8b84e4cef078ef9045c359f1ce7f33d68 +fc8e198a28034d896ba4431ce02f373a2912656daac4884403cf9e9c76ba1c03 +38fb59695c16ce410af63b66d7ecee737cd66ca4d2efc70bec42c5d618e9febe +aa021a2bc4798b219fd0168fb5b00909a2ecf743f9c6c93716503511ded72587 +6e2a14b883052f3edfe91667e0726c2af916d8302e949cbe500f1ca81fb4a4fb +8393625d1fb2d9fc19e974145c813599cd2d434dd0a764dd95c98922998d6b9b +96947510f82aa773d8e19a9b460746dbc2a2ccba121349c434bb464bbe652635 +8caa8950c450da7c226d6a4199464a27665123e637fade66e3b8ff67325ec9c0 +64a22c38f59cc8803b87b90fc6909c5dbee4fd3d1741e2a825abfa66e27c5110 +807ed9e4b0ef3db814bccd0417bc14caa20fa9e1aee33f5af342d2e2245f475e +6ba4691f6a46a75ca42f93051f5cf9f47575701f6abd10c52e6f2a734581a257 +e582f3cd743bba46dbc0f3943d7e1000ff9d7bdb9ae59911d05f8e8208ab211c +d24d2a1d2c318408b39c703cf689d090e362c7a0c97f6013b12e2100f3426998 +a07b3ed9f7b23e568fadb273d1d5a441125abebc4f88fd83d07033bf2f6bea2d +6fd7daf1b14306b9b0bcc014f7397b61c5c419a00d72267eaf32d42693effda2 +6c48bad2f5a0d1b6b9972b9d5dc3b04191c68c180d5e861a0f6702e44dc0680a +27eabe6a06eb20ff77fbab0a15a5ea1d7640c3433a7592bd33a3656283136ebe +ee0e3020affd57dff89abfdfc8ecc4dc198dd5fb9f7119fb3be2a2318d77cf04 +b57d36b6f97ed345dbf3b193a3a765e6d9a8094572233aa73a9fd1aa276122f6 +3fa7f80e6882b0213cc2f2cb2586bbd736c5b200f07411da8aa123cbb4693adc +82b9de7a6f5efecb7b2e92752b5fd2059a1376f8f6e3f08a3355217d81560621 +4db7c1d18acafbbfad5c27b565cd2863e692573908018be203547fcbac3c24de +1e56ee5f050eed4d17a3c58aea0acaf7d3104bfb7050369c2fb7422bedb8ed69 +ad00c75bc0c531dadf0fe72117cba34640af9c1031b3a70971b8ed82b008eb40 +45cf2281f6622f76ec7cfa74909630d82e676146f254b5939a5a9130212d8680 +14d5de81955440940b95fb13a1d332d43ca322023ff4f2f9cb5fef6a3492baf9 +c0242a90197559c39830d59f6f6d212acf65c52cd25a4e10c52db1dc302e7a09 +ab5af42108fbd38c904229156e1b7844ae39432c7ddd983a85c176e5c2cd1fe6 +f8d3536ff94db3975310005571be390669ae6da85f5acfe22586965f7f4c1620 +c0750a87385dd534a49da02489b116ff54a1c233a05a35447969bc34df2a3bb0 +46925c9ae8d997925185499afb8d6db917246101996959d945c105086f1ebdf5 +648a78e3ac365601a52674ce9bad490dff54817ebc0a3a476e9252dda4ab2151 +d511f934d3162d440931d2f9f0f92578beb909faa34e3648a3cd4d3a113e099e +b38873ca44a0a1c9d3dc0cb22846a906d52eecd8340cf0aa056754c8c4e637f1 +22522f753f2bd9f027ff8ae206560c408d23853a816291c6915e382ea3d93c70 +13ddd0eec2240ed32a33337002f3176e4674fe16ff6fe138a55f3aa432f77965 +7fa8fe27211ad22c56413945a9a41a75fc254288bc1df077d38220c4c087c14c +90f9dd7774dafadbbdd8ebe38f918f33008768722d1863f94199e56bb64b4fc7 +ea988c4551d5247b0f3745be6ddff2ad2d64c781f76c5fdcaf43a14938eeeab2 +ef185b55cfd116107c3cd777325852dc400d72904e86d14cd1823679247a77a7 +08378e6b95ad9d70308fbd52f5c09a4d4166d67fae71d9a4ad3ea7adebdc4dd3 +d9dc02ecee1fcbd02c144b2141030bf5c4aa67b564eaffa63cb9c00ed43f49ad +b17559dacb16a8f57bf68f86536e28f2ff618435d759efd7a3841d8515a5904c +7c85ce77dee6512337928833eef135911e25b503a6d7b93e47e500bf79cd50a6 +a9a8554c4a1d638f6449578d2a4865fa599fbac8e2e8df52231c7291930387d3 +5cc967cb3e1400fd9e93b9d85885e949c5db26da0fd5cc851149d38696bcde41 +13b54b75c727b4be723f48c4b89b09ec6d82d37be7ef1bca76cd052ed8797944 +4c05074f0306594ff278bf5915473d934c0e5a0cd6a4e034c5eaf697b419ac0f +3ff45ecc9282f13255e67034cfdf52224176d7bc36ed423e2d03c4eb5666c4df +cd5316a1ad173963dbc53a7c3f1366ad8ba4dc506ad2768cabff63fc5a61b44b +7991050186f7345485653c262135d98e8f22036eb34242f75511f31380e9a93b +76748131fa7df47728e031509d85a9f324fbca5202f920226da7cb45d9006a20 +e23b97dd2cefbb9671c1e0c97bef9fb3da662e526edfc4925484f1f78c3e323a +ef35524a6999a17945f01ab07cfa56b7c0864ece8d9efe1b250d521b55f9590d +02cb5aeb8f8bc7d3846c58dafc4114ab35b5127aa6bb6790af25ec29c07e74a6 +88306c2bb114b8c6ffe52c8cec34b8c11325472a3097ac63ef39e303535f1722 +128cebf63f4821ff498e5e083e3b7139d98239aca0e1c25c978bd2479b729e16 +a89e3f9397b83cdfee526c2b30ec9dcc3552e6011445059f7336dfae6f604397 +8358a32e4ea79c17c77a62278df6f548fcc6d7613af068f95e589ccfed3f9fee +92e417b02dc1a7ad2056aacbc37f9dbfb7126405dde662c40fef32253980f6d6 +c93e454b20950451c85af2e12d06ffb0f77937d1b766b64e949c3a6789a4bd7a +07dcbe18b0825fa8afe62278b1fb638d2a47dd3dcb8181e9608b114b5324843e +0fd8f841bbaeee9547a59949e19f6e6024c0bd70ed10e886aade84011c286ff5 +e4c623f21ef16a3141da006b3d3cb84b0cd10b6c5e64461a204a8ef6670d4cea +b0f9dfe805a0e67990d72555640099b2f95ef69bcbfc24fb5d1e422f3c6cd09e +95ff2225edfab302d1c9d93ba2f342ff583018e29cc2d9265b308436dfafa747 +d700974dcf3471f6db8099b09c31943013c7174b39bcb50cccb29db4a7d27d4b +3e4e9c7c68524c29319ae06ffe2d4ad1c900f948dddeee978eb852d553a3eb86 +0390595ca08011ad5f0dcf1c663b0ea072bafb3cd584018f09cb7cce8b96e9ae +fa9ddf9f7ea1556fdb17c2f27a4a4eb19754815f4e6b9e763f1cb4002a760031 +23303b802164945671d9e018b4adc6f4885f0e2cf9e679105c5c92e17e42a021 +192a7a27b56013c0a8cae3cec576664f732d6af83d2e55ba21e0898b9517bebd +dc9d9b06ed1aa0f57706237389ec2a7f0f24a9bf6c5371210660b00b2949e023 +83d68b730579a3d7ae4810871fbea8a946fdff45d911fe936a010eb9a029de38 +086962847f750ee169af02d9dc64ef219e4a5f301f939ce444b0268b5ff840b2 +6ac3086929b315aa8d1cc1d429c512c955a8f103eaffd88abc60058c7c7d214c +53a0990aae4498a87fc25d117a5bcf1662ecd5712920f47a25d2ceee4461443c +ccba88f1a4f9e9bef1542694ecaec105607b8f5fe498d73c3bf1aef729492109 +2e6e96a41a0a9829d6c7479fb6c2a2222a1d77c5c601ca145698f935588d425e +12f9388860f4a91a8c0183850c3ca89cb1d7c6f9cbc7d48149c0d28cb15ca47e +27c5ce0001faa35218c9414ab086ede855866d8943b7c748a0e0ac8164cf524c +23c5c6a6694964f46d6c1aec0bbccdfc2a9bd02db671ddc6f019722105a81c00 +d7837c22fee4e633c45ed4dbef9b2722348b5ddc9a8a5e304a2ba7c51709153c +2e17d2666103175e01e71eb963bcde7cac21e6a4ea68f8932992ee457e671654 +da17d2a1779d15b20d28b611cea9d46b0f96a6bddba46b53c805295037b75a07 +9db07a742cf51d05e2a99baf6738bb4008bcf2cd1b11b6bed98a0257c65f20e6 +24733b0f76aa2ea970b11b1a3a84a9d5a645160d2b16da3a1660a148a58cc98b +f985850d4de74e11cd037f772b7635ff6e082fbd5b8bd80b0b6a4d023e17d64d +1f0baa3f9ab4bfc76fc7db05fa3c4de781599e0dfcc2f856a1cb6021b6b582e3 +19352ec2c23fa24115967435cc04454519fe65416f422b4f596c48b3c4e89538 +0a02f93d982e975d263f1998c938b2e2b97f26f1e0754a082536fff6d41720a1 +14125710de09cb88529dc837ff038be25025f41a951df396435911138045eeb0 +98ceaa27efc095ac7679135e287eb8a6bb9c01a5d41786064a3d85ae38ad8046 +467a41b623748a5bab3a547e3703f11ad27a8434848ac6d1f1cbd7ca43e028e0 +a6fda63695d4d7fcb8ce11e07f020ebeeb92d2390bacb6a6f9344eed135427e1 +5e114d2ede2a969ba5c4fb8cb86f4b9059fc4745b06db9ee13e6e617496a4a33 +f2d9669c03c801a31f85b5c1c43ae5b17d82a75f267c5bab89c238db9c7a28bb +2e94a59e7afd97a1722cb46d442c9bce6ca73871ef9aa97e7cc56b8527299c04 +e7fa9c253c228f249f1fddc1cc59c0e47b6d08e9e44ee4a3172bf86bc5a58153 +221039bd2057fae62ee77b7591cca4ff408cee3c898a8a8abd88f24c3fe28820 +e34fdb1be7863c02c5f33a270e78309ea224ce90c4b576c81bfa2bb1bd691beb +f8258e88ab2a7158d93a90cd3c4dc91a25703c5645a67f5db4f7656b3622d3db +abe27e1067e3fbcd523b0da106201c2576be740cd13dc974f9da840927a8bd72 +19ecc411e92562250bac56cacfa56b874d5b4c10a232ec76abcaf549d1536317 +ca94853c4ca0b52d657be0a964b17059c896ab3ed5fd31b71c1e89f814ba9e0f +7af6eb5ba8d7d09670e9b2f192eed161793ad488fb7c28098206a9622e19aa67 +7e86f079f9539d782269187ee7b9b82f2bfac8f560ab41b1a184b5dd3d09603d +da59762fda0b453ae1ec863bd244af3b6d0de995834fa5f904672a48e5696b80 +506ae2be21e56dbb787931b8cc94ce77bb6a8dc5f229675a4be98694a5c0a18d +3505ca1c7c5d43ec6e4f813d8ca6423622dda5e2bcf81dcb6eb8f39d2c176aa1 +7c53c9cdaa531e5183ffbad030f600edbd861d3833982e5106260d8640e3d6dd +fb9174dd94fa057f0e3db1cece148e79d77d0fff3d4f3347084c620d568e822d +dd598bc67ac28f570b78bc3d0f3cdbb97783c7a951ab7b52924a4d288039bd83 +545249de1e6b061c46969efb76dff653e268a155503b1425fa090d891d47ca5d +46c837cf29fa903762890298be4fcd34004b6972a3fccdfbf840976525b0fef1 +3cf4bdec5fc0b55e594439de0ded75b50d115d33e9264b137d7c45f3c2e80dcf +bd6314ef3c199f8974cf8bd0828440ce68514f884547e654e78876e93d4d021a +0ced5ea7fd39987884c9d6d390261c4417faec8071adb9425b3e3e835ef9a62e +8f482054a593aff016b75f7de74176255c6fb6a7c2ca7ffed72b44a18dc324d5 +f049d1f0044a74eeb55e409d9554a0694789bc7c513c7520ea431742024932f6 +706ae429f27798a7d4155242d1f5575c91baca9f03a1a2d4c6bacaed90df1fb6 +623a0d1853e7603aa6cee60633f5310889d8611840a61661c7073c4d2b496606 +fbfd02a0db8de4b50061591eaf13a192e36b94b81447a1164ad24b864c3b41b8 +c8e94f2f82b79b98f68d40681e2004147cc02a715522e58efd3a606c81727ac5 +dc822cfd9f602d9a859e296cff2455554a7dd9f5578c2442496539c2933d2ed7 +5cc512092e76ea35d5acff7ef0f6201fc23c1a312b2934b12100da79e63f476c +d226337e7113332e4a89ce561d5db0a4c77b663eba69b56fb7300b1cf1bbf41b +ea5f23e7a5a92e743aca07df9ff9ae54c4b43d568e788ca33ce390383736c1d9 +fbbc2efeccb62e5f08508b0c959ba3e9f997da65dd50d7dade268a91e29c78a1 +4422a5e571a74f3fad743d3ee871a13649dc18d9c27419facc7d394b1416baf5 +9d62572e8057e78b68584fe4fa5efc06f8afc1d275e8e70bfc55d90a7ad3d1dd +69fc3aa9f70f4b164f02a912ab7c948616afa4fa102bfb14b02c98be42628799 +6061c0e84e53c56d338079394f54df457b26af2d4d6db8d19fa97f33f858d403 +c92604e5fb509acaef89d56d1803709166c0cc6d6d4b5734804f14bdaaedd847 +80f9618b47b6007623ce2c6ee509d2d309de99efc352692d27c2d68668e6be3e +937dc5919cb274ec44c79eada18a54c7e4f81d66e802e807bd2ffd85f7026cf4 +d83ac4e13ea1216d8b8beb6db53dad30832ed6f84ee3c5e9303dc1e98b48ff75 +725a44eaffa85c13f4f584898a46d3c0d6ad11ec40f88d931fd1bf07b2a2b5e1 +ba03c24dc0e4cea1d9e45b03b1f3787b2dd14009a9329a44fb4d818c8f1cc922 +36b0dbf79c0ace5d00c8319183ac8b213b4f27db1e01986bb1e58ebc04f24621 +4b9facc18307798888b827950fe16e83ce8fbbb7129bd30afaaabc43030b7609 +76a39919284baaf2c9127cb22eebc981a586a76ecd3df2fc5f5f25499d53e2bb +d028ba181b02b6396a08b12dc474dc4c0c08d337b99b19fa1c8970ad44d642ea +0191acc75f43e97d10e527dd45ab640e18cfde69509144c87fad8dcc7fa6938d +ed685aa8819cbec04133c9f0db8ba28fdbd4bf9b7d402c329e04f53f1d5cea38 +f9118f03f68b47b964e826a3bb0139860b1883303350e2b42289e4952734cd68 +0e3886ce0770783c84dbaf3183ca90843db9337b05c9eaf53a8191cb931d8f8c +f139b5dafc69d102d47f0f2e7450df3a9a4150eb24ffe153bd5ebbef5c6b2a78 +db346bf552f17ea37f8637b2d49174e4dd24973a49c7fbe14f9b4d26912c1cb9 +aa215f34c6fe334cb86630408c7142b56d2b8ac665b617fa7108dcd6a4e4f937 +bbede56f309a9a2dc41c7449b49a904f66f552d1008a26731eb9d2407b41a066 +9265895e8cea3d1a2bcc46b1a363a87916021dbed983b8cdbc2dc63e7e5f4ab0 +ef168874ad7a141b113adcb21c6e6ed62c71f23656b8d1c5f9e548577a53053c +d8456a6f96707a26bf58310bcf8768f1f8cb04c5b5cf83ee33427c2946033b98 +44131677316845f318cd3ba6bfdffa0fd88621a9b8a5eab6480f8d08fd6f347c +38f7a553de78095401ea6cd6b5030635689963dab2792f2e3e0a86190d8bcf38 +5b6b6daca816f67c558ee9e5adfc11ad63d94f5f7df9dad43068ca7c97b325b0 +e40505d9a1d825d2887fa45419c938aa93e7384299c9d3a4a199483f4812d11d +caf563e2ef9c8ee4984b2f51af1f1848b73cb6fc0e69a5a75bce0e026dcfb0f8 +492bb38b199b4dcfeac2778a690407caa64464913eae500b49d5258ac19c8dee +d30f81d7029018ab47bc20cfccd5b95aa7311d3b21c0f52806bed33a671e3017 +a5a2109ffa8743d8a37b91582db32ada02914ec0e0a3d986e46bd5a1d0f2d414 +8e1831c4b2d1be98a2ba1250b4951163f08d2d10b0df0ad694f38bbeab3f208c +498510eef241a7cc2bcdcadf14f747655c7f7153bf4a5c75bf1b6217ea1a5295 +12ee27ae6912dc751cfd6da0c912c45802d709f10947eff4c4002cff89981882 +5abb7c2ace77ea25fc3edb1e3741df0d80c29d3a998a38b328e593d07c165ae5 +e04d2862ff61b7f9129a4d04d4d1f754571b32a981c580e2b68b8b274c63f775 +30f0307ad07ac02c927c5526c92051f156d2d907c854856b0184d2074297319e +e82a2537088db34b3e25f0c9b7a059185f75d45badccfd23ff456dcd1f1beb74 +c06da7eb5a85fc18f220e58382b015d6c9f053d91642efa769a83db0634ed21b +2ac37c525f1b0e1aaf8d3622816abb8c3b46c5663ded13003eb014be6a96407e +ee29efe31aaf128111fd9d52f9434f15466f78f8b3cb14828931c95f7eec3511 +67e9a3a061aaf85c9e8aab0d7bfd554690eff1e2b83eabfe36071a21a84596a4 +ea611fb47a8f5c1fc00854722e73969d19f9662dd9a3b69806fa56f7bfb09ec5 +12ec5d7fe1f7ee7d03fd18d39665b9d6078b5b1a81a3c4367b12f198b0558848 +b7d765129eb9a8af66472e2a7e627a212fc5cdf057dd5b29d8c037fe1652acd0 +34fb34c88c9dd65cf40765883d45f4da78fadc381623b4bfed5700ee93fb392d +06f93ec49bf0806456e7d8a12e64ed5feacd9d156e1e8683481d6da4f3e7e160 +9bc90b85d7796736c97463373e16bed72e4623eb6a2f9af53c5e63d16119179f +1cd6102e3e215ba45577328c5846b4db62c9137c74df0005b29ad6f90ef9f566 +d43effdec2fdca3ddf625d17ba2d379f7027c033eb41d89855b306e110823b23 +dda3394b8c7949e88cefa77e9ff6ad0108a40a23faa19bfc51c1c0110a41f2b2 +c167637af1f8d7e418001976b41bde3eeed88c5524284ee93e79caaf40f7083b +a8321a761006a6cd46a04ed43aa993504c227299d3b12ce9282837a71097c5c2 +c90e8541701c5490a0fabbe62413b25f4455a8dfde54cdd441963f8d553981f3 +d781050a2ddde7006d60e3eb4bbb54d64453543302cad95eecf020205fc6f2e5 +7090f5d106d71c762f261b8e29ebec53db4f3c665ed5ddb2b20796efe6c2c14d +04c8581067a20c45f495fb9b96fa97c67659f5d4347059b808b97ba6082511c1 +eb28a825e651bff614c232817634606acd67aa593f16d1006fe7f488a145b149 +fafd0d601b18dfddee880eaa585b693031ab59d165be6dd1d7c9f0572c4b7f37 +e6ebd2b32902ca397c9a512b1b64c0932d937aab6aa84504e69bfea5a8732063 +9962a1a2a80fc24a570b92a8440ed4bdbca63505a68709a23d54b4fadab83fb9 +905299a3b672d1fd89237120502c8bafe75cafcf5f8333f2e667a83208417c14 +a484a1ab2818f5976d59a9ea6d9d358ee83b90e867adb1bd33e3a6fe7d3c0ea4 +c4b4e65bc55de8a7acd05156dfc72e6bd342d6ce413c419f89dbd3211ad1c2af +d07a60aaf07ecfdd8fbf020a91fa8b4f49a6decab8c04e5ba55e90dd44ee8383 +1880b116ad6386424ff1ca6a8bd47e34b76faacfa8ee7f13c1b4ff603603e81d +db506afe64d205bfd8e516d04f25db76f6cb8ae57b50234d13a93122a55c1afd +9f605d0613a0db3028f9b78dc5e35ab00447f01186008d8abc1bc5a5ce9dfb6d +b3a7d8a9d7171e5cb19715717f08ad1c5a0719231eec38e99a9be05984022d7b +4a13c9b2307715950e3abce1d671f7b5368c996ceb27788cba6f93bf7e2bb0af +0c6383d77e41d10e99b099a90cbb8fc3e589344daa319319d5782b1a94270cba +4fa1aa43321027b55d2e6ccb8e9bc979f9efcebda28e856bd2721b6497645208 +6803f17b5effdcde1b02f6be733577d7f407e238f9da9828766ce083127e7f3f +88006214903890b8c99d9608f57c1e7342a7c5c4cb5d5c87d5b65a0e6d0775b3 +617fa10de4f0f0d0a59b6e770d2402dca5544702358db22d474515aaec912159 +ab1621062ac418c3e0218193aa047ddeb4e49467b034e25646ed40651bed21a8 +89859677d92de055eef8d78d81f943a741ae15ad336b236cb1f793a967001643 +1645d3928cf78086fe9f81caa18ecc10d3d4b442fdd5c4044d71c7a3c455576f +78f008134922fad25e02cb687025e957a246fe8e366e34e30cc6dd227ab6fb2a +102285ad32a2f22c0dc2cf0eb3b8ee4100ff59a1ef0d3df3b40ae7e78fc2ca7e +b1cd05caa541c663b4d788fdc823bd8ab14737c280e590d6798e4d52f5537d63 +89e97e332ab548d80c857425f162b0ffaf55a60a1282873001fb665d92ab64ac +ae7012cfc85fdfb4a8756acf4cc3a184da16a0dda2d4809c92c2666efe658faf +20d6498c54339ed6931c6092714028f119cb31547a4aa7d26ad44b44927e05cf +a49e8af405ecaafe07aa09c54882dffc7629ac95f98ecb41a755c9316e190bd3 +4e20cdd3bdda05feae9cbbd0ab47ed5cdc4f06e62587be7ab7db05c53a049584 +dbf1bb9d67eaa45204a52576d64ed34e48d44d6afc2fa47542446f281306297e +62704bc59a2e6dc7c7673ae12f4b92938e6ae6b8e94d478c323c3c09e02ee338 +19667f632357887743d67a776a8d9456b7a2a786d5a8e6635bcfb164bab9075b +8f861d68e0656fc92503c5fce84f0e11433c55697248805fb4f1edb6ea57b7b4 +177110330059639ea3bf755ef81b6900998e59ab8308bc5c7832033b70ec6c91 +fe32d7b572c187bc182c992806de5f114f6c18d22ae06f9838bd998047e9adb4 +b96f3ffbc19f546e26b25979133468c929c0f25cb5650768ee65eefc35cebafd +c5142fa28251a30c7d55c045b882611c4b089ca447fc7423b60d563a2ecb7541 +fea426ef3a09216fc5582c9906330b2bad81037da092527a63be72d0b4aee92a +fc18689faef7b2ea073f5d0418493f837ff3132f423f3462a18e6072b132aeb5 +2bb793476d81859dd86d09801ce6fc1c49d229d6e7577b0ee99a7bbb06eef13c +b92be83af9171f5efa824f494089f8fb6307adaa001f35a9b8b443bab4d0e772 +072bfb23522218e5914bbe33ef29cf931d0d35184852f5a7f311e92eaf25eb36 +4c9228a295d26b4f9505e4364562f2be83048a6f5ef83a17e971ab2cc5b1c400 +3a70b830237549bf8b42768882cd7e42fc01b6fe76f11c9adbfd548827380033 +7ba966c6e83fbdb5019414235ccb0c6a1cff539ea636754986313781b22b4fa8 +6aa9bd99db63b3fe0a05ff93eb88350f88c34aa64f46f1770bc16286b604b91c +e5ddf215517d7fa87ae654d2c9d25bde5769e29098014916ad73ee293ae8075a +5a0e9866ef9ae43b9217a26b4b55c0cdc6ba843a866f34f33ac04b98410d448c +7f572dbf5763f68188ef5290d9291760f2d0c649aec97174c3e190d85d039371 +6b4751f53496773c583f839e6dbc3e85cf8240407b3a4840375d2623b931d0da +daf009d5c4b32c1cb7602836941ee9c82a44d63562300cd087c5ae20e45c14f7 +1bc47b903be78f5446a74cd3d7987a93a46633db444a1c2552883dfc3401a325 +08bc06e80742f351ab9634646d1cce56cb88f6dd27afc63a6c1c2478bae2c25b +b5bb98e005f87c871843f862eb621a9da52a5f80e8e4487b0152f71de2d9a859 +ffde5f5e4de368d54fea49e981c8d8d3cc1ce4ef729efa59b651b2bf3edb5253 +c73657b61a849a7504bac13b9afc36890c1133af38f46c8f5eda8fc7952b6ae4 +7f13911810c481d70ff73959225f6f33c5526707fc7fde941f6edd2b4b366e5c +830545c222cea151b8eca46b455366032d54deb0dafc55567722b5cb982710e8 +0eb9934b65c0d1f1815bbacef4ebf7d92289726641ceea5c4760a51a8e675011 +2751839abad7f90b9d8922037b7455e4bccffe076f000b58b633fbad91c6d103 +0875ecebea876bc60bee33d4a3d041a9c460132df57d167c1de466281003efb7 +60cd079d891a68d6c56af5009fcc436c1c658f50c18505e32835a2b9f13a3454 +d79d4491c052dcbf707875784bbbd2f752c5aa426dfb8b104e273f3fb86cbf32 +37846069c871ed77cfb273d7e694932739027c988e40093ec3ce437fd0af98f6 +911f395c09e36c2a837133eea486136910382ba42e16c4ca104d28f45971f53f +40668adf9a8d1e3fd63a0273bd6881eb97fe5fe5e20f9167fa2e0316a9aae5df +7dc212312f4d30cffd4af90bc148b83e3d7023159d3ac7504f1a4ba89593d1c0 +b935bb55db541e7acb7114a5cfd53303b271b2a73ba424cfd31dceccea6fc340 +3a8caee6c5cc96117701e76ba292e5584e215567d841a1e902aad88ae35ee4c5 +8cf986e56639d2f7f98ca351cb03729359884e739c8e320d1a6a013b81de4b40 +f3f47c6616f08f1d545314163370dfcab3e3b322609c9687917b1a92e32543b1 +01d806a4fb8df20d243cf949fbda43aa6b19620c0835826f53b20c942bcc2894 +f961e28e59af15a9dac4cedeb265e8c76ac58e5955d6410b54137eccf7615648 +bf112de7ceb29dacfee3294546e4195d7dc14ccc318a2f62bbd01348b5742b16 +2bcdcf9e99da6ea9b469a843f6e25f2bca3fd25df31b6aac5ead23d05625f65d +3aa0a5b3eb11ffe90c3ad18b4eee83468b47bfc3b14401b62a3d4fe68b471220 +635848956790befc8ff29cdf11e5493451d7495a0fca6b5d69646df180a3d155 +ff58262e50b6bfe31c04cc2677a7501d7faedec86cf1ef9940ee5c455e68476c +d5a913f8acef3f54f623fa826e507bf480421e750709898bdee8c83cc95f049e +8fff071dc1b498123b89014889f4ababdc30c153a52517f9a2f1be9d23510d1d +3f05738b1156b19f216488dc4753b9ba2d03b43489639153e4e9d41dc4d1d1ca +fb7b18d17981f4e6d99285ec00190abca88892008d6e2c0bc248f486e5c9ede9 +07fa7de185d67546b30103c12f732ae1535b801adb719cca30b19e19394e8a28 +1808d6465284ff4e5befaf9aa697dc7325d77efe470f3fb3fe0bd26dc6da6621 +3a39cb95f89f278f688014ec41937323b681fdeab178e4efebf51ac0f77cd4dc +42bb91e86c78281182727a4d466ff762af1d79d66c43ebf72ea85670f3c875fa +944b45b4cd4e3c32f0ef158956c67746f2e75ce387409140720f13b9b57272b9 +13ab457358acec6d9c80324db74ce98a32b7a798291b4f5b4eac36776b871e67 +6bbc377c9bb6891f919c57c1bc79c1bf0c89a316d54a12648341c4d7fc7f5089 +3393d060b48299184e65f7f64c83fd4d26c653db39896a18b9bb4f57351b95ae +6012db2b8384d0f8ad788c83922f22d9bf72fc3c3fbf7cd130e72193924590ed +92df8130a1b8aa60bb0d7e6b80232ee854cc0ef1f8fff9624f5bbf6bc43960ac +aeb2be3ffd36d387c77623532de84283fa2c044108abe7b3056b35116075e53a +3b0c18e75d9fd5d99fc9c27c9e86763887ce4132599f2305f8e175c0a89da569 +1762b0c789088d8135bc76d263aa48f9c0ef2e112e696ffaacb4f82a0d471ff8 +338802f3932094768b070b13e74f830ab6887508413e1780c51bf056427a7a08 +8c57d940761bfffd23de6191e84c1e7899f20f263cd51292565e68484752e683 +b6b1830c7e28faba40849705f870ca0ecfbd98de647bd157af13995a8629bc99 +c00c7a16f9b7da8820d4c1c7e89bf690de665792815fb00a7137bb670ed698c0 +0bbab2634430052f6214f7bcb149b66c3f4c09c8de013b9a20a782a704db161e +4e9b92d1463b243ad4739e4af96cc0609cf87ecc80c4fad0e178de938a8b2def +1e88d7e9b1ed26d1e073d76560c72d527495a1ed8b4a933a45554c286c68072a +58e8fc4787bbc1c5f5279c046c33ced74f723b09badeec64f3a103a0b224bb0c +9f2d2bb060dcd5318b7b48ef0581a2fdfcbd5e44326220bc94e773a19a629c14 +fe20b431850899e26c25ce4d86d5eb3949323dcbc18ac27f0e9d623dd1199523 +58f4edef9da71756a715c1cc97bf74bec06e547a0811ab31d7c4b826696c13dc +c3eb8f79b322053cb0c82bb72384e93199c39b8db8a73ff5f0d2181d3526af58 +55217b76d072e2bfc6479a3f3b6cc5e6dbe0cf031d043fbe0fba19adc73e7127 +4ce4c1a458473c2e92b03d913396e897777f55bef705f4718ff2c0360b01c3cf +0c439dd681e46d119048f78885ba44a80425eaebeeefedb813eaa491bb165691 +d381967fb20b38d980c262976573e4e7c6aa4041dbd5abd5dac5116be7586e4c +4c6eccf51557b3a48142c734ca10019d0a428b24bcfca0386e93f499b1a8f0c3 +22403f74c4152565d6dd9f7b8920d1afa7a776b96f6f81298c2d0ec67784de8e +3ce9c3366811d69690feacea364b07b7dee4a91be8cddc9916d0c78a393ec0f1 +e76d62a90646c628fb6844ebfec8d1c3689a363237c3c77bc4421ef8ff24cab4 +cc863cd90d02351c428bdea8560d86f0bc928d888c12dc36dd0fb647ebd6e929 +9444d55ffad2a9aed4ec3f1cd92def62997d905f43b3a2194fcc898ccf0d04e8 +d5f40bf54b083201ed058921ed110e1a3c6b83076f50d32004b4a75dd568fce5 +89e3a87c23ccf624695fda0eec1f6a68127844e1dfbb271e2c5263ea34e72427 +d1d2b1f3376228b34da080f85c1bccb2b775dd77044196aaa878e8c0dc279eb1 +6c4284e8598d2d15aacf85758cded62a9dae37cbbe0138100646bb912c07db8d +2a3647863d9f2653ca6515748ba3951baee6c3b19d462ba4d24f97b432ebe339 +607358823071865dc9332a531bb4e6f494d51c90bd176151310bf443ddf8547f +450186b7bddd3b2d15492ea2ab736278a7f3183de4db5241ba948135d6ffa94d +4ee832fc8837e8be42c9c1bd526cc91dbbe6fd4bc757b53a6707d9f84e07e5f2 +64e9d4f3bd5262bd25b0d5ec6410d616e62ab176599cd9b7a890697373396c65 +66d654277d0687faaa51ba087bab11901d2f15e57d628d96dfc3f51550f3966a +6fa00a5e5b68800dc3958e5112aab4a004a46fb250422ebd723a35f6f1dd103d +ab7ce688329805dfd275cd1f1a165222a763163b956045120eedbef739262335 +9843be6d3dd68572a7b6b596f961c6132739bca131d8341d0564a5bc8df844da +d842fff71e23e0715c73651a04a23125b550d7b08adf9e1eee8ab1f42a0a734d +6d987abef6988224e30d51d715f6cc50c8a6c6beeeafbe162c3140be953e644a +d330f5f89247160e94c1e60aacfae9ed72c9035081e3a3b7042caf763914e1cb +4a7659f6ccd07ac933e8611917dbaaa5275df052bc476170bde340b9a2d94632 +e2a2e866c652371fd019d2933f17a6fb55c987a4ec3f535012184aa481841321 +76cb0bec88faade6f4c44f1823556fc967cf5c9e2e6c1fb96beef20411f18e22 +9ffbdfe7244b7d91ffb18d3ad50a19ffbf4c93bfd58f0833e5e3b61985a0f596 +9911f317a190a218d98db5467fd24f05868631054bb8829107f3e4e198f78a38 +60dbc0e0babf43795871d2b37ea06cc408d5f10dd966522671dd1fafd4b8135f +4fc3f9ba832a7a00874fba1d2dc550abb3176bc1b04581eb288e28eeaf986d4f +954e73be0b3b13a50124ba440f2850aea9e05aa2820db07465b4a73827288c52 +445f9f569d7605939b870ea9a0e44365c560fe8401fbfb97bb9f2b14f880f83b +bf976fda030010673af65dae52591d89d0b525cd69e870b0fb2616191e4d85c6 +03d7d5d4d4f0127eefad30abe55c8b6d760d428c03e82d675f23ad1b17e27fc4 +28d1efbb15272ef1633a172538aaa8ee3c62723bc4505793aaef37eb4d65bca9 +ddafa86dec6ec64adc64a587b1c49a33144bd4d30eb2040ac8b0e16958bb67b2 +0256078f53827e15349a2ab717309b24760336444d953426cf1f88b5e3af23fe +99faf29ac75b0d8dbe72a128dea8a9ba7cd10d7e33994c6b4cfeff42149e90d4 +45f234c2b402991aafd3b6943d7f20d27a0c151f4c0f52c36ed42aeada19c782 +606a03418f41e1e381fc9c8015f51167f178f9477d3627ea0a4611824feec575 +b4fbb74b826339516f7cf36f119934a71c07741ba5becd7bc557aa0ea2d79ca1 +c9833e5c0da991f380019eb12847306c85372dfafa37f9f47d352beedefb8602 +66652d2679269c7c2837efbf52ea4230e5040d016a2dc3c516627a36d6bbfdc6 +dfb6684ed538c67e49bfb227aa3ff2fc08bbdf8736e64265b7e507b51a858cea +f7815b784d19a267f137a32e04d1c790249ee3f95f6cf5fc4feb15cab1d8898e +a4928a94e3091c732e1750730ce21471849d0ae8551b874a67736b6aaa9c38c0 +435b45c88f9a88a0089591cba8e9f9639196dca24fc95d2da7c3f18997fd83c8 +63186ec8b8d989c7212a2cbff1521a7a386333908d10a9adf3932295c39f463b +ed90b7e277f253b7d908e56e5c66e9652c4f0741a8cd33a033d66faaa28852fa +4ea0af7f15dd8d83d894e927b06d82049bfdc9a1d03411510a85a2fad1a82ce6 +04c487f97b601549fc84b99f0f0fea472eb57a505587cf518b1dc5b5010d876e +d950e22fb9e71a52be3c9bcb8059928ccb478f5280aba25b12ead4662b3da93f +ee3e64c893b43bd9e3dff3c8eb556f7ddcb46311f4d1d304b1993b1fad62e25f +3e42a9f265a312d5a4080b626e633e9600d2deb49a42b0093770b5b38047ea92 +4afdc62a8f08beaa94046ea6abda16ffe935971badf0766baca3570b9c210f16 +2e8e995d5d2706cd221eb90a96e0566abae12d5676a919528e47d989a0ce3f4c +cec9d885d3eea9c0e48d835061f1470bee61efd7caec371b5d34bb684b702f4b +bf8459838cb09e9dcf7cd565ed9af6967f4694d3e6b72481e715a14ba57a42bb +b00b04c4da5119f1a2435458aa2a67f3fd0df0ee823d68f02f7b8da95e4d44f0 +9d2e621a601096e21154da916c2b46680badd194b40e43cb360098afa4b56dd5 +c6458c2127667b1dc24d4a62b62960dd44b1c1c99e6776daf119a6cc8a7e8795 +013ac1ed5a6cd051b99e776d5bb816f2a116aa6bef9a9097e4db17d9129252b2 +0fca8fd25982dd95e3b82bf57163d4fc80eb0e2cfaa33a0c4098aa93556a272b +2f4539587836be74b615f69d26e0dcf569627bc0ad73bb0753ffef2e70d375e2 +6180dc26dded759be47d6962fa96a6688fd62c7ac9800426c20ceb8fa987695e +269810b31ac96879062c15eb4775db1e85b8f5217efb566ee98588ed45efbcd0 +37c29ed2730e9dacaf2b7f014714fd534ac6e377b36d65d7f156e8f94a821f0a +66cdc4358dafa30ca43f83e6f49dee43065ec357198029c30446f64b0b1a0dcd +d0eb3f9ddbc7ec04eb840f8a7c93c030513ccea208c0ee95ec96cbad833e1e1e +f62bf24328afd4f2c465a76290747311f4c8f3dc442d2fe735488d8faf4798de +6903463c10440c123368fec2fa1d924e88a0c1d07818e78ac5ba43a32fc76bd4 +1717e7f69d9e43510ce1034087b15235ac54f62cabc9b377b1dbdb19cb9d1080 +5c30c7f658b057ee491f5fb061abe0c9efe137344a551b1e3e57fd87bf9739f6 +986aee3d231eed406169791810c9f7b44836d6e38fa16d9538a57605f469f32d +3b6b93d75531b6d9727f82c6fc56625130a53fad2554e4bdd0eb3b378a06a776 +9ab915e200659bb08405270acc674e554dc7e44ea9d9f3c5dad7d539b35e3645 +0d8a4900b64467b2bc713222ec4bb5629727393f230eda6a156465a5ac3fcf92 +a3d78cdfacd2858bc5a85428e2ccc1a2320cfc2fd2af38203d7b3605d7946c06 +759ee32eaba0b49dbb4038204b9da86aa65ee409f8bc83e2d60d284372422211 +12a2f493d1ea85315b3f0c7b6512b5cf6e4d154db49e9027c870db0aeb1191b7 +89a2f60ae287d90f119508c1d8e729783623d32739b8b5e2da94d7501626309c +35cacb2e8b722b3eb24af9d45743a3b4648518d3e58e5daf1262b785b921ca5b +b31c28d9af8098efe16e4fabec6aa45249fc002b824e2cd0e1c27f241ad428c8 +c4a67945ae04153724c1037cb8fbbb98afc06f20daff34c41230f16b54afe069 +fc7ab3df49e431a2c49f7b5f08cd197aef53d93cdbc458476c4f1c59ffbc89e5 +bc724fece030dc70f4cee0850885d787cce7a30a7cb9e55870c45846538cc73d +32c4aeb7540a97544686c22dcf3a78c64b0217efc42241ca92e60eb1b508ed81 +d59c845a9c787cc8862812230f326fa5343934019745c73acccc74e63cf3dcd6 +16a5941f7aff829cd1fa19d3b928b5b3062df0304050f306c3d5d1287e00ad53 +87c47b2ef96ea12c3817f0b9548c209f311b943ea1b1ec83524b26f940750b6f +a3be10448daac3d8a39cf068109358981ea9febb00a8cc2e2cb24dca7d12b32a +839438105b71d4428a4f51a18d393eaba001c5a325dcc1c0ce39d566262cc4f7 +eae9ca0fbf3de7c041e5f56b869a431b42c39cd7b77385229203e76adcefa40f +f50379dea9ba42c5d8de316b9b5ed3dea70f05d1f5e3d9df2e95552e57c03432 +96897f329beb577f1441e4297a72b54d631dd833051eb560fade064f1b431fe7 +3fe5a11c8cc99133299d66ae99827688b8f3d930fb3688f09abe06952d9416f0 +e5ab4549fdb116a55f12f9d4b6d92ac86a30f70f872acf580a376ef0c15fe709 +fab3368f2beef2191ae368b54de1577b362cab54d48474b4e12f4ebc2c80bae4 +bf79da9f034668d8144adfd01bd8fa57a7ba882658534268c83361f4cd8c2bc8 +6700b4f2c4bb26cbe1fa5b9f84768ad7e8b030a56d0e54289ee900edfd31af45 +b019f34c0137d57ebced35b5f4a790ed9e5c8606e8fc79f368519dfffef85810 +230de4b8e310cacadd71c25b2251b88c128c445f637a844c86e61b307b65d671 +0069f5f3c5051ade2d5679c801b5df8b83c6929c6a28762a586c021af16ce3c0 +5e6662749a1f61fb9da9db81c84a80ffb8dbccb9b11afab2f23ede72efef51bf +5c40763bb814519f916897ebca46065f498843ce0a445e613b686abdbe010f3b +835d44ef84240444fcc318391a20cc4e6b35eac02126762a09f54fac592f5ab2 +3af1b5d456e2d993070e54106d4fcf652b7b8bf4063af63125f8cf454965b72d +09e60e0303d6f7bfedb0d74f64c5c2c2aaaa39b81181b7404e75d24143ed5e4b +b26bb24d0391d3b9238b9438ca7da2d72f57d1468d94b8fb1dca450132868102 +df8ed9193fe027a5d9c2dab2c4fbb675ef7b6f1b7c70ca830cef9a2af33d2e40 +a251673b1cda6ac0105f8273d999417b6e2691762b21df36b9432bd8502765cc +d197c363a4f8f480923dfe221c8f662394d985c757b35c5cf38ce9a41b8f5d49 +5d7e37a664dd2f02029baaabcb50d0202520e7c186087ad57ce25fa7aff3c75d +62f91b835541ef6ce2274b65b160ee4ed34c34e3fc56093a148bd8ea42c9aa00 +29aba2daf636818437d518639911831216ea2eae9207b2ebcb64a87e904b2fb1 +0712aadd56a7f9ede16ad8338ccc428a068575e9240e7c347ec263ff95363f54 +f72fd106d2f41f5116cb4aba51012dea7518f7c2199ac166d530024ae4fa0601 +b25b49c8c15309ac5f20feffe97ac5d9692e540598aed44e9c7698dd6cd93b9f +4115faf59dc237d0c219cb0c6fd2848fe884f4068699f1c3745310e74ab2cb0b +a5b1df22426ef6aa29f21737b4c6a22eb921e4d20f93c81b0ca129df01b84570 +10afbc5ba3ea6cb3287ea4cd9d270113f54d9b6f0acc181a5a712cd1584f5f07 +91c6240d2ffd2e6f2b9259ef5ad98676e1d883faf032e1f347dfef0243e77039 +aa1977721f7f463e28f29e703f09f1e3233df46e2b44fb4a10d344eb617c15fd +6a2b7111e869bb42c54b396d0211a50bc52e142b7e36bb33bae4147660956826 +d5b7b67faae527adc53f5949addf37cc683f373cbda8879b95da65cb9ba36269 +3810e526c932c95f2739971903266e70dc8cd9638352e299362bb4682ca537c7 +e4602d29c4a068769e1b0111b2a57ecfced70c1b8f3305b5774a4023c629d2a8 +41e17e0fe040b3c336fbbb631aa54a8d7cc59d8d61e37aa4540e6a662bb5825e +c6378b44009a90ce84e704714c77a2f924684accc36e18bf61a69bbc4a8e38f6 +2b79081ff18545b5795772fa7f9ceb2e371aeb9daeb631f05d23c5b03c279742 +6d3de02eaa0b088724261d3120cfbe0a5cc065aa39761e63efc234f75a2fe889 +6cf91704a143baa24dd9b90f85b506fc8d8cd64a9f61994c04a59bdb9ea22c63 +8395d6c55a0dd89dc4b35ca248e4cba47952f91e70dea6e3e30c581653f4f053 +6c201b8ac0b0e1617c50fcc94714ad314988c7ef7e4da05e5d7b40e4f730d98a +220833e8dfc6543dca62d953e69e0e92c252205da6dcc905da506670053c53ee +8af9e87ac6c94dc95816ee046fb4001b6a2a2543a2a856d01fa4d1d112305253 +68a7e1d2202e525daad06bf38d89f62e1d05a6a34d2827fa7c88cfe2e6ca6094 +3226cd7ee42259978a12282b0821eaff9b826fda667786da6edb0e47c7900eae +b5669a10ac23a003a6fd4a5144b3e142e37cecd629f003e54a2b2e4a13dc9ff4 +24a373d781596275f189f6aabe3705f6c0221a7509f7cef0857283b14227ff67 +7693ecb200fe605611683cec16e03a94a708efa7102c19b2b4b97aacb0961a86 +fe352b921e7e96eb38c1f9d69343e5b53e46ffb93f29481fc044152d106e630c +11a97eae2cfb3112a3df380d2e727fd47621757f031aed6958853a45149f3675 +f3aac2ffb106fde207bfd1f401de6ee5b1cd8056dce3984e8b8da0582e2af2a1 +698e2317c5457fe593051f2c9bb04995a101d32dffc01b17d9ccefe70328e2e6 +e7414aafce11f93bf32de58c9018d8cb7e3e70f836773cca06156065c08ec0d0 +e9eff97f99e36071e6a083a65ae3da65e7397609d8fe2511b31e78037365743a +5cdac255d2cc0eb883dddb14829209f94b54bf21c8b4d2503990f919709f1ee3 +98d088a5352821e663ddf0de5aabe6ecae2cb2587672c6e949dac4d35e54824f +352409fc527b33b6e0aac0c874c91150385b6a6880a618acc83f983d6f0bab02 +99d8e17d75c3df589a1799ee3afa4eab066b31307519d6e578439cef7e86dc5d +f201963a9d3ad2e522bd37a2b8c0204455dfc7563c1ed6b8b56d129b69552951 +0cd377ac5cfdde96a1eb36a95dcd317ed9765887e06f0f361870a77b07a9de83 +af59f246462c17470c61b1c096207681af15dc9666b9019309b48f88b6bf6694 +226e95b528b15aa75266af3ee94e5f8bb3a043fccb1814dde8fcca408c7272df +71d074be7964a45daf90527419e9d90f1060dd56cdafa123010e19222f2b728f +429a7cf431c7ff5e6b5deb55049271da61bfaedf66e879ea71fb25a8f257a8b7 +c4a45739771334f8d1c6ee77610feeb1f2310a1fb9be5d6ef756a857fe3fabdc +2363cdbfe279e1d3479f9e5dc00f6d383b483bec8dc9e2493e9d3de736f62102 +4aa4c83359c1206174b53ef7f57ecca969ae0419515a011b25801f0cd78f4bcb +fd7d6915db62c01e742de8dcecabf4cc4cf78c4326f3a25fff2344ab6a845322 +e03ead9ffaf9b076a944e83b34cbe69204bf3ef4178ec83137e48a0b1cad4cc7 +e9f8cfa9071927892bc99ce6649f88f0737c3654ed5bc8f810b7eb758a4182bb +38ee81662ce668af36963d06cef3ababaa88a0c15e0c1bd2f7ae91d4b6459b8f +c77e0b1d4c667aa71cbdeeddf3a98db575629453876809ebdaccd9028847bbcf +37eb7293a94e6914598089ae5f6608da728376a82af54b75955a4235d301f4d3 +339d7d6ae9c51b994205dfc967546fd90e7e9d9de625262b54db62d06892d390 +fab04e0f3e3ad842e386393ca770e7765514767d132372edf671cef19cb744c0 +f47e47b02616301f10d88dcd96f26f5f5dfcf628f4e51c5ece0027762b2a5db7 +e290dc27ec46a06c67f7d2ebe5c89e6b4d480384a948ec723706309681ab439c +f2aad2fbf13e94e7c29aa6c5e599ecad003678ecdfb0025b18704c5f4ab22ade +c923993c2e68dd94ca0d61beb149bc6de663fdf914eade9a79ae45eaa92000f1 +79bbfaacd2bc448a04f369048b12778e8d470fb718cd6f7850622365986ea0a4 +4ffe398211a9be44f8fdce33839a734175b2bcf2fc34ae42d094b62b84c37536 +13b8f5ae049701f97f50c64010448918413644dd9ffbe58033756eb897acd76a +20b979824f42515927659259bbd7290c17548b62a1aa85c50fec8be1b9bb2386 +396bf2932b1b46995859e969799c0a9d963661f7da110f22b75afed19d5801d2 +1bb56bddfa71a0e36215be4ea02e1c26e86cf8173865a789a2a01b7e3071347d +22a61cffb8dc2c64d16974f18e3559842c12057f439247c242d16df6b694e62a +60ceb15030c4cb240028b5ec3eff73e40265d5dfbd27aa9013bd066111c1e1fb +d81af0df2a3721a8aa532e00b5a35d1d17b0cd242670c0eeed0b6710eb626d71 +fd68ac710c3720dcdddef8e6272c3c21cd5f6919c8adff0ef9fb59eab88eec0a +9e0b5bcc34055fc76766781be8c88734056943107b1f3fc9dfccccd860975a64 +d22cf95b353942b76f7affd46c23b66e645924567dde13dadca7168b0c269038 +21c696d41524b35c11c206a3e07864e3b16c631ba69e0dd5e48189d391cfe6fc +09cc9d9b7b9e2220ad67698201ce737c976fad175c1b4974303e9fc9e65bcfce +bc2e4250ac38f353dee74803cb8d31d8063c704b48ff4a51d0305b03d0aa6018 +ac60d7608ed76e5c82687761d23327e9a91c785baa5c46323b927a465810e889 +1f3345b24fd5cedb1d91b0d9a8a550c20325ed68f718f8b5a3a5b80eaaa714e3 +f143c7447b351c09538381c92dc5fc5b6c8dc32d1f4733643f310f3d534c859f +ad7bb41d81910e85daff9653b05572588e6c364da2cf3ab54e40e836c41423b8 +59a408ac47b7510442720fcc55ad9b36b5cb3d8cda8985c58b1f8ab5e30f8b50 +7012798c1808fd210dea2c08456a411d61210ddf79df8b115c3c4c6a143d5d0b +ffe07f4898ed252c987614a329551fcd1955e42fbaf50dd244476c361da345be +c9d75fd21070bd8d4ab2b4bc7fa7ac347f80ac6f2e05bb82da0ee875b8db1216 +44d11538ec6ecf8148c28bb695386e2b3e82cd0f6cc4259c71b9d99300b82d35 +d82c1a0a37ee81aa28bf49d9969ac48d3c206db29a4dccd2469122fd22a4b7ae +e5b9465271f7e761891754f0367b0fbe0edad43349e08e7a7725af6a07172346 +60a885914ab45c7dc15281e8b74a609e8e8415c54849d22be34a202086a41b5a +656b97a4de86c76c0a3ddaa353c340a1d6e255326469a3acfe3b0b5971176003 +18b5ea6e6b158b15be30129c71bddfc905d3ccea00c15c749db2a03a92a07e7c +c11d6e9acef239a1f4c3604d78ad95d49da8fecd55d204aa0d04943a14cfa154 +876c16ea19735daf5d3e8b9fa8bc5b7e5e2eaf93dac990646726b30a036b6e04 +3e244b84b61be674f890baace9839b1f5cda4627929cb6f36edf01cbb3e81027 +68c53867f003479ca524e16d1560ed1066a37a2470673767e27d159bdd005674 +500f294ba538a97d8d28689fd4dfec5774319451f9c0c645e6885cfed1146086 +7dea0fc99c1aa2db62560d1726bc22c775ace95128c2740ee70c9f5f17ca1570 +4bb31182b8961338b855e3bdd3d28c448522689bff87d7020cf6ca2423084f0f +bb189ea98a72b1a5318c073297b650fcd0ea7296fd42d0cfaac13aeead77bf60 +ae7b09fce0c5a44e3a5086b5784f5ca8939633441f18f6a156e31ea169d1e383 +0c816ef211cd3a8d9b3176a1f1c1a59d84fc891e5ad2fc042bc45728992f2f6c +b1365d9333e9fb5a752933294cc40dca947c3f9480a6857d1adeb7723678db0f +3e0f3142b9e0afbb957562c2c68afd24ba0765859bad245038cc29c86c53a1e5 +5d8b84c51b172e6a10b537cf8c40d3142eae5c7f09ff0c44ad0ac62f4360c027 +d8ff1da68026b005721ecaea79eb353318b3a4d607a46aec50a66978e46b158c +feba480766f7c4f8069b9755d1221cbee4e9bb57d47d34c5353a97e38ad43931 +fbf12d999559c5ae4bcde5bcc5ff71aa2bd18032b6293cfe750ccf06918c6eb2 +d48862e8634eaf5964621d1c10eb5a33b89ae41b8f6410cadb749e31ef4eb313 +ac91005e1b1f6774c579c57fd720fd43a3a9b1356de681b7424d423d9f8cafdb +7d060333ea73d40b409811a5b55064a125ea6624ff41eae942c3233fd2cac3aa +24820d1effa953c9cb0fa946a44cdb08861bb9842c562b7e0c8f9d552c9ab199 +656da665dca808ac17bd4f24792f439e618ca5c4cc476ad50b6927970b210627 +1c6f3c8f54f244f52c13e459d9ac2f7a740f5e034ed34b2f9f94144c2bbeaae3 +0a12af73174107c7612749cce08aa60684de775fc00d7aa8b1cdd29a13893594 +7add75ac2ec637f412b5aea278055be0f74354e7cc45e92f2644019c109f6fa8 +4bad36507c1aee9c0ddcab7b01f38c362c1096d40557c080e6c5ef3475e18ea9 +a883a427aab5bed8c31674343c35d741d78679e47d74cf3f76a353fd530b7815 +6eec5363f684749dc8393a049b257ed0a053b711c9e526cc48ba46011c2b43a0 +bdbddbfbeea5499b2614a3fb45e4ec3d974471aed34625c486e80b544cde1cf8 +700984f320dfc620a6326174f954203e797d4e3a4e667c7c513502a147e306d4 +60b330c60e36ae16a3c858cb828aeb315ad101c94c399c4b6a6fe07b5bfbf168 +cf190fe00e8b5ec09057a6a13bbfc042f6d3497e832dbaee55e581a63685b939 +47249ae8f6b41b26bfa4b5a262d7a8417cba81ff5d7c4957831cd66756272c72 +58b4f78482f7079f9af06675305601fd97f1aa025ad9aa2ae18e92c91fb295eb +c94fc79f5e6c274f50649061ad9363e24a34c6c09b13c646c3a180f97b70042e +3a0c8fa49cd925d1716019aa4c09d78144c311afb81f7bfde6234f313a235eba +4b125ce32a15c0a099fcc5075ba0e54de3359612f7b61ae648dfb92bf9f2b1a3 +8d65c7add1ddcc8ad9d261cb262eb58d037341122d796e24ca3981188a288030 +70a22bc86d9392ca394f7a679789090018ad124e8d2f085f2583f132d653f445 +66454ebf6388029149947b37fbf25338e5fccfecba985b00ba81844d2a2c212a +4a3989a908c55dd505c935c6d23737541d5a9596d601a39b6ec8d6f27f182020 +4ef8957b2315de341dfeeaa7b7916e2c7905c65bb6c2f6ce1ed8858c04cc4aba +c8c93e5e3e36e04c13e9ad207430d50b573ed11ae96d5356ea08478081e28de8 +badd76cc2483747171c9817a1c291d3dd77587892bd668f95662a529e8daa0b6 +18c321b2e9de74b17026dd115961f19f263073a8c611861dd8b54bf9b7d557eb +f4f365884b9d8a40e1d8cffabc5d0748d5c2dcca4f6cd68d278a24799e45ed4e +e37897d5cabfb4c3529a51e1ea674a4190ff27db0418c276c6cdafcdba198924 +1c0d8cca7a6904f0be4273425b22d1622d8a98656b922c7f6440cf6e282e092b +788853f7d5c1a50ab0a3579fbeedabd117c58ed99debb2fe78841c8e22a4bd05 +55c7f6d1e9cc5e82e7a17bb0e32d6d31c6ae62d9d43ff895d5571f5599638d27 +c94e928b8134ecf29f5a5c757f97cbf979127b4cf151fe616fb1eb3aad5c686f +122f2d5728f57dbf5eeb9311baf10ff11519b55ace1a54c8e62925fb8a62404f +5aa07c73eb62db48ed398fe47fa8b55670857705bc1bcf9a0f87cc24c546abfd +a9a2425ca42542c3eea4540435c87ce1e1bf2d2db03d4ca700bfb45620ca56b8 +8694b562351492d72f2573e78fc49cfbe8bc7f97fc824d66d6075f3d6fba281d +3d13db7234439b84bf4bbec4a79975b6d62f06d38914c796ab0b9f29a87041bf +930fc8e339525c4d3a3e9018ab6e2fe078d0fe44e58390c7cc6abfbabf5b97d9 +be1759463b912b82f6efecf1ee11ed287a001a82818c81aeb68446477b2441cd +42f1c07b0894a2485f01dc3e30fc70e77723a375172645d815646c6d4219e353 +f707640ea4fbf60a39a1433006ee6c5c92adbca3fcb1ed94898872d5feab31ef +1cfacb84a61023248de9d9d194ee1c8b3f23d30cc2aa5e175bdb43c6dda57b78 +2ba89d35afb745b1b00d0505338cb15f8e16e71b6845ef2641969e0513339383 +c98fce38cefd0c27e9f2d7fe7cee20a72136e773a1c7875de2ad57955117a5b5 +f92ede41633d4402aa858c3589c09b5b7285b5a27760bdd1fac8e71464002f35 +1a69cd54211aa34f80ced1b946740b6763533e9cbc1943607a07dda754add97b +086c15815122fff32294645f11cccdde33da11ad142a084b333300ea1b571793 +8b47b06217803bd7562827a110e2f1c53df51b0df8439b8ac670df3267b6b5a7 +a41eb9b332eec21c8abe1bb342a1ca110f02b27e86302930abf2e9a6e7068a65 +c4c7e4191f0769c1397e76ac756b7f1aac0c313d6ebbfb3b8e2f24e249582288 +60a798736066f912b430fb4dd0e44465b14da9915e2aff301761330e545dfbe8 +40dc8750f1cb8504fa4090f42997c59eb9ff2df314556c1b1a1df15043f1b0fb +b04b8484e8c602c41c90b30ceebb9a5e14e7012bf39df8e5457e465d80cef4fd +b26bc318219138ad4a393ae35bb90363809a7fac748841c8d7f730c15976ed86 +2dc60661bc92b4f1e8f2295dd12731c0c3c24dd9634d144fae5bda385fb82b95 +a24e19e108abdb3c58d3f47e357724e2c03bfa526701228e40908d388fda1d36 +a1e714ffce207b09e0a3c3e8904b1e5416f09a6aefbf716428449612851975a0 +ccfe526d260f33cf960fff61fd23963cc98c2a1c717ce18307e796c7b6e66c7f +e93897db898a0a202f953ace1a4de4e87e2b6bf6b69ac500a3feab79be7a9684 +242b4c6853de276def584738a08499c4ed070cb4a824d237f34d34b9e6a1071e +cc635d0f493f2712fbacc401e20058616ba171ccf07856443184b3ef164473c1 +da0d0c4dcd956a031bd5aad2c93928ba33e9543290ba8a013f6e0a0a75e80f01 +cf8a62880495c869ddfee64dc0bda4ae69047d8e0f31da76f940b4a96820980f +42b18f5f3c18112f6f0a801cc97f709f5b61ef5300e8b96846a5d08426823966 +d7ae0f6d64d4a246a92065f3106b938cc338bd82e1583aa5a80b16343b66e832 +d5a450a6472d909151d6a91ade8c18e8c5f2dd309f87ae24439c1d6447add553 +fbb027eedc4908de67115c73b55cf61daeb5aad8184cde825df54102840cb333 +2e3e4cdc191435d47d4561ae1a1a5e253d6ae225b1c762cd2a02d1498a60dd24 +1b24b38ee36f8736f5795ea1bc43bfe91a055096a18cfa4bc87bb4d9178fbdb7 +6cb0bf8a0b32d4785fb66b8d96116f458c22ac7ba03d20c92d033d97a4d71254 +a9cfb6129e6e1189c4361dd441f2c4a50e84b72696c739c408e06e39c6924c2e +9474b3838a97580dab16c36e2deca19b18df45fefa6c19bc7d0f6c97c43b17f4 +7aba0e4f939aefe105208da38b3f9a7bac433fb74e092c5b9c0144020b08e36e +b5af4274e9fb042d548e638ce9586ee70adc47eb9062d602c2b440a2f9a3d36e +6bf3c2528af59ecb0532f95d874e826d11be970271cffae236cc59837c01cdbb +d7a4b601c2477b00ee8eadf5b9988b913417c8da34654556751ccffae5cb3647 +3f202f804efbd4cff8bf3865a670172de209a55c2dace716298c3f430b2368a7 +d13f4e2ac12972af1a816a8c7a6b17028a30485d93ae51cbf3858e9673934e5d +70ab23e5edaa6efe7769c795ee122ff9c36abfa9757d1d471c64fd03aec94f3a +fd97ff2eff4a2f3fb7511b1fff1efc110b6d8695dd243ed4f6dd37b4261c9ef8 +cb40ca1723bd981f4fd55cea6c7693452dcf7193ca391b0e3e08cf71eb244300 +8353d1c61cdb48b637bec555a3fbe251802389cf5be2cb8487fa09829ff641e0 +5e8786806c69cc36b7c6dd02fae5ba18d7cc96d895749697b2e12dc30087cbb1 +37760e8cc3ce248262b56b1a929896e360e7b113f62d7b985321e1c448ccf727 +c03c02c5bde9687333db5c20a6cc2d3c23921604870398c93e80d96d814e2be3 +58e08fa58d452423a3b5f24f82ed94852bbcc1b10ed51b5acdac327a16279763 +fb929e0ee11585c31c72b27d7adfbcdbceec8be5c9a6e6c8902e1701d5228758 +3f4d7b37ff6b440feb614d5b0417d0f90bd7c52c5b463d3614686c00d24b217d +a8536abda84838dbb94cd8d604fb7cbba78ce9750d24b39a3bebb924986fdd58 +eb06b101e9dc4b9209976b686712437a4deed78b94597dae31e7b65de2d47efd +37474913ccd9e92a83b7662a75eb8292d264529a70bea1179ac6770990d09255 +88381fd5662f43a97596ce169132714c7b9de7260bc7adb72d0ce1185188454b +e56c424792feaa26003de30198791730d664bd87a1c306d1433737e9eae7fbec +353a2a64a5c6c65f27a2cabcdbae17fa6b0eb4586b772b3573bc196449558603 +52dce0ae289fa04bf435952753c4e9912a067c753214ec4a7e0016b352cee87d +74a3bddbb8ec7b6366e26d3e6ac39b13d67f8cc90a69167aca42cc34ad1e440e +40199a745f4b2c3b98b02eda6d12534d894f076187a3154bfc166f077772ccfc +ac967de098e34b330ce94579bdb817ec81eb346be37f86e2c67e1988000e616a +a80c4c53262534c8faedfc1d92aac5590df815fa75cea50b0c6fb3698c1ec424 +275eda76748e7bce9cb350e68597fe29ead3d117e1edd0f898b26773d153f2b5 +864d3ccfd297cc32d69d858dd346f7d21d562cd87858c42dad22efbe744b74e7 +ca635959bf4a7bb66a0cc7295cbb9c989189a9e88c7f29c0a50a3532594bcafe +3e777660c49d11ead3ec7d8f476608017c137e13e353157c6d780be58d1805ca +53d59ca583803616ee7cf5396da30c6738174630a36af923e62d66fe26766a38 +73dfc553588527671d42df6b533b4a1e26f83c3ee112ae8a11a84221219ac73f +ef992d7aab3ed6c7253170527133fece26bc6e0d14af614d090f2c87159a82bf +67de34de35876990d07a35fdbd3f9a102ce634b414d100a53f7456b1f1431b98 +8c278fd7ffa8534fad470e9c86b4afbffc33534a41c2af474b11755df3ad59f5 +9f5fa36cea97d7b5895cbda6e6cce4c2048007fc015a615ea0be62a674671e8d +1c2ef991040c5345fbfdeca092874e5c4ab2f1dcc362fd4978df68dc934ed8b3 +0cfa75eb0ae75c7eba5af1ef7392f474da60325ae50020b3fdd8f38c31d4db9b +e91c43c39694f4e024b4ffab3995022be0ea865bdc2b0a7781f0bffbf705c1e7 +4ae072334cf1c8c4bd068c798352206b60c2bfa874084b46d9fc60b2b657a692 +55aadddd4b5838e1da75b0e03fa70023f5e9877e3511b1ba17a1005706e81fe2 +8de6dea3db4cfcc23e2bc85b50aa124b603caa38793c89a4426ed522b2185484 +1c7d02e06ef811476cc8be824333910ba01a24bc86b526e92f27f3e897729a6e +6f899fe8daab15e896f4f18286495fa31da933541183d1b58ea0e661cc1b1c7c +2682380fd3c90a83fd8cba56486633d1ea11c17d374e3138912169bac944e29e +802823f276d7c3acb13760d6b320ffdf7d76cffb65e754829c3528c92a7c20bc +90a2c4ba30db4ac88fb7bcf3b4809c809f8f675f54dc0d2dce6583b668a2170b +5428e757dfde5c895d0943b70c5b94ef47534be042bf618690ab1d279a584745 +074e6232993c476211389e853285e82a315e54f79962b0bb273dbbae6f85571b +0654ef44d6f5159fb15d30b0ffe118d70ce4b944f5ce1e5f34d3556612976bcb +3debb1138a33987d0611f5b83ab54fb3cffdb2d7d5ca07effd686ff7d5321602 +dc88a2519de833597be382edd2ffb4307cf9c414fcac6bb025a83e45dbadb191 +4a3bdeaa526277aeb0c9631bbda221e841ffad8c0b1aae9dbacfc288f69514d5 +8e3bbcf2485c6c2f176affdfe388ff3c1903346f4ce0567bd74cbb22891b0fed +1638c8ad22b9096504c8f3242f305d0733862af65ba9b995cdc728418bd64479 +789fa7f9065330600bf6bba68c632ddcc682200ce79eeb6d6b6432a62615a5c3 +95ec2b95ee38d7eda9e52675eed2ddd40d95b33d6e4a534d0035810ef1633f6d +38d0622277ade2afcfcdcdc7faa278dfc7bb44549253fa7a6d043b6803c8ebfc +3f354fb87b8327ea5101d02f94c0e53ae18aec93015b6a42edd50164dcd1d6b0 +cfdb1ff2dd77989f1b2e0ab218c213237b17df34118e0fb4493aacafeb021033 +0ca644763e15387071766ef849369eb4e8f95c175eea776cfe07a762f5105cc9 +477c0301984dc63b7c835fc2c142ba9a4a0bca2eecc07e10fe9426ce2e8504a2 +0d0d805211a6320a6b5cfca260276cd373ada18040cf611ba9ba8c28755c6037 +358e0325500c47dc3bf5578c2d4fe86a52cb1ff72491385f1bbb8478abb3e163 +ccac167c02824e14ea3c37971adaafa96c4bd4107d83c117123845ea7f580478 +c8c29abaae852ce5894a90002285f2ba1348048cd017a8a13b181493422d089b +9bd7e5afbf9677111b349ce5a4bcae47e8a5031d610836f97b353d2a172b185b +e3581f9c098d1a867f93f5ba7a6b94079d6d1f8034d9188722065e7823dfa98f +7f586043ad26fe556d42edc69f13a2e35e84b671666c790dd9863c6de527d038 +22bcdc28ed75ac9e49853b002e532e1aa81f7623026f868370f551cd216d7a28 +f6d8930699dea6cc0aeb110e7c528234302fdf6ebffbc2466600c22dc4d9a26c +5f39575df3cb988f28059d8636ddc972b8f6157430db6c44f302a697d9dc9fa7 +6b897e4b0891a704d79fdaba6d423e08d1b3f55fd06b102ac3c9041c96f3958b +2e07ad5ae32c892280a9f9d2a14744807a0450e08b48e50afa0542b21e918c42 +2b727a55998bbcf5475f3a070adbbfbd73528c075d4bf216b883a95e6864734c +6413fd77eb3e23b7f252778948798ce6eba9fe4577a16131ddbe83822d63d594 +a74d6f342689bfeb0c2a181ff68d1f89f60e0ca205460296b964a014fddc47ca +feb7d54a37d12a5b63e23d75739056994e0fd31ecccb5bf0feea2baa0b849100 +7149ddf818e66273a8197642ac4173cfb1d51527b963e4751c2a2e81773b9d68 +6625b1f96856d7973a424b5be00785feadb8415fcd8ad48df45526440c00e383 +e8b64e0db524c954ee237ba46e6d187b6579c64f71b144cad3385dce3abfbc4f +f7f192b7d466092fe285f398a16e99af97325455f580954babd8136727a36fcf +85ebf6da403860efc2b652f88593be1e290cc7156bcf17c8457b94c7a0e53092 +0eef3887675826a9287767fa9d02d96ec3480dac6e7effaccc61ba4a938b7a59 +7765b1f75da4ff9033f2abed58eb156cc3c7347757e8a3bae78a72f78cf1712d +cef37e244ba7dd091255dcc9918d4a913ce9be41748803452366d51c6cc2592a +82596434c2b52df0d576cf72acd5190a80968ca87ef682d31b2ab62f193b59f2 +b2c6eca05e923c6ac82fe260057c46a8ac21353b2efb7cb5927b313c347e578e +fc3992db388c5e7c95d50db6cd182e1a83e28559cbe07421c9b753310ae30bcf +b5a2224ca3e61aa93bafe3d9960b12040d43eef6eb7b8d0cde362d07c265e438 +3c4b687c7e8fffebc9b151d836b27263e1a1abd30abba586856ac746e27cbb0b +9e2bef07cbb46f6b860941fdc4f29b305ac0fab8a40971daaae1100071335f5c +c52172f77c937988b6278226c5bd61d84cae4e8f53282a2ed2c5c9c3b7aa6922 +824a3c1d3931abeddd511403905975dff8656267a9592f2a42268eced1167092 +6681da5cecae8dd6b9b30323450ddbfd25b5b4ade761346700775634097f69ed +dca14df35771e43094be84936e11b04288e133e6aa383d4f9e74504c6bb453e7 +1564d9e47e18e6c1b8b4f744678615c319c79a5349c5a8ab48b756999196c18b +ea39b341dc08407668f4e90a689a41385b5bf9089a9d274a62ebdfd2832e3a9d +76e0de531f92b5d439a0334edaac7e9a117193338e14d43bbb90239f731625a6 +170360c4104523c35a01c0db6b9e2df0d0f829ad251dfb5f3150add33e7623d1 +7eac2e4d5aa85144069cd68ee17e7ac32b8f23c1f86f959a302cab5ed28313d1 +8b4a6751c8f282a4ae425966aba0a6fbf2d94a568b8f99c9ca31320ba611bc9b +2d7eb955f346518f6433f38cc8e2375f8f9190f08c63028dfb3f113a94730348 +5665d7e5fbd2e1004c802a7cfa5e3355dcca251c339db8518b51328a329e850c +6a358932028a23d6141130fe40be66038fa36a79d8bc5ab63f1922b034d1719a +072ec934f6830411abdded35edd5220115bfc4acfc645aa50d288cda69dedc6b +b857107bee7f46eff22c0bfe99f33bf802b635ffd8e56e3d22d86b63a01580b3 +7afb77837dc81da876959ca4bcc9d4290da12482f8619f371bc43556e493a41c +94e21f6c2fcf3f5a29602542d2c1e26124ecdc4a157dea4a607e6107d7273c08 +cdef769b8135e056e1fc375b396e75c17adc81448363a4db441f781c4c0f37f7 +ffbc3d579950ca70c36df14ba999269d4c8f04009b5af01d56686d2650220aba +447c72d3a7ec6045cf5da21a53b5a0c353930172883115e6e4ee81144078b366 +5b71cb8217823c1ecea2c15742573b8a7ec14aebb34311acd1b54d00e5a1c6fb +7c165de680ba7946b8e6bf851b59e07193da4bdf9cf41fcc2831391db9645cfc +0669ee318fddfe7b7d6bac41f3d8d0f5ef94ec3bcf0b2b63116585564c8780f6 +84816af2bd2da87a6b3bea0a8deab7b1fd5b20e4fe886455aec4c4dc88d5d90b +16a59f7945c8ad75c57a72486e77af9bc23f679cd2129dc1035dc47c51de4352 +88886b8fedc2a8859eab0b8fa9f4f808ab33b7e6af07d8d140410436c4a1122f +e31857b50a92b41e859399fd9b8c89a87ac60fd3144ec4e0e9d34b129228ffda +9f29e2008aa04c831640b33904dc8d590755977ffce4852c0cbf781ffa3e2906 +2e21db5b35576616d7eacb4123860a3300a9818e84451fcdb25cc72e3969a57e +0983df28e925d5863ace5f0807ce88e8ed8249953095ac7e658e027b316e9735 +d9635ed68eb0ed09b01a1416fb186701e360776c60b7ac69f24080b39bbe2a18 +24c7508965a75ba8f4429bfca80f77729beded5d730b34224d145de50e9790ea +2565cc9aaeb28e8753e57f44c37336eda00ddeb35c55a842690b8b5f7ae3c7af +7cef298e3a89958c44bc36b8699f17ff2974c0290e56dfc6145c4c16c4fba97d +cde9db5736b710a72cd6955d14446cb55cb278ab6415c8c36fd8bb42490c8490 +2ad95166c31339bcc399d923aef5e822671e95af5533e6cb985f510117b61a69 +1bb558185861c8144bd1bd7bbc7d1daddb90282e41f78faca480676bc820f2b4 +a1ac1f1d352ba602d34fa17df32dc807c97d60b3b6ab73f0b09d6db9148c2dde +6e8efde402e4a4253eb22408d1fcf604ea0fe37a03f8473c9beca07cd9f73742 +2d86fd7a5bbe8f991f1955e8f18682214408b3b2c94133464a77216d53c2382a +19b3d72fd99501ee0ec40e2d8d257b540115976a572bdf05a7456e1cb58a2471 +840b1ee7f5abfd3204b78844336f6f1ff17a15d0acba88808e10415543d9d80a +488b77395f1dbaf5f442ce53ed3416ef871515d4c18a934c767ca7179e4f6826 +696c0d71cf0d322a02325590640331913f24ecd82ac5a323c040efa99a5250d3 +3b0a4f8b6fe900613c2c0667006fd29d442c9c0376bbc75e3c0d5763883b3a21 +a959a4eb220e3c284d50527a90f4ba9e9af3ecaf042b2be9c8a38f4f29a05484 +f44d684d5992e50297efbecb0236f5eeb69d6f2eafe9edf2188a610f96a1bc4c +be42896cd5fc2e7d844b22b0732f10a86185eb1715bbcc66ca2de661ee9aae64 +0d61e3f4cc9c0f174e37451c5104e006847a5d888f7a503300c4ce84218ab5ba +235670ca459771ed8c7bbce2b521d5992a7303f241085ac2e0964bf0f229b880 +6113acd402f8a90922c1effdb39ca410600e221afd8035fd0fffee19713448fc +df521db2493e65f42fe66988aec59bb342e7d8d9fdb9d29abe905ebe136108b8 +1b085b0b5790c2f3cd9d90603f19cd559b9876e75352ba502dcb39dcac2ceaa4 +861712b8ee817a4d5a7b8c5c66b0ebf0f51c54b8aba4ca29210370b329bfa06c +f9c28714e4dcdaf7b449efe49fee5636cc73e7b1df9dbd4a541ea5b4b84f1909 +8a73458088172bf3056b3899f3f7a713d718067e93156c975123a4a22565a104 +1c8b6308f091214bbea51188935526e18eaa0ecb71186dbaaa47c1b9036bb7a3 +f63042a704e0f5833c2211cf3786f85b17d6a88b65a7345d41123de75f060add +99fec847553b7b375cac37d70a77a292d19abde97bcc9f83c60077d916db5af4 +7652b8151619c1e0f3c3ed791690a1b588d2a3830cd0a416ac28ce09441bc86d +e002f03a475b4c8a6aebbdeef75d9bcd55d7015221abad52aeabf8a4c629311c +8954db1a42ce904747164ce63908e102e09ea0ca69e087e20e624bb83daac7e7 +79e12d3dd8c64e8192b22963e9b566c25e10126987267a7c1535dc50ea8bd58a +d0ff18f8b2272da31b6e244e752b432e4f0a7de2100903160a35399a4af88304 +7248211545869c4752b5e227e326068d62bdd44a737c2369c2ecb251f5750ff3 +0eff8d76a7a1007bc969bfee5262e83ccff85416a51836643e99285a64431cfb +553c7293df23ed28ba7848631f3fd3ef8c2572e64d71846be956958038a4b722 +4d64a17b5f3494b24dfac3d5baab55332117f18f139c5879fc1cc166a3065a89 +f8cc62d55b18018d4883928504c9ab3eea8e703fae0f4ca29b32bf091a0f1853 +b2ecfe7ed014c5769775becba53a46eb0470283e5079703eeda9b4158a7a44ad +0c1c99b7cf5758024e75b0b1dcac94163b102367323b106d2e6f19a8743c62fe +5fbcd41aaba988aa98138b2cfce3c5afb7ec62697ac6abd998690c992b25886a +9ae009c73c41b85b7ae23aac963214248f266b04c227ba72fa895128c6c3d805 +acf32ba705c71f70d930c4b8f79704cc8de57730ea6624f2f139ae87739756a6 +3e0da1a7aa050f699e8d2f2da7ec5c9fed912afe0756f77780e6d247bfd1cd5f +56c80f674cd032700fe7738f7779c94c3acc18932cfe2a09ce1c2e3d970f6694 +11ecf7408c893c3d85fb95b63717acac72dd9e21cd9835d4534133eccf7018a6 +b3c32e199d29816f819a5fabfcbf2f383d09eae168f1a7000a656237ffbaf35a +8607463d51018c8cee5e84ea8ac637c41889f5ed7349ed08f8a745ccb9b83fcc +b70a360ce90b31f0f72d8f759c5660bcfb02bd21b0c92234ac187158446d42ef +45921a1121312c260c87555a4875dd0c4ad8058577c83e3bc69f9a2bb8ffcc86 +3137d29459c4822fea4b48cc98cf4fbe800b2bf135edffc51cc2edd2ed6a123c +9b23b74bac05c949f67cdb5e1f2eeaef13afdee17075cb4629638492be0f3c16 +5a07e13edf2fe52c539d67d46caef4279557ab1c89d29a413ed0015f90980109 +cfca46de1a779ff3d8946f054364cb7031dd8a5915ef7a9d8e50536fdf6182e4 +daaf299f6b8e4c629ff969ebeb76e6799b35daa32ba5f63deef62d5752ce7292 +5abfe174b1c527e09887227ddd2b5811e9b1a1d6ae9bb0cbbb731e6dc183342b +35d32005c6b1b8f8baeb9b0c6b036421e1ee9c0b9a37ed3d1270ca951c65989c +0ae878bdf86085191700f17d02b9265246738a993559ab752c2a019053a977b5 +02713b3d7461f7e984c3eb13d671ad5008ba6fbe2258d41f105f5b691f5f0f97 +ff0d48d6465f3b3c41196e8e5202b58f4688895caf71025d12add5a8c77550cb +8700289c6e770f0a4ae9592d2211dbba1c05a15e9b64a70672a2d304b145316c +27b6e3b8e6063fec56c00a80f235f14846d11eae2534cbceffdcdcef1cbaa1b3 +c8d1343606db4b1b4030231c851df4aa42baa59092d19842d918c16c71e62a35 +c847363f00c121cdce9e39b268cafea46edef4692125517972adc85a304a8627 +b58cf796f456480423cf5e5af54afe205afb0737d337119aec65f4ae9de7868d +489c434a0b2b4617fb0b1472e9c262f538f2f4f91f8398b9295fdb3bde3709e0 +69e9d58b5fca7c9593630f38886203cdadc51d69e130b03f0e42d3fb181277e2 +f650a15dcf84486e6f7ae6e87624d3093e9349ff55e52e946fd1772ff73b9516 +0c35220f242eedff9215b9f8375526a10befd5cefb870a9076203ff14e7cac51 +3a7bd7a6f0180a74e99dfdaa841eb2ba9d93198d4db36e8263b40b7b4ef750e1 +7fec820412a10a198169187f67fbb4e8c5b84dfd764720a2cac79af1ef7ea2d8 +c89dead0e9c218d6ed9ca376b1d644e95055d8aa64cd18baa09af2127caf8d65 +8dd1c9c94b04461021821ada844919c220caa3bbe4d701b7b8a1d3752199853b +06d66081300abc262ead81f31d115099802f54ada13b358f86f39b661684091a +64a79c1140068156e4d6e2f28e178e23e37eb427fa8fa3d96939b3cdf7e1771d +64e53492a7237c8358ce6b851c07e3defd63aaac1affcb769a9e90832c0e1e13 +5902a7d0ffd353acb5e6a0ccab783148b6f76204f55d0494c703d71db198bfe6 +604949b54e2a6c22ebf9c30a02d2fbc5541cbacffb1ac9e8de7c34d19ca2ee17 +f438033f9ee4eeac5f73e4ffc388e286475681c2d7938e41191c120cdd3afd64 +d1f10737d8619abddcacea44f3312acdfea9581f0031e46aa6abc8592fe14fcb +5e2c0e65a59d0344eea87d409840e78c9b73e2118fe6600065198d2249cc788f +86e4f41f3cfdf1652c3a859585435c3efe50c3fd7ff8f214f8494fc92b214ff1 +c68d5ad8c12cb2cb0051b8b7a08a155676e325e7c74e75f2f618b83fa4f8335e +7694323537abf18f16d6cf507d93ca37905d6dc9568539f5b10f3f5aad509284 +19c1247c78a709fcb73b7a5a8c0df47a6a43a5a15783ebc7bad07a98021abb3f +f8eb159758e4ed5ea2dc2e8dbad616a9f8b1251a0766839662fb32836e5d7125 +765a36c44f753e597c7e2e3edb5f2a02ae5ff69102d28d4baa480d68e3ac02d5 +a53c986699b2195a54a562a63b2097cac220a4c819308e880fc55c4f810a42de +2cb8ca2dbe09db88e07a788dc7117b61fb0584ecbfd6dbb4ac1f676ad75bb85e +9fe73470f329378610f48ab66ee7ebec7ddf23383cb870d93487cc6610b15568 +02313d568d88db8d9515c695ccc05172a419f11a4c9c05a88d7b6fd6e39fae4b +a82ed4da940c42d35948da601c913e1dd85750a2741f13b4cec8233e3dd44f89 +83cbece61ccd57df698b305a0109630fe63433d0bb1e0ed6c037a6f19a329515 +be618f9e83f149b2620589cee7d4d76b3ff31715363778da59d72b17156232fa +54a66a8808397a2a86c490588c7256f2260dd103aeea7df766451eb8c43ece33 +53766f5c5713ae0128cd5c5928a4f5280b68d4db59ef2f71b7d5b5d8bd49b582 +1e639ca70330fe6ddd1ca7571376ec8c7d1531e9e768e1c26cc9ae4181ba38f9 +8989b40bb69478fa4eb90ae0192c29671f86dfb60cf0088ebf2899c3d31ccb8c +504b9ac0be4a6e7ca3bc8eedbfb2aff0287f2f82c8f016d6c5660b36154508bc +4bb58d27c54ba3aca798f5a8736633e46c84579250c557891387463cb42fd938 +d5628ce7b8a1cb9b538fc3aac11030f334f2be6072bcd5d6855febb4c63360a9 +1207f6bd367284d0a275febac2fa7b01caf371a73010fe430e226470f1d828df +4e4bb917188e3ba303397a012788208bf335abc742ca7f18e106cfabd62a76c8 +6266718b65246040909dfda0fb2ddbf49366b6e96648db93885a8e614d56ab15 +0ed98ac3756f9a166cc72e7230769c44d069894c6b6a7845430250b83f0ada74 +cd8bd469b0e4c8695972e862388bd18989bee33483cbfb7d5aaf27ae58af3067 +6a2d371ab03c8c8d3691f8aafac5a70e0c27d5291db30bfc501a6e04af2560ca +c2863979e238c19cc76b17645867723dab5526d906f02ae71551a52dc8c191f3 +bd64481889527e4ff1d814fc6cf6e20d99257893e83277f0351f5f8916d17d4b +b737c290b085faeb2fcc3d760f86e4ac4c910235c7847c9b5eaf9d51bf93b015 +021c20d797ba7bb75b92ab22a5676baa005cfddd514d293511461628c60e6809 +724103250cb4746995e13a4b3da0f872011ddf17134de8f1c5429aa0caa5f819 +543c220f6e51853314ec055653e580eb3e6bd306da6732b1ab06239a7d7c96a9 +ae17800a9e59313ad9e149655d139dc4bfe3fe6c06ef81424a93a971fd35287c +e826cfdaa3cc023f2299fbfba511b71f442d5cade93f12be95c276932d46bd18 +b1bfe824e5f355725752a6cc70c5ec74df4d31a8a5ced09b36080060266270a7 +637f4e117964a87a5c991be357f1e0b6fb1c982ff54147b936d52c2da544a0a2 +6a7d5abcfb5894e558a7aadb72f83bd5edb728939cf96eb4aa00bb35553cafda +5edf8f4801731bb1fd04a5fd71861d42ce131c027f32a7a2d3a2e4a7b879bb64 +6dced3148bffd6f40fd4a4a21ea5bf3284359576d36cc107d1276a0504dd3f69 +160a7926cd55bc143a4e36906037abb402f49729590186285cb9751b8ab8f82e +73b3b73ce793136ee7e5bff14641de2ef834e20c42244dad4591c3ac2b48cea7 +41a5ea2be689090f76a5d5fbbc83ea0bccd7bd1b5ab6d2c8a4a16318a5c864aa +80dab2c867583c89110d49c70a7a828d5719560b11269237d673eafcec031dfd +700fb502d5f7590ec9cf226b89916263607689f9c318e22d4c39e7076a40a022 +5af44cfe1ece5a1804147e0e942775bb72f0796a68921d35f78ef363a6c67c47 +2c8bf7442005e4ad7f1c31926cfd83433dbd919ed870867f0c6d71bded9a0911 +5944e5040eded2b137dd77968f33e73d6f326b25868dfd1b0ebe3c2fbf14e053 +d87e04fb23fea793ee8aa4811646329e65341c7df0a2d3440414f74f07a838f0 +80e82d1ef4628cee2f355002bb90cdca9aaefb6d66b887c9233d78a332448650 +3349386ef77d2fd50c73caefef08ba0f85cb8a2c478694a2a429b5840d9afb42 +bbf8bfd3fa80f60b66a5913a66fdb5492bc7a12047ee80f2995cfda7e4a91649 +b32b8551eb73c22303982a3f9084020d7de4dcd3b9c10a012db67426f618f41c +5010db01d33daf5f4d535f29f757c8a049babc869fcbd8405edf0f1767d3261c +33ba081e166b8a3f11b7f330fe661b19c6e6992ad599bb1bd5a6d1f82f107269 +74942b69c91f03fbc953db9b4f731ab889cf99cf61fd7b889deb9da5f4a8c8be +c525980b90ec06c3fa18ea4ea16a420164efa794d4b5941b003d33df83de0980 +7da6c899f350adb2dac64cd940bdf3c010013b791f9041581da3b2234b1782e2 +59b24b2906712dfb713ff0dac0aee3b96238056c69a219aace0b5ec7d19bc7e7 +ad7db14b85feb310db92f0e691b024e18b1141ef36f01a20634665b06b4badf4 +089c2af77589070d94064431d1ce117ead8c0b7d5047e8d74b1d346e01855db7 +422db8816d90903e46ad628fbccb91d0dc7e0895b5972dd5b352e2d917793ea7 +c0a9528c410ac8cb4d60aeb5956635fceed529a1a1df1302a8e5d4991c49cd0f +4b0d1411af0cd626f417a1fa02a4cf9d51a6cd419c483e7b6596e11c7a6869d0 +5abd33b87d3ab3531887ed97588ee09214f64e2eba6a95a4aff52b09ffce90af +f3344afb840452c626f0395ec564f69b80fc9cdefe2eb436a27924a4258336e0 +d95ab57f9509f42c2f4e9c566a94d79fdb7994f1061ce4a80d2298d1398d97bb +864dfa481bb141afeb525b633b5b3cc1249c9dbdbbe4e4de481dd7e8ac7a0fd0 +bfadef4a6a5cedf5182239880d66f968488b035934ded4a3480939f8c4cb8844 +ea55ae00d9be6632fc016970aa9d3cfb30423e391c7fadc0f0352f4c7f8ac778 +dc68165deb52ba51c864c9f7a8cdbdcc9cf9370f8e968316c05d08e1ee5a81d1 +7d07c614a2daa46b07ed5da70b5f3e02217c8e3fae2eb302fcd1a705574b405f +e0fba3b5def29debf605f9569475f0ed5f0da139983d572a860f40b1a82898e9 +a8934a78c87d23c1b0740d16f1c419d592d24da732a6512185df6d11cc1069cf +9b271006d414f8f7bef0b0212fcf5595d6037adfd7d2b6580a57b8537c0e00d5 +d2c39839b5f4520e92ee2259488f20280d01bce96c87cb5be84b4bfe54d32ee4 +35920dae9bd61d15b298b9d7427325284939d244b552c1c538af29879f84e926 +7afa80dbc31cf627a70b7f4da53a09a302273792002e7d2526b694e6dda9f4dc +2689b0f87269f492199c75bf69ceaf0ecca52146f398bfd1cf01cbf3a96eb94f +47ca039777c5f2b5d2724804cb5cab760abeb166086a9ae6ea05b63b287b9ed4 +02479cba61b25cb909c9de91cac952eae53b9b725293f2e3560e91eb3a89cd47 +949293624c80a6cff29ed64e534cf88fb70a4a43bb176db441cb292c70780d79 +5f34ed6172c6722ca4ca545c6c73818eb1a7acdf0f15b889f3f6d943c686575a +b07129f40482408505f2c3c69bde43bbea768f4be99d177f8583e126f6132008 +a0bad431cac8348d6f4935dbcaea0c7dc17d0aefd487a80b7c63c72f9706b97b +1f5fefd9d2e473eabe2bce9e83278f8b07cd62163e8bece3bc4de06e28b8628c +8270df8c0b4dafd4d79eb79f686dd97b4f172548593e1b264c9e10ec0e1f19a5 +5241af042cd56b3399767a89245834a87f89e49df8d06904751f863682ffbf15 +a49bd595f13ce02b3b4826bd1a02c197c08c1f968b35fc8be81a79632f280254 +55972d71cd2900f0432c1d0b6e6099800ec18d3f201a16aa6da0f6c08487ec90 +379f8e55f2f95a35376fde1e44eaa7ab54921994017a367f815b7e500ae43da2 +8fc6022122923ecd955d22bf19b353e3839e3dce9e99a0bcf2dd98c5645baad1 +a040d8664e6b35d17ab6d065e334d56198cb5a26f35ca8fa57a75a075abc2fb7 +e3f55c02ace61d029f4c4ff50fc150ede882ece1b6ecaedc27df893444568de4 +f1fe35ee5cca556c5c654e34a5fe2f16d3e8d62b58b92197bb9515e573a69da2 +446122ac0c47f9079c5083be699454fd6497723347eef40f298f307e7dbc0b48 +aaeac0526f01b8fb6633f66584af39e4e620d3869c627c133c2e16d9b8986145 +bcc2eb3dec6b66fc6cea252cef55f17ba160a6053cdc5e2d23625e6e91bc1e42 +8acee673ad214ad1b6be89905b070964f77458e540a71171c86231f98e49c8fa +b92c090fd9405c6c6fa3aeee545e0d214d25ff617412bb6c996ad9f7f5958021 +4ed826183200b4caf8238dddc5b0f5597b7c737ea4964aa0dc37da7669e460a5 +c01e6f1f52d37a228b559e053c855f7246fda9b8771ff86a20471ea5ef767447 +4bc0821fede54efece22a5fec453f705ad35cfae7fd6018bac895c42f99c3999 +4b02d338cd349517bc34cbb4bab715f54259b4e4282c5a1a14d351fe3c0aaebe +cc5ffabbb5ee4e7cb6e5bf33864abb28edb8f8ce0f4e95249060fecfe21ea5b0 +d8afabc21bab61b5aef76687bc94d65e9bf727cec9180587c61d126e1ea047fd +c50d4e4421163a6b8120319f08912f7837d65acb8cab01a43397aba87c84486d +fcd1d166c7b13e740f029db174bd758bd7e18ed5e452c0ae9344504698b0d20f +d6ab86b88282b91669f55c164e4bcd6b642b2e6ce9ea07b3644da8a795fb5e1c +61a89e17bb43e95e33d0f40942219ca174544716ae5ff1bd6ed11d555b24f764 +26383eeebbfd098db54997001e97e7ba3af1700af56780da26b67211f3c56332 +31e275f5f44bdef704b0d6d013af401becf4f5d7487825650c39e3e75568e7dc +037a61d1f92d79b65a69cb325434b230eddde0c44c079b9b1040fd2f919e55e4 +ae2f1e7f606d1fcdeee0e63fb3b453a7e0f4d194bee883b9fdb9f6cb4604c71c +59fe48794cc360ea16c3a0d95c56bd4a4a5b53246ea30cb133640256572a0ea1 +b9dc901d49e2985eb3123647ff7158462892f7ecfb709561d276484b85fcd91d +f31b7a6261ee9c8fc2dda388475b23a4fd88c46e3718e7ee02d265d20f29d350 +1f28bfbec3976e24d9e51af01ad5cc46073cc2d8ec7fdb23028a0e66e02d2131 +778cdc87bf4dfbf70180583d58aa0389f16a4512af9400642d6fd99bd037645d +7cb611dc8b5c59276de96fd01359107cb52bb2ce3936c816a48955a256f48fd4 +750ebf7e09238a58801bfc163603a0dd36823afecb0189228e36dfb9f733dd9a +9ef2fb9c0435c2388ac613a53b3bee07ee19677a2b9f0d0229c3d4d6589488eb +274b5bed81dd63eb24a47b9686e133571132fab02af1eec4fb0ed8576c0c5473 +6ed93248ce39b34b1cc42b6d2cd8ee5faf814b087813df752f79d80d03bed3fe +a15a7d8ddf8c8a68548ade441532a0ce0017718c539c32a0d8f51ebc04134761 +8f12c20267e9befcbbd799ce9c36c60a534244d0048df251b3751e31d53bcee9 +fdcf69235791742a9469493efa318a19aaaa677ae5168c5cea6faf7fb516ff02 +fdce5851f8b735514198b0df53d092a46891e86af01c0136f48fcfd8d4fd208d +a449c9c1ece14352a5362eff5f45ca022583a3a62c94595ef0f0c2eb17da1d72 +52510db0117e2c9fe86d57df6e6001881b4753a6ee2a03ab25c3fcf65af12cbf +e7b1d21298b43c61646993ab622f7d622dd08be2a04421171118f1ded51a9d6c +c04a2d82c05131f33b1e8960ecbe383a3b977ab3a971531645b266f8d690988c +66e4adab968b56cae424f653a034f2bf6c48ccd4ab68505159cc79d6ae92697e +dd0c6d7e58c00b9289a5c38a886b968303cd7e52fab2603ae847356aa1ae2f40 +ebe633a885e4bedd37e805100a91c4cb9ab17b52bd5fc326fbdae47b90de6b8d +19a374ba00bd291b98a518bc209198e73d1444690541d37d438077e1a6b180aa +6a84db5afb7d6cb2447930b8cb897af812b83170079f29159386b277a2375af2 +07b18431631304f994d6e7939cd496020d9afd2142c059df61c4517da4e62b99 +8b17fc04f3e53954ac2f250a704c55e32d74d214cea884fc4871c696f91813b5 +d55cab07a75f076a615fdd9173d5906b372ac8cc52e02fa589ab6f93192e5fe3 +3cfd66fffbd5b1323a919d46e602edbb8c89f273c41fdb1209abf082643d6f10 +e8564fc55715a3c3ff5690c4fc6ca98d836b58ff42eb05ecd303878a7b63acac +e9f82804979f5966ae4883e252740f94e8f91dc80fc787ddbb3a57308bd21dd2 +4f952229494bc25072c0cdb86d02cf69fd3ff416cd578c173e31894bf28471bc +2e2fe23a1813a167db2243c31b8527e6ac921f428d35422026b5190c1c7c4c03 +5ec932b15b83889d7daa22f6f3741ca73cc137f888541cd375e8b5f11138c228 +1db167703514e2437469df621bffdb86bedf2c71a683cc43c7ae29750b601612 +9b71a08b77794bcaae15d2d97d74fc5061bbfef0969f3a9b653c9a19fde42f1c +64a15c869dd56b4dd1fd274112edba57a9fe16ab0d93cde262d6bed99c3f59e5 +d7b4a935ed44eb5ea5874a45dc13dcd7f56a3542cca6e404471e4b161e754c5c +0262d89915ade243ec6778cc63dacc815f51a4404a926a12d08bcf0be7044f8a +d8947b8e8ce2eaa0bfe1668bd854000eb9ad01c19ccea0d8a5ba173d8928932b +8788430e4eda55027af9113a7b62edb97a6e27759bd93afc45384b79f4587d81 +a2cd3bf7a93d184a81e1942a1e0eab43878c6ae2f6570f1cc5adc9a8dcd485ec +737ff947a5c417853a970e86576134802f6eb7836dd51cb8863812bbf8e8d3bc +c857261015075527e852fb36507a1a19cbf4ec0a94e9dd674ad1e30866501717 +06096027ddae067802e465e36260876bce80f66aaa0b49513d1713066e18786e +cbb986f47982e6b4ebfa1d12dbb92359fe2c47dcf3a5057c05f1955136ffda90 +744b5d4399338760ee2a1a37c3bdb40d225bcbb6df266b33ea80bd6eab33d382 +e5228277b51ec370650e181d8e05f9bbf6e0150718191236963aadc4973a66f4 +9107b9f1d2685e88de64f958684c772e38dedb0eebefcf53e1162a3dac21fc46 +7f03c011ae927644fe40b1d862039a8ad8de5847f3636657ae9367953af07bd2 +d8ee3fc2dd3d5d19e097556b09452c91b154caa7773a011e67351bbf96313932 +1e7b6c21dbcbbd2045ec777da207c25e381bec13800232ebaaa76f739c137d05 +cdf85426358b4b1aec7cdf26865ae32c3a0ef9d0708892ede6670b7db6e1bbbc +74b2d22da926e9dac472c28ebcfb3bdc522a3f53ebea4920705532f605c13938 +fb7780953993f75d49434c8c717feb46aa9849c50ad5a38e4c0fdaf6a6b2fba4 +87fd2e2f54bdd15c25c42bbffbf5a9d3f3c6c8e5e058859cfc3fe3971911c0cf +2db3597d1d895d06db5d332f465f0fd4566b88fb8e81cb99be8ad83837d8204c +2bafe8801ae9143e7aaa7b461a5f8e8d2fcb3f6555aec9871f62006479bd6b87 +2221d78d9d24c4e28501a0ffc9098af7c19cc7fc637450bbbf7fb5cdaf2808fe +c376e9863e5615b0b8175b6a28582491458095cc09a10b13aa9ba9ba0ee62ad9 +bf5e6beb71c45e001ae215da03c24385af00e565d61583478134ff4083ff2141 +c2853c81f1ec306056ffdd34d049699329b9acb5c14604a9a4e31aa7a919da76 +812abe85db635699529cd7b843309cf382d0e38f9bd251fef203cc36ca290813 +f6de4a6f52a77f768fed39fbf625c043de3acd4104cdbadea7ed21df7329112f +153c2a63e27486d91f9ea45c56803afc5f883b6a2147c2f86b42e6a643f45f0a +b2ccb51494ce1da1c0aa24c4cd3a015fae1159a2477befa3a44bce0c401af4ee +c59bffef2d3546658d6aebfd63032fc9fbfac9242a77e69894ac64a752adc051 +06e6bdf8b97871376c22c32e3c55efc35ebe675a7ebab759ffdfe22ec72d9065 +f203ffb3f1e331a19063f83a802899923eb5e923f8ecf2933e24356ded7b606f +ee5ea121e87046ac50af6edc9188172e80defb38faa6aa7a367a855ca3f48079 +a92210efecbc391f286c08e695493277221d0014dbbbea010678a5c39353832c +03597c3dca3b326ab5645c9416f062ce677a3cd56d9b1cac94959a942c8df5d9 +73226a57e844b670b79e240b04ac3bce38b9ca0204d656b0ef0f7800234a5ce7 +b59c5bb6e109e9d161d92bb02bec74048f63b4ce86713ee96e3554c0aca232ff +e23a89ae16456e73f6a617b435140f7bcb4d9305ffc5de8a249dfcb7e3b8c3d2 +c67b6942e060f5561c5cf9c64774dc43919dabfc861cad2677b52d37fc0e0064 +c942594454fdbd57f1db2d94d566e45a64dccedfca088cfd3f4fc6a68974db00 +31e5704438f1fbe987604bf44693a047e2ecf9fe903d87b17a8ae02216a2280f +7c864613eafdbf96d2111c739a76770bdd7a60df1cf158f77ee34ef9a6625b27 +535cc1f0ca452d7da39873bca9fc57564a19ad99eb66ad2eaf1c6ebb115f5354 +af2b2c5d01690b3da7bb06c7c6f3c9f60a6b71084b86eadbe98a470ed3960dc1 +7bd2d1a5e5942742c224f58b95afb240f901ecd28a39bf1dadc263a7bf775b64 +d1689758e29618f7b683ac6f87215bd75f84e4289dd0e1f78a76f2d339844b0e +25e8e37bfe7a744c284eba83549fb54922078f874e4dc82e75033917acff90b4 +34115e653a13a4239ab51627a51f13579af6275aa4c33426b8b9d22f8514775e +5dc2ad7c215c4100ab0ebc8c5d418e4ce931aa8e7ad8ea85dc80666462bc6a33 +906eb6df95858034ed53fb216603bef4efec0fc92a4b3af489019fb544667b59 +47dff24086c113540f2b35b6c67abecf6a007e6e7df4ac7161594e5e0366fd57 +a8cb0040d502f5f3bf460d669597ad7be4d4f605f69e63b4ed14fb6395213fad +a3124a2e24b03bfc2f8a372b9c57f3277540ba3f8a01d1d32fef956bdb7b42f5 +c7b4da738e818c5ef47c7892e384c85cd728167a7e7c60593cee13b606ee068a +2b2c316029510381740219427ed254f3b481e0184aa2c9b0eaad58c0c297c7af +ea36614320049b6d98d7ca569cc4a0f09d62a51ac19c2ecaea7279e6ccacd29e +1fb747bd0f1fa3c76caba93deafa4ed2a2fc9eef9d08e5bf8e7941cf0fb6109d +8c0d9a5ba3d952c8410179a07005a279c17eebc082470a0c14ddb42d0dea19fd +167cdf61ba57ec2ea2b462d9f4cd0adad01cd14416c179146ddde6d74cd6689e +2c32ceaa006dee1a5cd5103014e3ac8c0c4a64707a431c3d1cd700507ca1a51d +844ed39fe3afe17ee03ed658f7925c7f53a69a5a0178c8b0d49c63de76640b6d +f97809955e3f30689bd4b1d0aa1aa2cdb6fe1612f6a973e1f66fa918fdb0fcee +2b92e27efa0b313219e4431658a908222a9783778d6ce580621a0591d381ab05 +72268d3d4ce4e02b33352605c390f4a2ee24129a5055ae5a8e4cc2ef5b717fe1 +cd75158e95cd0c1c03641ea10f9ebc9f1277a9568eb25b6aaf770390bc642105 +24e4fb8a2dd00227ee505b76dfef1d97b562405a1dee9566fee53f435c7b7cba +c394885672632a5020a3fdb64f78b4f61838c40de852715366e2594cc0db58bc +f7d1ff963393b38db081fb869a4e35460806a79c044f005061dc4870ac168fdf +96387ed03df6ceeaaa8b260b59f6fbe19683329e45f10396c3c5cc97932be319 +e705dcf3867ea5a944851d502dfb55bb03c931dd920eff9d5e9c1188d93ac20f +f367c6650458040c73214f0c12882d2e28641a95090dd75c9843c17f81bef191 +be7870756472020a1efdef335a2c7bc8f4219a449ce7e2b258820953ae2fe721 +eb8a7d4e64ab3c10cbfed350cd9d10487f44f4b87e6ecabf3fbf348b647df60c +df25674552874736eb7ed13eda4d3203659837c421fe947bd934837ae372e305 +d577febdd73c77d218dc94f405735296635814deeb99c11f71b5aee6493c83db +d3618fce04afb7f93042d9b8e816b0a3c552d68fb3eb654c4a1562beff9c53c0 +16274feb3d5a8604dbdccba0f824b2562401435849ddbe5a4094b689bc69652e +54dbac337f2cc8ced18a432d285835713cc9be4556b16cd9a97782ccc1a0ee90 +02fdcb96af0ced501df7e6397e3292881d5bdb7c0e66381e5b17b7a3610c968d +99a1eea12b07c560acc008ed1374549c3bcbf6d3dcb29e22004494a7575bf779 +98d5d3ce0fc29506000556a4bbf4fed37656588714b34626a50e4eb97256d928 +69c3a1f87665bfd72818b7acf3fb8a1e6a3129d05f9782091ba1d07b0abc9b46 +e0e39883b227944860db72fe486066628440b3d721f04a5375f743a788c8bea7 +5737e50bdcdadfccbb2d6cad1d6d150a911dcf25b3d4b71e344faafbb5da2d1a +6fcc6069e9f311d63ac8594b94f4a32462bbf685eb16339e26d6a3d1e32c80d1 +5fd643823f5cd26cb60aa96b5c689d01a6995d351c47bfe7cd8789671efcf6f9 +636a2b6b82f2eb455c6dcf6490fdde8b314e7edda3c6cfd85f616910b2a985a6 +937806fbcd537cdfbae30b224a4c067126f4c833e2d3242938b7d9b24b99b87f +509225088624b0e5e5c2ff51b3cea922b563f2a09e3d30bc508ecfd11f444280 +5959b3d88b3b3a7dc15b5bb2f7f7ab021ed21a703ca569c1f36a76ca97695a11 +7e3fb7e5e9154548eef418c96af99c6d2ab148b93e30a6745d695564271d103a +41a6d3f5bdb2ab23dbd641e17d400a56769337f863dd310a4c54bc9180203436 +cfb08ab765d66de64b89b703c91c15886f5e60329eba51cc6bd86990e54d4425 +eab6a6cca8ea126fdcd56a549d37696a503557d3a82bd1eba414561b4fb72636 +08364598d06c27584001cd09c5e4b01ad80ca4dfa9256da4863947e9077c4261 +1010a5c6d3325594bfcb5275469c4749ab2f7d897e08c4f2b077a1a5d46ff6ac +ef2c8e3fdbbc225d316e0582e4b39e17eb34bc0b27368159af0e631f9c0f6376 +18972f16f7e951e483c31c32f01a821b543661789a463f1b7a8da8e9b183b7f7 +908fee43ad17ebadc262631bfc77292a3c59314222cfc923436f491e5fb9a91c +37d0fe2a9c8df3981c82c39603cfa45e441e3b327be9ee2d502f538ee6401e02 +17b163fbca29d33bc7b0d4831059d70e747f1b82d7891a9e80ff77d25bd5438a +f71465636f2ca2078d0f864d8a5c339437058b363d31b23e0385bea7f0b13cf5 +dce001fc61b9f2d2287d075819e7ad76336283c53868bbac8551120929dc9297 +adc174ed85e71291769847829adf85aadb37330783d1b08c376c6da73892881b +832bc16582c845eafabd4740457d3a9203ffad8cdb927e22619d12c1e81a2c7b +643c6e12189d10c561192ef2403cb601770a618690b43550ab9da1c8a9b6168d +856685644219d08e8499f10df234a79d11aa12794c79dadbaf34e1be52f607ba +97270e1901cde6439482ccd4c23fa05d4c91e2399424906c2c6f06d806f579b2 +d1f2c86238dbf623098fb19fbf8a96099ca176425d2c2d04b42f5ef59faf506f +c9d3c192da2171a55ef643ca609855a8d7707f4a3309c45861a9fd555f8a9740 +2b0fef4d32d2226272dd8e1961fa9961f92a37f798b3fb5c0ed572370fb4dc33 +53e8b2130f053a2c2620481ccf76e860eebdc564945d64b4c639ea97168d3dc8 +176468ca7c029caee57fe53f227af0c32fd2dc86932772270cddc4333c2d708c +58e342a76828add6f73a6649236e86a5f3df533f0b80e2ab25ab0147abe82f5e +d6085d3414baabc43fbc79d6852a0f2c8d1de4292bde2fd6a9d86082deb73185 +aa48b93ace22aea82ab096b577c4fcf829606151950837a5f17dae38a2398dce +4f6bdf8ca1ddc2586432369640158a7bdf603a2ce52414130c66bb7883aab8fd +12f1a04c6324092d292f76b874548a6ecb33cea60c3decc39a84f588e6ad8910 +917594d006a488e3083f5f2ac0040255a69b5b787fd5276a2ee592cfe62ade25 +d0a0421b65b925accad1ee669dee0aab1bf02917968db91f3469f3dc0e36001e +7750f8e02f1e1a9a8f4d538b7c149d8b70c95e58d7a138e1eb642b29341d4d85 +9c87205f458e5f809f397a9de1c95b7c18bcfd2881a920d7a22be5a96baa6a86 +d4634e1889c4e8848783e3929a589a6d059abddced0466d9992a2a0d0c6bee32 +aba732320e81136f1e4997c06b1446d67644249f5ce7b06717e4e82172838f5e +851a73a10953dc33500d25a71d2890d2907cf45bdb51914b9fe3268265c78359 +8c8184aca0a719d2fb196f40005a41bed9d3735d3086ce8ac098b746523121ad +c0931f913219c1f4e5f4d1ea092984483676989e9d5952b3400b797a97fb3db4 +6f9abd4396ec3cebf92227f71ed9585ffd58b7b54a4a8fc30641cb4652b121dc +3427f646ef7b3c61e4992f91e1f55f52b74d8da42880358db86211eb731c7bc5 +6439b57752c326eaf68b6b8c040f2dbf6949fa5b7c4db7f17af77e2637a645ba +6f9335443e9eb7d62e21f720285a485b297af8b15219a9414155af3d62e833c4 +d05b391bd1dcdadb6521b08515f67be809e872da801d1da7c1b02e0dd66f9d60 +df057df07a6471da2311951dde819d6578484ce3dad44cb42815b1d6ece65c85 +9479dcdc9c33cf4ee07ad89b412432bebd616d29b5cd729b056479e38439df60 +3b3641a40771125e7d9f7ba3679d361c78c422812a0f682f9b17b6032fe291c1 +d139f3847a1ab5c4cdf1424c4755aee3f2572c88c23e61e6797dcf3fab37718a +f91373d4a284af4e4262642b6373628c4f92db7eae6bd7858e7a87e6d8fd6468 +b199d98d0110f0839f33cb1b8b7bdeddaa0b2dbe69d8e06f39860571f736de5d +6209008403f8c28480c4d2c13e9baaf556948b5bbb84acca480bf3ded4205cf1 +ee1659b6ab643c8e6fc14e2c664ea3a6cb292ba7966d7c61de01602a531c1c35 +d75726c7f029b8ec912ac018985eef878be32252c496344bcfa9e4ba860a5d69 +c95d39e2d82f8d1fbfcb9f879f8cc836d4e624cac97b22bf262638a15f58022a +8ac73e6c3fc9e9edf6d4b9d7361fb98835146e8eee4566ddbaf722d5f6a45b6f +e866ea2877a8965eb67174469cdbf47a8f4fde3c1519f95027fc1562c550ff31 +60f3805d150d2ce5ac0df88438dee84adeecf23d6fa504f8401f5d562c6e606b +46e57bc97b1e6b981f0ad310334f7a3e8d017b9265a6fd427a7188e29cee4e9b +fa3bf2bbba98f1d398fbe046cf4534755edf43b9fd9fe4c8fb5535c85452d1b3 +b4308de66d247a18af32f80f64bc428c02bf77a23e546c77c97be50d0a90e7bf +1d4cdf199cad45d3d2fa62eac2163ac351cbab7272878b1fc8a22c51c3d78054 +8e3455cf8652cae6adee20d351dbc78404a870c72fc25860ccd027f30db6f682 +5e163239ba493f7e9753abb6d6c113745f5d22c573d45d4c1f51b82f9cb92650 +97d20a0281b02c3f41533a48a7136f75fb474ace2cee84a9c7c89912b2f91a26 +2451f738b39c061c6937f93705967c97c0562769a5e38bc777963d15e9a53836 +697de393ab445c3e8d9d9010533485111b44fc35ce067e553bfaffd0ebc1a5b9 +c9a73fdb5914de81a1e87b31b4bd8073d189dd60afc0589b2d8c2e7998cb75bc +48d7249c8b7b600d748b3e158df0b25fd7c7e557793eebaa2b109a440cbaafa3 +87d57ec97ddf88defd761d98812bd0d4f05bb507572500d60d644bdf92b86f79 +d16ad640d5fdd9923f3de87e76084e2951b128e2d2b9888dbc46ab640d1cd5d4 +35ed66734d45e5f97af9f2869c81cdfe024b9d9bb5db98a41d0a48e185005f6a +8ab2c02ea20dbdb188e600b5cda8d4cdbba72a7bc3579d29ca46fd694c874037 +ec831f273a9fae33cc2e21341b1f6db238e851892f69397010b5723aaf0b8198 +5e29b0bf6f372010214238b5f057f5adda43da45153478b884e5eeb1b412b768 +620ff6754cd3a144efb51c57349e22a62e453a98f133cfc6700c6da85b63dbb9 +204bf467a0f7b24745d45232f46cafbf51363a340ce9bd4fca0d7c82d13dfdf7 +f06449a5352c7ddf1bb8ce2bb2a184bc56408e274175bd4f8dcf2e8da4c1d008 +47d719cd893baacb37a27beaebdd0a3713c5be680ba901538fa17073bd3171fa +ed73a0be97a2110ad152c82508e056293e8de8a30b250e58f2287e408d52a4e7 +e6975b70f7c772aeaa0b7ab909dd85ebf4cf003f926f75bfdaefd11d80c1e904 +15e81a622bf0cbe22cecd6883f7e71b7b2842046ed2dd11fc55e2f5806c4a958 +49826663d87245d112c70765153079d1b27834541a54cca4d6845b1d8ad2c979 +21fcf6c60be49fd35c0896bf1a91e05f88417c1658bf1c71583917cfee6f24eb +1d8119a5b6f65458011a1932a867b66b92676b6695501f8dff0c76a166fa2aea +50b7735a1bddf3a48c9b4b70cb2b6d25367f341e3387312cc817622a4c668616 +525031c47f0980b2444edef415005a277a0788e884f3f42db23a0cf910d26944 +e7c60fe402b7e6c66e7f5475acdfdc3071f93d3dfd0d9a6b4e725cbc633471b7 +e60d4cd51304139dbb07ee9550b821945c9b2b028a8ff6807d2f2ea3dabf423f +8084a8e8a9db92f661ec6996bb0136cf4f6ce18e9f9ae7af537134e88bee7831 +2d4acfa21f408d448832031a735072f2aa3d2f248c0b4cef5962cdd39b981cfb +00418b97d239ff07191f5a29fde211a66697a179e07c9b4920425582a89e9044 +96c4732bfb97dcf95ca671bc276399993e27e8e628dbc1cd2475faf546b20442 +606d1ac5dc4d296c9ec5bc64fdff1f495ce2c5bc4baec994d36343b25ccc2a2e +e59c24e879a8808455a9a7bf2ee50e4f95a8a43bca4961a404d29b2eeab77989 +316c7a631c2c36fe6eb3f2caa788c6a5a7b02eddec54fc7804d1058c161d7f6e +ea5e12f4e424e58238546a5f37baf3cc67a1e0e4d475bc248c4edbc952f32178 +64fe456106a98f7b9da8fa357754a20c3c1deb4e66850d343c26dfb6c2163daf +fd4517df830d606c1d1175c87b49b4005757f957c32a53bd4edeb21819642852 +1fcfaba3645dda23c21c8921b2a408fd03052e354c5d764e032562ca42779929 +e34b694fce832564803b02cab2a20bb0e76bb851c1f3659b0fb0d9d2f7906007 +9e4390c5b6644e16ece8a80209adae3bfce2a8bb939bbac35b5d9f55ad0e3d6a +0e2cfd82dd02758ec81c3ff8c7649071a6530e1a245b8424f3bb85db3b451b20 +50d5c2d41fd1630a22f19be41997f626a3760d9821ed47c5d29a9e6c4ac57c35 +5a4f22e577b283e87598397c0d19a963abd721febb5167d37fd8dada080a55c9 +f2dcacffab045697340563cfd8d9235d44fb0526abef8871130fd379423964eb +12eeeb4029352745c7f87c55fde6fcf1b4bf520e1004bb7253c76fb550db0db0 +4355237e35b62f1884cc475701d1f2103b8488254f6f81e25e76db1816feaa9d +4109d6d84a3fd75d2f6195eec1633ea58273b7bb1ab7231bcae41903645c81cf +81daf5ea92fca05641200985741748099f93a76182e6e12549ee0560b9f844ed +bca95b2443ddc6bb0b818ba5d3c49366c70e0af8e7594dc0fac9bef4cbd32e06 +4b8d1c683543e1d8e09be57e993b08c2a288fd0b14d2e9f4dbec6a3dd09ddc48 +8a4a307de15ccf093b39a9ff8ef2c0e17627aa5dfc8373874036f60687447d91 +5c063649864f5fce307425ae57d71de9cb60749a13c398594364f45559c51f50 +524cd454f6a0def13cb4d479dfd3f2f05ff9efeaf667a480fe9817b16099d84f +adde9db191b3ca7b20c750c9e5bf26efff501d8a8bd340abed7610ee880f6b91 +6b6f9599227a8f450dc78eb6ae437a2fed978f035132d529880236b306296304 +2b14e67e647af7137f52a73982ce9aad9b81c4a87997f86fd9e4f53041c8040e +81dccfc691305310d17e7eb9f423852bc11c267d159c132fb056303f0a6d019e +bfae033df9f0a36c36d0a207f19415d92695adb904117c1a823e25569fe1463b +10b3ff35a6306baba802f00a141979ab7c002a5e11fa3df9317edb77293a6f5c +2e41ac0aaa204a5327ef48481dba8faa066e1d2aae767c5567b0a1b0ad045d1d +3d871c96edbc221e2619822041f3615eb045df7fed0f292170f63217edaf1bc3 +1e94b7599ade48db9441d4862ecd7e58a38bb147488ff1970e99fe736a4ff0b8 +5b2f2d8886f18f16cd2d98afcca32ede16517c11a5b40daa1634ee05ea18741d +8386a0b3012a35d845462a178172904f1311bae4763412e034630aa78e973302 +89d3e9db109b3bc7774690330c20fe133bfdddcb6a6ce8ec67c02c6914db1660 +c1a4b07c6ec82090ab349b66a78bb4aba3fd6c0c3974cbf5559a5bf76ee4e817 +c2876b0aef26a8f35d984b48c968dc894de003853acd9267343d9679b099054b +855f110b0ed4a7cd05d891b0a81454519e2057c18ba4060450cf7700ef1218be +16de982c784ed61a3f5feb140199d85c8af4b519cb0abf85aa1f9d283815eff1 +c746b5d6e27120444db4dda9fb4c081dad013103ce502681dcdcba1d53a13fb1 +a7e90ba890af369f3808037dcf806fbb96aaad4b71095fe059b7b100bc17cd9b +0dfde9e0ed90d284ce16e6104aaa47d983116cf46870e26caa51af1d391cb126 +59ab4b685c92c68405d3cf6d0ec47d90d7d1da667fff9d4e6a9aea6981679aa0 +7e1421108cddbf3e625c0b9e7c3b5ce513a2d3ba85165d242994b4fc234528c5 +d2d9aacbb4e94b17121a761d1a58727e7d31c72c139a29ebf8bf8805617e28b4 +7605f1a0cdad1454b4371179221dd14f7f5134778b2d5fa8caf4ac5047586036 +bd954ce050eaf0f6c9d17b281f41a1f91dffb7c45aca37a20486562cfcc85d75 +d155a5ba81270bd042592238383cf5f0f82717575de6515dc09eced0836dabed +48c89415c0ffefc573ae775836bf0008dc0f92da52eb11edd02e24e382959ee0 +6105bd5f60fdde5fe40ae2ddb1964d17efa69fc4bc51942dd8cb4f105bc0e385 +c5c21048b2d42014022acdac1176726033c23d8beba9aa3a0ea42bec9fcc62bb +4caf4fddc80971c3df1f69b704a2bd6a764aaa1b5a4cd214da0b0d23b9dea30d +66f4592de613e330b82ef23c3c444ed5fa9bbeb891ff1d87857826bed24d1ac1 +6872bca65c1d8d689849692ab20a473f688fd8ab655f39e6c9b3688cdd0bbbfe +86528c2611c2a8ae9ab3513fc6b9dc27b11d4f99edd43527d2722cb803a8fbd3 +2fefec73d56cd3f21fb85f9e88f7eb14f6728d6c04491ed070b6632f4219b506 +d505bd6fc56bb1f8b2d70adddac6c92a2fdcdb2586598125c2e59983d69a3aa3 +172a43636fbd287cfa688f4e5316a782643b74ca6d93428022639c0aa0640e26 +0000bca31d4cae34a26bfb0e9f3824daee2e37557bf5957c9ea3a4d3fcf45321 +8904e007542d6352c1c6e93cbacb5428785e79c16fa4f1903db598890c44867e +4a62d7e20a13e1a79a0e7dfcb821e6eb0fb9bd4ceb67f89f97fe80d7ba1f1161 +7e97966d75177baeaa5e5be7485489028731c126852b57059191ae91fddba8b5 +a00d23ffb3f72af766fa9bab428535a0891331e27853771267b4d919a935d508 +e9a929402ad6923a31dfb6f780d790bc595c88651093283c196538f44359c287 +03ea23beed247f61954287ae0f9f716dd4991c056fc4d3cb85d86d7d3b5a98b6 +4b9f78047475180138a0899f3ad379f542635c8805c0e3169f7f5eb01a072b9f +40b0cfd9017b3a0077ee3f6963e272a82eb4eec95f0b74aae5c1514b86e39cc7 +5e252d1fbc631f6b4a3ab9de37c4952ed7e07e15b056eb43ac6a82e307dbac1e +3afd5a99c335f1d43d13a4a5a7cc5a8eb5b50c1d2ad638d4b7977c4687323b71 +30920aa018f528b4adb2cb55a1792b21648b647fcb6849e61c2a4a42fb8adfbd +60cf7dfe7d448a1822be20802a4f02a1453bb09d274c3d354e0a401a7be4fb4a +e443a6cfc480e32c4e9fd2e2d9f084e91461e39f9fdef8a6c444f00f8f541532 +274493b154a123089f08f8755846aa016e4e4457c1372739c3f7fe4d4159a7a0 +8ea08010273115f737b989073b65769568ef27ef466e2ba1bdd9dbedd6981f06 +488f6921d05459728b785a402778fecebfdfdce1b028c3886197583be0f838d6 +ddbac65e868ba4a6b0da5f780d24ac59b5a9b2d3cae28b54c5499986551d259c +e87f676e608b743386cca2d98bcbab8501cdcd8ee4f93464b3fae83a9a8fa21c +a0e7eaf6403828a11c5db9cad930b64ff3907f0242416a7de161eca8f233ac85 +0eebc2da6ab01ce73dadafeb8ab0df750789985a5df131f0db5d0de04ebf3544 +9a838e62e2aa64f5baecf643e444c6d584995c1ed5649066017fb5b0baa3bd75 +8b780ea24efd5583bd6db4e1f17e09e6035b1134e699cc455555f2088fc0a770 +b549354639eb6b4ddbfcd92e559cf64f4377f416381bef5a24270daf799a4ceb +9fb17897563c585f1d95b6e932e6f348225286cac7e84c0a602c98b6802e9ec3 +8eebd58f853f9dfa9084611749246639db7b3a8e044ed3ebdf0b93b22d3c6167 +5497428f5520dc3d47bd71045b476f9d615d273948f3bc2ac7735a22409cf3ea +2f369bc815837614976a47726163072955adf8a9c0f71ab08578ff77fd647089 +897391a67695d7af16144dfcc1b2c0d02525aa74848d3e847a3c256af4b8539e +53733423ee2c592c3f6a5ebb264a418587e0170e3ac5671eba5fdd812aa25646 +2d9ad87371ee1811a9b6d97053214dfc2791264a2abd22dd61ed34c29c999978 +6d69bc1dde48cdf138e0eea77038627634dce4d396d48ab02fdcd057b36a989d +3ee333e862a268882bfcc0944e3e5a95c1f014aa6e2ffc87b9f0d4b7586233e4 +e3bfe2ada734b49a3d0fa1e37e2ec2cc27a4f16c8e4dd3c92fcac18b35db0000 +804303c5c82e83e6b77a2394bda35e99fccba4f99f3ced2aecad0f918fa9cdac +ebad615e93d56ade6ff68de3a0f86ae58cd48e5b52666c60873999354183c523 +7d0af065659955278733cdaf560d515274fd4e716991182a2cbd8162a0c00177 +d5bc59b367fa2cace8e20990212daa9a93e8ce27ccfadb521af5dff5263b893b +c95543c5ba3303e40038ac7a776d4b5180dadf76ebf3d5ff1bd8abb3e23266c7 +e28eada6cabecd19c844d7cc48c7c752f21a4423ca8a1c1b8d68da342a85a041 +cacf82dd1e0ca9b5d2a647bda6ef87e5ca4ffbd164a5f259ddd1019f3858f6ec +e3b8c7ca352d93344ba3d21b7010a98394eca347648dd346fbcdbffd3bb2368b +0464257554238f0ebf96a33255d27c659ccecf9e6fe5499d14d9c47857d51f15 +70d22fcb54c09b253e1ad73687717f1b3011bb58ba11c98c9aa344162ae50bde +8507ab3c843146254fcd34d784853dcbb866680060b2ff6b74d165d3f9e0b85e +9e6cf75e915c50966f310762aee1d0dfb82711703dd53e66f24ef1a586903d9d +a5266d3a97894e474aaeee66fc0a1ece417e7355ad025a9f117435d834e5aa0b +cc35994c9a3ce7c5d02292def4a3d8aca84a1393f5151b3cb431945f3b81600b +5ffdc5e1f1537c9a0edb530702471db4f128aaf8bc621cf691eb278b068997de +4473cb2e2349b2319ad5dc4cc89a61da4946fcc47f1b81c2f7d0e4e26cb16f09 +c947373b88e9063ae422a432c1755df8bc209dcbf6412e1ef976d06067e51ce9 +059187e204242e89e330b6c63ac8d111e91852fc586710a7c71a206804d190fe +4c1f7df0e47135f7e5dbddfda87cbd4a19db67d48064cfacd15c32f7d507ade4 +c6dc10fd9aab6b11730f1bfe43172b41c44605faeab81563519bb495f0629c04 +de1ed1bd60c7abd03aa09d5e6cf3d6564c1257d71000e021ae2fa9254f97bd55 +2662b7565c89174de0b8ed599f5dbfc3305346b8f7dc7ea4463004a6fc5f49c5 +0888c50422786e045c3f35d2288b2f13cfa75d409462628ecbe075117cd99e43 +56e7e81bf45ee1f2a3b6d78ae07dde4df4b91efc70644caf7508ffb45b3238fa +055df4ce3661165a1bdee9afadb514a256d6394cd5f89a1aa606b530a2122247 +c742131628653db62c90c677c92f21050b458ef196012370c5a3b63187478713 +d53757a040030974a1a4e2b99a220d58a7556ec46487ec3fa8cbb01e241f91a7 +af31884e515ae5ef0a7a137035896ecdcd590793335321b33b0db44535518513 +d280e3548d8fd60716c5f7d6711e411286cb3a7ca76112203db50b27a73f8c1f +ad3df65c8f49e5d5e991e0140563a311f7b1201ee268a7be8d0fe7b0a6ab6931 +3ffaafd3ead243ecabccaafdf0de3533e7eb718209bef9953584ebb38ccea149 +f5524aa573d372fe20ca59a2155a433d77f45b0162c0738ff4ccf337cc4c3f87 +e2f3fe96234e67e62a1ddccd2d3c639a55970dba37a80d79e9027e8f5c91c3b9 +35dd8d96b08381d92780e1a03915073e8b0b6d6bcb9ca58dfd007b5a64e2c110 +6013d1a111990688453d87f9bfd44f883bb30bf3ed42743492d505aebd3a13e1 +e19e5390685f203dacd976e7d5ddd986f37c69ef053f72b76544444f135198f7 +6156aa33d486ec24041f6d35df37ba62ad0e420cf26bb2f9dacf2d826152aac3 +b466dd4407454fead80d00fb267d0519eeff42afcaf47f8136206101d7769b08 +0977c2b170ef284110cbbfc382099a9a7307406f6a40f24dec60a2d65a3afabd +07a3979ebe19d0538e1d9f43b539d83b5acd0d76b0b18566e391b4d74527efed +ea04e3037733759a72f27dcd8df1260624ed01b4c22fe37765cc60a52be2845a +770a06314c905d332030edd18757a9aa672f2b51191110d6014ca5a141dc9b6f +8d8ecbd2e29a0ce93011bc63cefe4ea87c75c370826de7d6678b19dd2baec8a1 +df6eb19eb963de5b97af146c13e786955176f6dde49c69e11bf11b304952c44f +ca77e6e854451edb47b34bd243746642e5135a623bfc202e4bb91e2c76b3d52b +b87a2f4fa1d9596e4bb84bed740353faeceaeb9f1f5251423734a93d376a8c7f +ff4272dae5f0110f966ed413b60affb6342da5ae3bf3ab1cf02758264887e565 +0dd43639944167b7b1a7af41c20dcfafd6d6625cd9cf46cdafdd7764ab1b2f65 +ed55c92ae52c645bf035aecaaacbb51296044e424dde8a95a73beee94c569268 +dd2a69ebab9fc214855033858acb051e32fcd0615c478588f885db354c41427c +2776cf8e18b21c3858942c377db82a0f2dfdf8d81aa11be1190cf9662f470c99 +d5aea634ebaec150e57615a46750d287a3908e0833c7829de5bc38150e102fee +0b2d6b0d0023144ca7fe204b7b687e272c8a948f20f3daf5f652ef91b717d2fc +62a2f8d858a9221aae47f5d78838a445414e67c6a037606b7ef9f0f24ca97c55 +443f29b102d2dff29fccf78d50c546db43d42f46c08a26f0185c715acbfd40e0 +99702a0f37fd9083f3f8d495a404e5ce271c7f957be4bb4ece4341dcc061c859 +bf2502d5157b83bf6340b304d20d5aaef0174ea96c62c841cb2d39a5bc16bd70 +472cd8cbd6ef444380bf0402e80a4065c56a99c23655669534bc4f15b4e775d0 +e67971be0b6da3935d284a33b3f30c425efeab375b57cf8c17354d6212b2df48 +ed2b67f36153e8c24c20279217607077f58be8e35b65b03e198e378b6c8e0d62 +c1093e21cd3e80bea595617a474e2da2b73f8d3f4a7d04b931fe142f09453ac3 +9776967b9bf5b436c56554f3b6a1337796f7a326012649eb7c4a5d8c61f7d281 +b87497e0a9377d95db406044eb9cb1116008322f79ec941a59b3d3fd7ad64910 +686c7b1397c59dd1e95f9109005aa37b16c30272536cacb3230710ca6618a068 +baf5cc3268b0d0c0d1fe66be2335ca2ff664a6a2d84fe156278aeb47798c891a +6f2c06711f0828df8fa71a40da6d05331ef20ee8655f1ca1fffb87369d3c03d7 +b877eca714edf674b8d810bd4764dd6f40b166b5eb65b6af6ab52bbffac934de +868ac956860562f4038f717d5ff84831764c6ac230327f9de2b77bc00ac7a1d7 +2f8995f2b53bc8ff5e56a1d0dbefbb8b92be7f23c77ed5c980fb22fc2ed78f4a +ad336ad8cb5cd9353a57750e9e489d6b7ece9b581ae5d9ec9d4ce4af92621a6c +5eb93bcfc23a6fc405e54406ad92e5ba2c978b24de359abdf724548e0d41d1b9 +f1321ef53e7c8c2fd5434807a5332aea289490cbe6468047667ffb49ec936ebb +94948b7b93db9f371f85e974a7cc1f64b3a82375e4f22452aec0826134809315 +f5de49e1af5346be6c23fa4aa88b13e14097e8c9b28eac685d605de494caca48 +ab33ec128b43de1df6a225eac80211abe64865977f75edad2aee63f0294ba7a1 +f0982d78293154958b46221178869b075d8642cfb6c02182fb0fc90f59336c98 +dfe9b0dfd86bf27da6cbfb38bc50f4c39f070b46d67e302b2dee2eca1fb75012 +6fe80a742c091057c744ae37946429d53c540878727317e0694ad6f119f296d6 +fa9fb52b6998f39e2404e1d748723593ce3705717e9aa8da4cd371365c51ab73 +c7ecdabf3d12bdf770477a15876b8fa4e9df07e7cfea452fa8f4159676c92903 +f077e9a44afcff5a8e299455a0d3449567d058e04989dde6bc387e41a0d3ace0 +4db2c4e9e72dfcb936f167f21faca09b88d7d49fb5c36d76771d07ee744922ad +07a83c782e3025048a0389e6f0218da26aa1e2d48bc81d7deea00e599410010b +8ebe212c77c8de7500a3994a3c36cf775d97e1d7f7b4cc409c6ffaf369a40085 +9c58b7e0f608e8f2da91330c76ce82ac2f92065b63de082951b71d607f96cb35 +725166addade33ae945c946ffd21a36701bb8ffc4fa8d39cb9e68edbd9e1c1ae +47aec84d719465fef40faf93770a439983b798641da5fa54d058491d21da890f +86807baf4ac80d8d9ecc77dc68e1ac80a4c051095c5732345943867ece9ac012 +47f62c24ad87e1aeca8b708f3f43eb8986c7538e6592cca87c792d428e97d63d +e85e76b2ab92e464cf05df66ca59109685198b4cd59fd66eb739a89b3f8dc56d +c74d14119f0f43c9327c1fba860aef083ebcc836ec0587baf5646784d41dd32d +1af16631e811326d12547f347de76b7ea3c2601dd166c565d725bde5a2bda735 +56f994132c1acba886998a456532f47acbf6a9ccba25a80b921d918905024e05 +0084a78cff03c9c49c82bd12a6dcc7045661228bf1417b2b8cef0941d8a4a62b +54dda5c5485977b00bd924afd406ab054f1425bf8b4daa02e14ec7c37bce3989 +e8d044497d16f130f71e1c901eb5533131d81eca819e76b14494793355df99a0 +9d86d4e117ef3dda74b2427024e340578e711256ed3208f84f159edc47e97089 +092b4444d722ae236cb81e95e7ed393c7f8f8e8dd8d441c4cdd59e28404a1fdc +724c79b879be74b1517fd7383a4de47c12d9257754f2147f2c96e2f2d340dc18 +5985ee5827b60db56cdc1ddb475178c501cf6c54093a90954cacb9889fa9f4f1 +25b5c9865d73c1d6178f26ea9b1b15212d5e557b82dc0189a49100d329b7ea87 +1153650cc38d39af2759951774859491dfaa4665e1009d5cf0ced01acf031fd4 +502be47bffb60f506d627d379c8c221aed2e896d8129d0d6a5ba9282a5ceceae +62422af822cad05716d0165cd5ad9e2984b71ba741638afeabbbcff06ed1a035 +32c38f9930a4ec69c8fb7a240d1fc55c042a8b17d463abbb31510e223a9cdc82 +a665816ae3a5bc26d3b4edfb1ffc2aaa07335970e97982fccb53d9d1dcc5c7b7 +a9ac78cd211c22bbc5d1d446319495e7406c4976f3d03dddd9e23ae9930ba41a +3a5bd01e6f9c4a50f403f1eb9ef3c7d154bb8fc0d4d24d8e03f78dad0e5bb1b6 +53041e3c4e916af97ee103e0f352c7b0456d2706cb4fe2ee380670290b8dbf30 +be19b85a64af30719b94b9fda701ecd0ee9d957cc8f50e591ab160bb00c552df +4851f37d719579556e7f3bb83f29582d6cdc231b6e4a113b7680640df6b66267 +5d678da997d43686d28892a44e17458d95a9f8961004f95bfe23db551a932936 +dae98dc5b0061daf43f7f98ba31a43ee448bec5bcf6e930c8de67ab153d385b8 +7ac6e268378f87baf22c5996e2d0c4bcbd565c25fdc9068c532b3e4ce58b18dd +3fb19c2042c2e8704f678646652c9f17b74296157d051cf00df8d254e38ec43d +2a1b74e8b01129a58365054e3518ea5c7c3c24b31a89589b54f857c08fe82d3c +c988637cfecc58be57d00e645086e6122c120462772ed48ece15898033426749 +c6ec1475dc862d6647a1bd440b8c2423e1c0b016497dc19cc9ba8f47d9dd5693 +5148d1c897136600231612b01e6211a1295148363376b476193f8d101f18cefc +117f388196b67982bae6a369d7ae9ef8ad0b89646cb3ebcc5ebdbff0006b76d9 +77ad05c78d6398eeb1379814635d0136dc5c959cd17dcf71532140aa260a5ac1 +74ce9a126ee57dc3ce117da85247e6aceb07bb6f6c8a5d8bf4f6ca8411d0253b +469752e1762bec190fa694538ce3f57b7261fc046235c49c31fa2442faa3bb39 +b5a66a5743c9337346e5ebfb3bc7e261bd97276b161025ce366ded51553e5acc +d1627fd9b6fb4b23f3ceb338aee482d57a2f16917b7e851c715d845d6acbcfd6 +26f848ce16bcbdbb1227458e176eff81bd51dbfdab790b8b417bb68f7fa59fbd +ef9ae82874e3129328a40650960698ee141ad24eeae7616a277839d32a202fbd +6182b92a35324f0261a042d0deef94cee4681cbcb020084a692e6be06b70df85 +26f0ead1b899daa42dfcdc93720d4d625e80a3569f0da54b53f52b3aae3781f5 +13c8f64a6fac7b9d84795d3f9cc9000b22f4a8fc5e8cd16795eae14aa07dafee +1b28e095fa86cdb22e248a357a5f7736c940d32f7c6a4398ed55a6edf75ce2ec +9a46cc97bafee9600e133f74cc426671f5f96ba2c59a0bef99a0a8d6069b9ac3 +75dcf75afde008a779c713619cac2655e2a74e1c3c63dc7a90d0426c9cf05794 +1c3676ee1810fec7005f12f7e9ee8ea21a438217e4c3443b2119796886b132ba +8a2b3af0f1ff75630ae5fa0a97d9d33738491f8014ca5f5f86b6b2200ff242bf +02f647819924af1c923fe0210a45f0a0fb11e402c080d9db5b9264529da2186e +adfb3b9b81b646460be28e29214c74c9e71cda0f26cf47cb29b9284383aa9280 +631112758671b2a6f81e8f27e0bacf9883fb1574199253fe0d7f7ff7b910425a +6257d802c4a85036ce2e9f54298f5fd6dfde5ebb3c4f24187431e652df733f94 +3d6d6125e577e708cee0f36f75089b35fdfe0b4a7527872730be6678fe0ba1ea +2eceb231e71d4b7efcfccdd06bcf8b7d1567da3a4331e68737089b9c32232a91 +a7d4205f61cc47d6e174e4ad37ebfeedc0ba4df78d4cec8325785444b2c5760d +ecd358c12bae3d8e337d281cc3d9afa851252f16ef1f39d4bb6047a14ad71ed4 +66af6c1d1b4e738030b6e29e77ba2791a83164a7923a5281c8ed0ae914f17f91 +c34a5fe2531a51b8759f60f418c255bb4bafc0f689bbe55ad704dd6ee0bc7807 +7c97373da335afdb7b438d1869424850698e91ba78464a8d57ef3753c23e6802 +42c408fcc3c7937b7b76da2a4e105dfd57a02e1fb787fd18f02b6985249121e0 +185f15a594c3c967656a90b6bf985479fbbd1c389e65c012dfb1c655891565f1 +0bbcb548035a943c89109325cfdbeb3d1a1901c1c8df1493c6646a2399bdadc2 +c4561960401facaf28fa17d7e4954b1115d6f245512fc5e6979802554e453f89 +0f7cbbeca0bd908b650c76bd8e95ef2f99b72188c81c19b139e56578de27f671 +3d26bf7df13750849a2600f77e9377dac6b809c325c1ec1310feeffbe2e2e10d +7fc8263d522b3274df4ddf267224cdaf760c31cc6d6445658f2c83e58e54ebec +805834019cc070e57bfdd4fbd43010cabf1272c06399a18e30d63a9d9c5a6298 +4bbed848375aa6d6edeb1facf00f0003b2088c0d664f07bf7b468dd71829f80a +9deb4b791141f061fd19d5750265f50f237c41efc876b34e17aaed4a66ff42f4 +3b9030100ab0f99adcd0d2bcace56421677a20b14dd3c5786d1fb0df8cc66f5e +919a5a41c8961c429c57bc902fd201114252497ce0790fb16c20d1fec986e3a9 +87b11c2bf2bf628c28c25296ca8e5645585ca73c70ff97932aef1fba848f6e1e +8c78ffb7f429a1da2eff6731410988af91bea394d25ab37832157ad1542e5133 +a360c99e218e7aefffdd1be6dbc9e27549b7e9c295aec8a900532f2456fcc806 +f79b6d0fd46933334098a3ef979bf2909faf20c2007ce50ae64f30f7b7777e04 +f006c3f7350b183dc6c0206e0212610e73826dc251e7bbeca31d5354a112846e +fb34baba9108e2c422a731117f79a7255d78fefd70f7ae56bcdb4f7137f65184 +1bf2f92fca6cec4886ada23d0620dfbc18dd2f37cf3c8825327f44e26622a0a0 +af74a5c0bea07153dd230fc39d9e505513af5f0c251d165608fef578ed7f72c7 +4b79e00680868d53276692574e36cc5bb6b73941769be07fec1efc6ff9d4652d +faef15364e14eb08025f87d4b155c9b056ba11da02cb4e346e30bac5cdfeb466 +6495511de6f626f64d893456df3f0591e92474759744c9e4422b83fd221fde2d +bb2dda9501789947c83ecb22248ebb5c63ae25e4d9496336cae8fd45edadc44a +76fc113a6a42490967962fc816d6acf8db02fa7a195a43e81bf646ffbbead89b +fedb1fdd0e0e7d33ef576d449479560ba25a7809e60ce1db3f379efef3f3c3dd +a5348d6071d079fefb99747e1d3b1d75ff3ba84b96df8aa5b8df3e6f757a474a +8aab4bba5617261eb6d7ec4717addf60ff3bc64405ff6d04b8da21fdc24059c2 +e8362fb9fa780e1290a4cfcdc84a16741c10067a0851cf00f4a9f2b634d0a9c6 +701fef7e4883008aa553848cc552cf01222f1cc70729e7927b77c23ca39b825e +3a8cfd21d4634d10bf16c044573a6a1b20f7afac01d13ad36adcfb1b27424ff9 +2380a6ea8f9e260ebb2a22edc4aec9ab742f1647dd54615855e2eeb83a2489f0 +ba5b9e470dcaeff41aad135bf6c107ea208bc3a932de410b89563cc24f3dc632 +a48d65fb554ad691d453beb21624dc8b06f3a6f63c09df04b0c6f997c13fcde4 +9d649080435a2eb7a01ced0d63edadecb3c5b3644db7a9e86876e4f5c99305c4 +467dd7bf589560c0253f285def575e853de94297bb71afdc2ca52e7200eac23d +72cc3cf81603bcfd7786ded08b193a3a5be9267f1449200df62044b534850eec +90055af0f7795d444959fefaf42b3166d18ed7a20332abe04555989937ac517a +d247c6137adb83165a5ea4232f7717f7fd6738e256e03229b7cf4cca46ccb610 +77ec539dde4ddf9ecd51764a8dc7cbb24a9375f61f63665f4cf20153759f52ce +f8d8a72818937c8cc8ffeeecd2d95d5e5efb70ae86756bf7e831d48344bcd816 +63b7a85bbfab97092d7fc0ab81cdb056f1a3d92fb2639613a7c07b2db8f8af5f +ca4c9365e7678ab160e077708f68243a3caa241dbc642e74e556bb641f453166 +61e71b8ea9ef6555687ca16ab5438bf2395e675cd589fd42e675517819884976 +936375b84014ca8532ca90272759c84794e2618fa2ce3f721e19b8dba0a427bc +bc8509ab9b8fdb2bebee264f77feaace337a901f4b8a09d17475a2baad0baf9b +faba6bbeab91ec2f499e4e287cb583248babccf04615056143e08e0afcadf336 +d981ea1c1701d39122871d135489a4c2017f52fafb1bd5d649df431c9954e2db +8372ca80f844b314a94a84e51dde98787f981c7bde531673eb1a0698e3ae2af8 +1db0ae7d02fcbbbb8671c899177a57a8ab6150229f3675269714a50d28ae583d +ea31c094a8d8fb2b2c6ff3f378c5ebee469a9778f95274ee1018137d9e55ac80 +5f8c078008eef10526c189cacb3bb215e6a17aaa3387fa049b828bcea837e458 +65b8e243cfac3874c168385aa5c5985dfc3c2a91a8efa5803f85b57617453371 +05b2a97b25d4344789bf7bdac389b2b7fcf3428bbdb93e411f59a158bcbcdd4a +f2ee55290ae0d628d417da28778efc291f280432576afd8dd51c18ab474db6c8 +303241be8e86c479ccbe255963ed6d2be34a70fa54eeef0bb22344357cf9eabd +d92759c4d2969a80ce382335118225ac51f9958b62de9e84e48b3f0265117ee2 +89ccef5aa823b4ccc556bbef3181384cde7dfa84fc2524a9a0a9bb8cfeabf473 +23e7c62b5a8bec0311298baadef36bebb41acc81734f5e1a2055eaf79937e721 +f31e33b20bdd8f311f4702ccbc14994ef10a9c77ae82931dd274b79e4686d6df +6d2140da98a03964c30803d97ad23aca01bff77944b279b27564019820700482 +3290036da91525f8bf40c77a2f69418cc9589563890838884ccfc3f1784356a5 +2de93743ebbb0285432b8006b4db63527cbf6c196f92f3caf78e3be3ba5322fe +d2e926f0c9452e74a398045434f5fcee26224312a67200d24c571681964626ee +16bca1ec676e931dbab1c5bc07da3418e91031d29e540606282aedabd0de864c +b48816cb84353b9a9d30009b4d2e771a9083b83bdad105a444c83af84b15350f +0c404f2e2b299ad94c907a7e05bee12f0c10754f6360b900bd5c18a72d9be92e +2fe12c34f871b2f26237e485117c9342ea0d97ff7814105f34c9b5891cf12295 +691e27eab8f94f2875e7ed39ee106c0ecb46b3a2fc2abf591a7298a696e8eeba +e7510cbdeb8eb1fd5fdfefcf6897d5e1c91ad9559b3cdb0eb2b1678c3cd470a1 +9b6439bfd8f7383d561bef2fbe1034e0f89b5fd23c7a27c29786e032483bbad7 +137237aaae70c6cf7bc546c474f8f58c85cbc8e36a1ca1d39b4fa6908f366deb +4d2f3de85e2ae56aabf520e249d541284363d3919e0644eba3e2cb09741925b8 +25d80950b66bc765c1a3f4355ba74f0d986165ee9389afe62f743d8cab0cb342 +7011c58af8dd53d0650d267690cfdce14a0f4caa4790d56fbfe2d25c4459294b +c07b290a48fbbdde740d89a2728d99c91e3247e88815a86cc05fe6ae893ebe35 +9c224af7cfc1f9322deac788b842deb98e0cda2fec2a0c4bbb22555133f0c3dd +b5b5c892d3f7cf4066b2f6038c8a9d335a5b3f88cd99d5d9edced27691689e9d +ad048ec71bea4fc844cd63ab5992751cddb0c4564ce14497fc39a3ad4fca62cf +1eac7b423d94655929cff4e130e49d6d45d74935c99b88d9fb337ba5f6f515dc +ac5f9fa85ded80f3f8456d1aab49a8bcecb6491ae1b5f4b951d07d9a84f3770b +5509b483f64e1afb583e03029c057a39fb7752c771b2f4a2c83431fd8e7d0979 +a6bca68282d1b2f0a19ec106f2397f39805c2847e78cf1c48e988d4958f405ce +746d877848694fa31deeacbf9cf7492926d0d8a35cbf39a8ade9d20f932575b5 +784d53dbeb5f903ce3076ca7b6946178841871344d00eebe0c62b88ed53fcc9e +fb646c0a2faabb002e55372ef6d774df6e0e31e5c83c356ae2b7770205b816e0 +19219f3f977956a16a8e9c641846af41ffc797ff80af609c91543c6a5ede4e9b +e57a4f219362ae465f0f87d0ea1f44fe8d0b09bdce0aa45efa1e689548fc9794 +195bdfd4e86195fe98e44480e79b05119f4f81aa1a79909b8a0a81b4181d0f92 +905e5ee0e2b3dbb342fee6d3adce7ec031845f7991dce84ff7484e531707504d +b43f8186727fa13eea72ed27ced254cd698bbf7a0014bb81d508a1e3ed893313 +3467628d6215bb8e0aaa94e99feab1cf81692c71cd4f1753208341adff830582 +f323ebbc1952bf78b4f595462bdf7257de5cc015e86ca9abac1209a96627764d +2281c8153c30665c2f640dbcc725bb6b6b4d2144a391736b14aef164c6812605 +6c9c32b2f23125f4c310b86b7824013600e1505d1e2d907295281eacceca3b5f +7a20a3c751c2954da414491b9a5033ba2ac0758f079aca125654fdf29e898e1b +e3034459f95ea1c0840d123f0b4d773b91718c60a04ebd4697c6f7cfc4e03e9c +3e040ec66c2bae05929db647cda1f31a82d7df7e358e6acc8733074dcaa9b0ca +2159cfa89abe8cd0319d06d76ea71958f0fb394aa57a74fc310b845bc913de1e +07714575c36dc98322bd02d63c22d5f0c1b717622ce5481ccdce7c35698c850c +94d4289c00c99546e8ae82c5fc0045dd9440aa57f2610c080926a8ecb7edee37 +09d8fe1132fba76a8cde60b4cfe5ca245c928c2c8c06a5bf95f75e38bd14d5c4 +bb0177ceb22bba6f4280cf0a57386f6fa054fb9ffb986b20c49e1a039b15fc4a +8d70b2f1c80c4e868c6909a6b07eb8d23818e1032fcd1325b11d450506a9ed38 +eef839dd8b0f939e674721168dedb8acc403c1373e9932b2353f6187a7dcde84 +8c810b233ff33a33be032024e624da667fcf0f26e3d6700ecdc020e292c0c49e +15dc27d3afcc6079199184fea03953dd9f421bf3acd7c3cc78431c440e72ecc2 +54eb96281c4d3dbd774f0b34c74c8c240209936321094a66c434687a86636dd0 +c88410e62ed43ddafb2c11299f68280f1d2b574843d799d101f8566f6e20ea95 +9132b4d4f6ef4b81dac01c6d266eec5396108743042121ffc9d2256201eee05f +7d66a999007f4bab7bb584f9df1dedeecde27f5e2b56db63d9176ac2a959c1a8 +781aa00e5309ec6e566514bd588dfa0b3f1e60e190d8a88454d175c26904d336 +7cee53d4f3adc6283d2f870f199a6e0b538c8f80ecb8eeb2d67a159201a76c1d +398a59277982d9e8807deffa1a2b108491df8f1dc2c7ea753db86e723e73ecdf +586a827ea62a0acb4bef390eaa33cfc330594a053cf058196445df2ea32f82ea +f48cd68078335fb8553ca89d95e344cc6b4c5e521fd24c031cf77fc32fe4e985 +a7133ba5021ac8c9eb848126eb28285361db1dd3fe1faefb74e334e72be6ce98 +6380104baa5513db56fc91cc9e78578d681ffcd06471f6c36412b945ab8f3533 +826a7249b15f3bf2e48c054def15a757d5d31cd03c16f65ed856adf9d1c8ba05 +887dce19f9e0143b9f9c6f1ff94aa272bf68857d649909f7316ad471f586203b +c7b07d0f542d1d2129c9000b050ac74a8da5a16f524a39f48870bf3612af060d +e131d842b6988f234b64c4e468c826ba068375e1fed793ba354cdb6eae569f10 +85ec00edd5146a3d3081de9fd9c686b23d07d61ffd8a6d8300b7818d7eac89d2 +96a1e564813f919e7672329ee94ad93c106dcff7c73d937d9fe97ed19a0beac0 +20deaf974d7f12319c29bf91e7dddec85a05fced65bfb1d8820d8600527d8485 +cb30440bd4837c8a1b4c7c249121c28d1a86bd999f25e92efd91b7a2ab343861 +31e3df4a0888ad7132fbe1e7d7be23878db767e28289fe84f971fee6b21d07dd +65831a785348053bef7091ee5ee382a5442ca192c9f7dbc9cb5911b069c90243 +d9d59dab191e7d2f9e8f637f21b6b40d9a0c0fd1e915665a6ceca2d8b2b0798a +f7dc8b74fcd6ccfe35753180cd54c0aef3f4993f7fdd2ff1bc4d52e42ad3908b +399be276c22789cc122168932daa7a14bdb91809b6be25a6025177a7cf6b2ac1 +c8a1021c0ac6c9d96dd3ca6c9cf958b106599f5f5b84678dc6540d96837ef1e6 +9075418f5625e261b197696f91e9688d784b58043c54cfa7def7a7cba0fec966 +b27bdc98749fd2d2011747ce3b7435aee2c7ff8c38e45d6166aa20aaa9d1e478 +652e8a3580a13dfd0a071b0efb06e239a1fa7ebf2f72994b2fae7a5e6094427e +82ff78aa30a4cde464eb4c1c8675f344c9706c378f4ccdf40f782e02b268e735 +9c07840ba23910cb50f21093e3687629a62a87cae1921629233b0ec2084c9e7b +55dc81a6ce98a241d9639496a45a33340eba1eb51e3b9728ca9a1109d77ab6ed +a1dbde5a91b9f5dc7fc21e2a12baa5e35e269720e7fcfcc81464404e6ed328f5 +8ef706872caf0a784917f7c892b70348d4c38ddba6fa121b34010d8a65f5eb26 +c361c39507111a3a5404cab35b045c1757ffdf07223ce869989e4df8e614d512 +6c5cbd9206d0d6dc0a1bde849572f0ae9ad6dbb0060a256c62e3a4af2ff3aa5f +7545f78add85ad2832280900f730db61fa4322f1c766de276bfb4c0beb3251fc +02dfa54a5c0bfaffdd90f3e409575a4c9551adf2fc3f7e58c30de8cb91f21b95 +5e29dee0cafb164122978ce356b80f67e8c9120ea4bb7c87f6ed253efea2e3fd +9cce7ea009c30db8eaefd25c683737395d0954d60b26a9461eda6c0a703535bb +c9377a991a9b4e2d3887099a5064d421af86c67618758bb8d2fbd581a051923e +79e10c4acce20b133178987c778df38a017f44a273325f95947e2a8478da617c +5c583b71a95c1781e895163cddd19036022a583d77f0ff4a3cf730769544bb50 +6c58fe1e6efd24e17d1def32a536d7a547ed64e4ef929492bdf4249d98385f0b +18bb0619a1de9eeae41e6107879c3563720b09b14d159bf8154ee0e32fd03b95 +a069d6d0553a2785b9c5b19e3c5c102bcf4725ecd866946e0d0c7a49b2839445 +98160eacd5a682d377a664c7f546fe6d296a2d925fad4f96c642dff2648c532a +87fc4e82db29d89121538ad7a49f26a3ff80ed4d3910a1619a814cfa1480a52b +0775df70cf19d8357bf0f04e1745374dc8c119e6697954793169323156e3cbba +73806b146a27b8b32a457e899ab0f6ab5bf126e8a577a52fd645e261a8170477 +80b5624dbc77abd3f971c9e83bb3f56a63737236cbbe21786b1b3824530602f6 +732b0db25c825c5cad8ef02a6cc03d09174ae97b8eccbe36b08076feb2b60e6a +d40e3263411310be06817b065e15a273a500f4665b20e2af86a06c1c8aa0e419 +07438d2f9407428ceee994c1714231f1e9f3490058aee9cb72d926b0b76638d2 +b229186a7fe321609cad098f0142309112b70a6aa2b996af1f6b26a011462b1f +1a3b725d601137aa447ef65ff2acd1ea35ead0a818f4bf6ee47f436f846d63b2 +29e1b584196c9407d9357734ca4572fd9e93f1f250fc3ad1d2e39e4fe7ce0bb6 +6c2f63efd84aff14b8c311f57f6f167cd2dcced187dda2d4c020c11586a2189c +69c88eeec9a6be5d8c104842ba1021fa490f2dbe7d61c7e7c9bb1552b9ce69b1 +ccf910e42f0d7d883c0eddc12b0c8a37ac3050752813fc0137f326a803c07751 +c1b3a74e9c70f57a9574a09cfdc9753668b58a5ac8e99dc180144f8bfebce9c1 +1b066668776aacb2b2da975436e19920ceb99c1d99204dbc63da33c92725aa74 +040af869d225d92f5a869ac8eb839fb13a2ecaea35791b00e19356e2b9702b6e +2a456746b4f28024aca71bf88a13a8f84e5e86b0553d0e95dcae8c57c0ff27cc +98ece285a6f32cbd53a3119bccc2dd5a3adaab44cf5e37d71db42ccbbf3eac97 +65f8ea917bf6065578eefaeea72cc48714455e50f0c9ee20c89f8356885644aa +b834d0bd9e00a236048a745615b551e6fc405dc8a7c319a22906d73ba8b769b9 +4d131ebfcf09e1ec956e2cb59c2975ceae8a18e2847082eb3db50a8ed79e8567 +cb8cd4c944edcef7bf3d79ff64166a594b20472bd3843d1b0f4bb3902a095745 +a4aa3990d6b38029f646684e323e673c4b4cc5d2a16c37926edcaafbef422ed9 +67dd2f923f5657e076231685890fd6a20a4b3bb5dfb752c57c9eaeca59b2e219 +07fdedb871b7de9b1dfce287f29f596e3af88f63ab5a4647bbd2692625ff8bfd +ac7fbd846395ee6be41696512891814c8b8cd2de352009311c9048e985f075a9 +111c5fa810097975d3473503c3fc251811495af459c61c19761302c47903e3e3 +e47c2bd56eda66c23ae96372cf7cf7b1b429480323008c1877d05b433d20b3a7 +cce5193ce4ae4d5034d859588276b1245427aaef5144a9e8c8f16739a7bd32dd +fb900a006f5dde08cae2a3cfce5bfdcf02573f2ea26a32e8b26735eeafd3c6fd +d22ace1f5121f08605ea07895bcd5f95670460f3087f2e6d38339e2ca76f8d74 +3a65002fb60a7b018d07578414e36e3a9011148d9f2fdb1b764bc1371a069c37 +028787d15511298c492fa04f94b32605ee11a1056093581836c6a51523649264 +90197b5421857347163d863cfec36dcd95bb75afa297a1dca90a2f20887c8146 +00e81a8a2fedc587feb029d62d08161b0f91cf694cd24b8e47d7244a496827d7 +1b9709110b1f56600d813fdd067acb06f33471cd4eafda3b4426346a48885646 +ba2d068db7c7297eee1808fe8b6867c9f1ed9f063fe5e3f86ad85dc061c91371 +00e3b3924bbe1a09f056fbbe50cbc98be7e4030b4f7826c5236fe0a552d65891 +292ef45828706f49b5fa18c6a07babe5f61670b47f4f41cb502a3665a97c3d55 +b9e78289355139501c8f21588e6488954b3dd1593e6e526c1bed631116919ce0 +88ce4e0c25d069c039abb0ef91106f56cbe67363e6f8df3706cddbf9ba42db08 +8f01aac1a52af67cc0817dd8b6c56df6f5c0570f7182bac5f92d4ccf6eb54409 +951d71cbe3d52accab20cc002231536a21f30bc58b1976cbd990335123b0c06b +3d63618711950e4a8ed2dd18aa653dc1a4ab291c59e5200d026bbfb4fe9fad04 +e4468ce60849b1a901990bef630a85d2a8bbdb11d91317ffd6862b36fc67702d +500c7644467dd3150578eb4d47558da10d3050fda0d2c196ceff9f1e14829f48 +6d52b313b4ca276784600768d85f4e0020a34fd03612574297590074c9b9152f +e978f99847590310e1ac25603dfc8b4d136589e515a69dbd53ade81cf9930c46 +09afcffbd8c120c3db2bb30509e9f34546157a796a4bf4e833b77b761944a31c +40981b069936d0b482a040bf86f259bbbda026c09ccb81ced376393bacf03a60 +7aa368a1f4354af7579dcc60629366a8dae3a77ecfd6c68ede4b499c05e25fe5 +fc8e1bbbfa5a4f407fe697e3a7b29d4d5ea6692f086b25885394e1ed63b75554 +800d1984cbae5eb5d55a22c69d05334064bd619cb91923bd644503b60f574602 +40648db564157d5883298769f2415836b0573a53d2ead527a455ae9cd0659112 +6226dad85d70ff172ca2b75610e3d34aeb6a1602f87b05a265dfaac6e9763ed4 +343596d4b3886a3fdfb756b707cfccf3b5cc525baacd226d447f593967ca3c2e +d30be5bbf4f94ecc9790af3a0ab26d22f5f09aa7b52bc707bd7f44284899fb60 +d4c1f91cd82f2b98b075900c1dfcb9f22c49fd6b46bf2fd27d5761917359e491 +457eaed215fd7531a3930549fd4204199b8d0560191eb0deca8a54a06bf1afd8 +a90de82b29027cd605178ec6ddb00a72d30ae7258ef1ab15a4ef91679ea38295 +32798b7d260946e549edd6ba67dadc33bb12c85b83532b9a2763462bd0b9f036 +154615024e9fc4ff2731fae03a8289aeb5927224244aa47608f90380150e1267 +d77d7a7319afa28e59ac026014741eb32ea069ff56f632e14db7cf3b31f9356c +30ff9187ab9e96d55f60d169e98488557e9328cea571cf699627c9d39829c8c1 +dc5765627102f5df3b2062ea2f8d625f322a462aeaaf7d9f6eb5408db3f917be +b1327fb42bfb0b05a23d044527a7430fd5905ff44e5db2a1e39f08c59fdd1c2b +f96c7cb5b562f3d138317e249f0434afbabe0a20bae08dc8388c2bab88515480 +283f7eea79bdefd869717bcc787807bf90f14bc7113351a5e46c8f02c392a74b +f0180a8566afb5fd96e8f9848a85d41009939e48c4b3450139185708ae0b449c +b430c865b811b729dfc107522c1b976dccdf606e351c003c797e02d798b9f635 +964b7979120639d5283e79d862bbdded0573bb258c23ec5b49a00f0d3761b54b +711e3c3c2d014551222467b0805be0fbd2408b40304042d932dcf415d09f2e62 +3910785b2300b8ba14a7e4e7b3c175d6fcf44af8b6f8d0c4d4965eaffef39991 +3682fda8a16c70f75afd6ce8c9623bca29320ccd53251b35ecd17af0ae82e2d5 +07ab6ee41342414c53ef8e2f3d5a5cd03de6e03237d5e1009b4ab2942cc5f5a9 +87813e9d05d23de51c9bde9310c79a3b404b84a2ae3a3ff0670a6fcea38fb644 +2cb80170c94ee71025b6190bbce1d605685f0eaf8f245d8509fb48207dfdb4f3 +a92a4c69c01827e0ca3d4c9dc235ea4ceb7985a7de2e7752daf06ab17d3ba101 +c185342a245bbd8bf9f051a4455b08f683f3457352796423bf1b849eb24cc7ef +a4525d85702a6032729251bbefb0a42f84d3e82e02a0e6939c3a720f039bace5 +3b34dfe5aef01c7c788063c7b2ef66c848c0d4fd18627cc72cbae01b5496f408 +e474c3160c8c93a5bb5c877721de614c7edd4dedde0fe3e945ad6ac3e7bdca60 +a6a7ab038b8ae2a969fdf766073749e0d6481c96e1fdcf3f8ec7bf1368291379 +92e7db66b2f7e87645ba8cb6c7c7ab23bc013e59fc0da41f5d01b983257b5d07 +c749d2bbe145c3d2ab4afc9a2bdf5d8834bdba5206ca13d1c824612fac168077 +821f076dee3ef8b60be78e94afd9e89555d4bef59bf1cf7d00c204acf9f314ae +794d78065781cc52376ae72b9c34d94ef1bd5d94f485fb61254a92f1e7589769 +20bd7d917d7350b2ddb134539e04e123f138c3ec998bdc965053c50281c2d044 +a969b6a52ab79c899c67f05118868811e61c75eaa23af219916408cb9f518eb5 +03922ea88f670e4f7689c4aead90cd7f5caf3f18b6730b6c51eed6db5f69ab2a +60b39bc859e865963cdff924a39cc01e7059185c4c6f593280261709b57df585 +217a1db2572bb95e972acad504705e15bb5dc485f8d0c2bde957cceaa55dad11 +cf6bc1370a279cdc09cfc5798f818cc040806409a21bcc7c65ed9ebf40094ef0 +7a3cbc94321430f7f11e426541b6580adacc374914d1c193ed9667948efd2867 +0add5f4d11b94e99a085117806969e9fe6a8899685aacbad45dc7650d6b93f8f +4384ef55ea819dd64137d59d7952bbd3b7a5453ab4e23ae0ffad98d15eeabf38 +a6b399ea7dcc90da48c4db93b01133c97339070319e08f9cb5c1d64288c489af +7027cdf0ae98deb1e16b036749e4555df1aa56def379e2b3bd31501c89e7a35a +fa9dae19d9d13043194a6b5273505b3ee0d8a1e5d6b141db606b313fbb62e7b9 +65acf758f2a34518b52b54e5b05d29eb8f9bd73d2ff47f258c729158e55fdc73 +a8ae6f763ff5d09f0476780f234429245a21382fb1d04f105c970c230770cac8 +6ec165fef71e4d36f25a909c17bf2913697b34d81860ffdb9215774bc0ad085f +1f41ecfe20cf5e614e172a6f6bc49795ca53438274a2c95fa06ba2396decb73d +c5541bc9eec67d6c5881136f6797b237b359113fbd26979764378790a938619d +a4e6e7a0aaf63be0f38664efbe1b09dd0ee74707b6a8e50332f33456e5ba9302 +82fd6eb66e50f3cee4fe866f1fed16dfa25bfdf2ea035a5b5aed92bf5a96b5ce +be1e905fa4d2c0935971fd383e64b3b36fe42996213cbf4151ad555c9d1527af +d3f25a507d066a8c62024ab0e94edece30b8d14276be082a4c91fb62c42c252f +5d75807f78c4bdab6e154ebb67bdc49a29f76f4e713d041df71eca7cebf40500 +ec535db0ff2011d3a55cf5f91d7337f552d1ce8ddfed181f70d5316743becb51 +bfc4811720aae4fef69de952f0e8ec241b98a5c9cafcf735cef6c08bdaa864c2 +66a5dd370ce11ac7204e339f812a504141c8e1dba1b40cf6369554aa1ecd0ffb +98573bf7edff19d9a3f6fe6daae09d6afc86dec4e97f4b7815bd57519e1e07f5 +7b503ee85f011890941134829e03a45c175425911c255b4ba8f5c312e9ea2a7a +4eb7d733e6dbfedc218c9415193c2237942abcd8805a6291bd4456e12b8a6504 +11b62488f1556299e06375276b7a3f6afdbc25187951e7be879b0f9fbbdc1c27 +4d68c7857c79854e282f9f05f0ae0fa52f13c1280e94c2c4b42251253c1cfbe9 +130836544b44b8778481d9136bc9f246cedf4235d22c693731a0a9ebed89b10e +b4ab3f3fbf4965ab52d9550886806648a5a190c9d403f49bfe30cc56b6071be0 +80a6e046823d4b09a9fe22166c60ab930e19b0c78bd1f448eecb094b27d1103b +4bbf6eecb36f6d9f9b2590ebcd3e7c789f7e5d90590efb1c9b187950eacbfcbc +07a144def617507823f89744a08cd325f42cb77cfb6c58a651cea523a831c940 +7dc286857a98bd1747445618e192e97b48e2a174d06ecec01a21794a9b8520a1 +47e5d49a851fbe1ba6ae4b5fa8866574c7b32f796dd9b96196a0437febc5bf72 +b1bcd473412855994692d079abfc843014a74fc11c7e819604a01fef6fa26e00 +83a25ba6e724985c95e15116e5b0ff237f01213e746205d3adcfe701fb2b29a6 +7dee1dcb0eda2f61f59b9067bf89d891faa1ffbecd5e0ebe99ea5b2f7d0e2e99 +8805179567eefd0a7939daf86dfdaad793d880c35a7189f605cb82daee104a05 +4bca9ac3e3e289b733683998695f3deaccc74ab67aa053991ac898ea46c8ad57 +3c18da405545226ede5d8e9f9d8d2b5bebcbc7672e7beab65cac35fdafaf0928 +e3b52db552e6a9a963d6aff9592c585c1c61a729121950b17c7e3de74b68d33a +c796575af0fcb343de3c9b6cd35bee3c1bda81b3f8addac6925baa4ae4843b4a +945d6441757c885eaa3fb4f5c73162e6cc7daf810085e9bf598de4d6c4ab8843 +98d1a60dfd587845b56e7df2c16dba464a384cfdbaf2f117ba208892f246a51e +41b106294601769412e5eb8a5d9b7976be7d7f075f898b401fc72aa4f7d4f4a9 +1cd2bc5e9cbe59066ad6a4702bdfea12d85b9199e26a89d2114eab0222806551 +6f29a2223e7e754f4a0856e62d42fdd69f5cbc29b01b69d484a0ddcebcc78b37 +6ac93479a4d05fe91908bb2d99f60fd05799e7a9593dfbec2af21a1f64a98015 +32ca5511e2c2b59d75a1529beb2ca6aeb7c9848494db304ca0f1fad1e5ea521b +aa1a3945a25364264a08d04ac9efd04c54acb217bcc859cabf174291e2a02830 +17805716fa4c36d7172d8a2bc58b89fe0b536c7d2dde1ae0f4bf2fa3e63ab5f7 +8e82a3693b70bdd872f187754991480ee06b005aea719abc559112b9cc8ca9bc +5a99bb427060a85aea3f0acb80d562b3782c4a8feb420a9c743f91cdac1b6979 +fd18bc3c677dd27ff5cbc26051ea8009069ac5499eb5095abeff048eec9d449a +02de572bea208fddf04262a49fddd9b4ff4f354a59070f0dfd018c5cdb2edcb5 +2432d84a6f0c165ad09c623d5035a5a53a069d6c608088ddd78c13ed969b809e +a2cf2f2fc238a94f321bf47c2171cc0042ac65093aaa8f3d5e6c9ecc9f636972 +038c4db2d3881533b08b714c60fc06264ae8824552ea3c47cd367cc7bdbc9baf +1f7ae68bab2044a36249915eb15c29bf03437194b0870cfcf5bfe117f3286340 +40f1d1be757477b22d10c0014dcb9b9b239d92570db924cf74f75b2532dddd09 +e8fd1960cee9db583aebcb510ae180f7d9fbe0298849cbd8aad3c6c935718db3 +7c4b112be23e43a69fc9615c261bf93fe2cdf58888f449b38342825eaa9565e0 +cba69ec728c2c1a955fa53326e5b5b788f8e7f3c29ac53239fd230c3186f12c1 +17a768852f83367b04a030a64a45bda862098ba064604bde91d1134e07a41b54 +3a62dc6f7d6f449b614bb4d81d33b2485d88398bf1c3f079f47ccc95e832fc91 +22be41c31d37de9e64123ce4a785e5e002856c7dfb493c07d7811943f2eabdb0 +03c57125919bd26d21c07a545cb6c403f2e6e83094704d8b4c4b83c0c258994d +a4cf2ed8b205cf0e99e7c17d99a315c939cdaa27f6cfaf636aec19cbe51fe894 +af1b495c8a4adb13e5612a50ba55aa4c4308788d2601d8d1b0c3f7ef443d3fcf +2674a27ffd6bd3916e872d4365cc8d6812000db43afea25b9e232426572822f1 +40cbf701041d12b2081422f3977f34c55a203b27bd77f902d7f09a4dcdcae3ef +9bd057b59ddcf7391474cd3d171854c75e225ee6232f23d279272d5c46c91cca +5fd1a1b3d9359f974e7f6e74aa264707dc15651133f924f605509fe844e4b291 +8b0dc3e56841446e24740dd9fafa577edb3b9601e3f97e6698de96f24855cbe3 +a66a078490c3fc54a13e47b43a16fac51f55b993c27c6cc594471186282e87bc +0fd4c874b1c3bf065d5dc33a5799e7b07bc5dcd93c9ab127ebb076fe30aa9492 +e4f9d0735b69614247699f40e763af82c9a066c8db396203f10301a84977f8eb +fabef58fe0d1cb5548686582e05343da04e1601c2d46e0816b7c46f970883435 +42e3b952c9d6ea04945291960c5b15fd1e117468d758e8c9924547bdb71a6ee1 +2116399c56f807be94fbeb2b380f5afa8fc1462962205363135d9e8423ab65e0 +102fa6c1f24e1298d8985a95031afddf7b5ce887ab469d52d2ffebab9109c5f2 +9d8f2f49e8bdcee7de9882a8802232bab4e34e8d1b7b3f3fda3c3e0ad710d0bf +e2f342696262296c17fcb26cd6d9706873c720200de48cf70db3d88870207fc5 +a79af07c2f5f3ca5f72d1e30756828f79e4fd2c0729c046ee7012049de8293e9 +b187374801e27dc484c9df206313eb3a787b7757a09d07464075ffbe4e9acb3e +86b3bf98d0a3b3f1cc34e62b64b3c20f9ae6f46403a5374103872a5885ef40b7 +38283759d083e6c83e230c59605a12f3535dce6c0bc94d1b4aed4ef1f8a60cf9 +87db6ec55b1c1273e09dfea677a042bef933ee3eab1c70f5e0d89dfbfa6ea72f +bccfd31f6cfd2fe785e25a7641ae64099ec3cdfb9d44c7952ad19321630e4950 +c2f18ee6b79c497cb7eae5653e70793addf1210f59f2ba045e1da54da203444e +171cfd69fdf4e2d6a2b2b3818671460f13f3baeb16c74dcf15294beb10d9dc58 +ab3b68cce19d475a1f744925f2ab2c98378d055910590528e5e4a345a420a127 +a8c344f2de44e5c920af6a097e28616763c0e1255837301ace9385b9b3a6d183 +51644ca25707dc7877cf2e1d75654037ba2c901cb17dc20a0996feba0c300e0a +dccc14f5627e78edc78e0ee724865de32df321507d836f4c4300ef3f8df10e4e +f16b239e81c0cdcc09ea6e16d13bf5c1547c9782550b9960b69da628931fa059 +cba2ba19596e89ee0fd7e371e8875bc3e699e658292d5c98557790672c4d8575 +c422236518d975c0dd04bc5c7aad9068b6727e9eaea3ed58750c3dfb5f44d402 +7ebd6f999f2561eac8ca0b8cf85dffdfbe4430748b61687d081b9fb5bf680935 +f508c3f8fbb8a11195b34fd84296d8f287be9125eb07feed2a2bfc67bd859a92 +6f1ccb0877b03c01bc7e4c6b23f9437457820815c9f6ab29daac3e70ba26a930 +d9e72a016879c9a3c94423cfee9aad7cc2a8260aafe22934d598f6fcf9486358 +2ca9d1c7dd4b1aabadc510f32b1bddaf46a793ab8387fa35789b95c403407057 +3de85134887ee8782fa1077339c2c15dd4a422799181a2fe5c12f53023173232 +8d55fa22ac0ae9715ab0b7099b16f3fef04ea520b6f47d5d85fa9ab283013ebd +393ce4ce00e278d32fb2c7a8a99a3f1204fa00d0c29d97337d62a7a40797bc40 +a6b1c62850f01fb78848faf013ee68bca04b73f8496ddc080d9b88e3255bf0fb +c47a8abb5e6d226fd7968d374407ee1f62f97daf3eb176d06317861362470930 +6b82963ef3fb041b6e1674b27b51ac050d5a2553bb727401c18e0b6eeae36fa6 +a0e72fa5e33d826866f60bef7865df3ffb56ce090766ffff91ee7b53725352f6 +8621c3ec188d0277ce70351e6480cbf5924fc1d06ea36f074c98325d50a71999 +094a46d0bdd616918ea1caa0c2c3171e9bdc99793ffdcbd089548e01eeaf3ffd +503435f5a0f358b7c9047ce13a376ac4b6066aad731c77b1e42a4121547bf59b +a3b77de09cdc654596d7c61879e966959f6db7dd6a47ac72aad306debbefb63e +9c6b0b22d7460924984a0ace838a5aed898c3aade3ef4f1720d313fdda7afe5d +ed8a4544887248420d1031c2f7fc041efe1fe665ac31cefee5313208205a6cc1 +420fe6537658d444cf777b91060664e1e858119f5981b1093b1da0d3baaa144f +a6b9bb122f366a7072b1a90b37bf8273020bc3c722584b5add036c9f41b7af7d +a3438cfacc49bccdfe40f2341027bd5b4f71253056f548f2432b3382744d64a8 +0c4dd6a927d2f4c25f95640879fd4624f8a4412432f3a141044bc5590a383d6b +78ffa9ef6532503043568638073b7b3b9251a891c66997a29446f248912e54f3 +c77e633e35ef949a294e9893cb3a7667c9b702834a719e77596293d6a0808d42 +33af22c24dbc79fdee03c1202dd25c6d9b8d77ef0cfe91e73e990fa433fe862c +b37a869ec64fb2472c877cdece9675bc44c36c193b04b1704372903b6793612c +0f25bfe42e8bb77e973c0a34bdd3053f197985f778f85b6576c5b4d1fb3a4a11 +e4fb2097bf97574cc61879e07faf24e95e613eeee0cbb6486b6df009ca8fc9e5 +6d0990d063707742a4f86ebc749ba0fc11d32b644fb33a19e65cd4cb279d7fe3 +8ac2c8c1dc675b503de88f585ba1fc1ecfe65a2a001d31e13b4f379e897e88e1 +dd99aa3887b655540c19defdd905a885015010a0dcbaac728ffdfac2674b0b51 +5c120d286b36b83c33dd9489a95ba3fd8a80e43a79af1f9b6000c005443ecd55 +cf2bb3f9db6c60abb68f9045bf430bd975dc44d8ab8b04f7bd99bfeaa69d1fa3 +63bd2e95a923b87e31861b40f00e034bdaeb7ecade4842e18319cadb57bb3ef1 +fb21af222fc38740a672aa2f09b8189eda792bb761509edc6be00ea9e5fbff4c +bc311d76227737f365997f32ffb54ae3a654c702ba37c983dcab97ce701d3341 +f80a3749b6fdd0eb3b0219d5c6e2ea70ff3602600ecdb9a4574f50c9f358ba4f +daa94e17fde26d02c4e4d6e240a494b0db39e91dd25de59d2400005c087b1222 +415e7d58406dda24764e2bc931aeca21d5786002595acf98f1e1eb29cfb08ccd +0cb9deafcdfef69a563ea426f220974d7a6c106cb1a706a379a6e6496f676d07 +b3e42c0d43a81e0d69180e92990287c8675bee5456fe8fd2badb6e286b9ea0d6 +5c068b902f5eb5f795240d5fd8c323d2fb6520dc7df6d0a54daaa75793be9e5b +24cbe4e747cf03e87b49c7b7e13c4025ba091215006cafb182fe54cb8bbf5fe5 +98b093e41c6b3c81a647148cef0405e01e4249972414e14bbd31e1f07ed4c501 +b189bf67df1ed853bf3ee7bfe29fdad50c580fdea32de8e354828263b48e60db +43e8e53f4017e40b2498472c872a6f4be787bbe9800cdb298673c43c9215af6d +0e4183b21d812734b808efc09a6758d1af27be48d6ee8b0b9a62c89e27ad5a09 +af23e80a97eeac90259f0f9c141bf3e3a5a2d26ca8bad6b3c822b1f38396084d +9727bc89ef0c7c326bcdfa8c8c67797c9c23324b7c307d3801c65056a776f200 +065e28a4411e45f0854f65dc995aef0f8b32a41d06a4180e8be9b6eefe7f2c40 +e8670990bd183275742cfe5ba7f440a307b884977cd806b06f3170484c4d8b64 +36c50ea97f9de31c561e42fc41e8bf5353815c3b9ab69feca4a58a835227ac15 +48dbf827722c7e54ebb4caf49b8087c49b26815bc0f4d3c583b3784efd5da692 +14d34cd8eb2d157117ef9097c8c179d7b276cb955c40f76145c2a7cd16e96ad0 +219404401af7ae017cfc46dcc1d45aee0703e8f4e49c9b24e586b44078c8f6c6 +5534268d42f8c69c63fdbb9c7bff324d4d636eb7cdd87d663e58d34029f06c68 +96c78ca6e1ece2709e1599cb1a7ff50cd8a101cbb4b638290cf66dfa292f512b +f530090d55586ea50c8e680e453ff81709bbb0a065849a6aafd3bdf2d4c3fffc +1836fd286915c1f3b7e7b3e385bdd5724b9ea5dfd4a96c48ba99a741a3eb9bd6 +dca2d55fa9d6b3b24ec4db4b51e20aa02edc985cbe72d8f94744c324206969bb +135fbafe19338ec4cc58aba7b7bbd4a744a1968bd4575a4fcf0a4df20d23bf58 +d60144b90978adfc88d6dbc27826044d71aac9fd9bd4e525d1f3fe5d7ae1238c +c38105de36faa66669dc60beac0c1d16c224a64704d894c1d6fdd25818f3dca9 +5b780c7d6d97514e81c5ab67efc7db61c4e887a3fb9478b8396fd4071c595e39 +eb91354996afb918167da670f7cd93ab190421f6fd312a71ef8d22bc4c1b2450 +900f64de452e402e2a95a00efc8ddf333e3090747e9d25e59d605888db2dc1ac +0e64248d089d35fa055ab9c0a2ba29230fd32a361a62b7a2de29af30c2924c20 +3bca99d971cf1e1398a0b3faa77709f8f45ad7ae1f3fa46ba557c7487315244d +aaa95e311b51a2a95cca7d02c1fe0740c0319fb6420a39faad0f7e62f49e5b7e +15078f67c84a263c25ad46ed4a719bc818ca65ca902f3a92089bcbad1d70f341 +342401974a237264db1bde6f53bef11ad4cd8d2fd658ebcf4e7cbc518d9820ea +e7a444845aabaef33e41f5dfad3810dc5aad76296e84e7a7449c611e369740ad +22035a41de39390ecc42eaa33601d4ae7156ced8441d9337c8f9629671e6af80 +952ffdd84cf6deab27dcda8c98d4f4ec4f4177f399d32f269793c6505a290fa4 +9a9bfc3d512ecfd473f02b228b0458829946290e6cac42c6a6b166a1a4af116b +0127e943066daffe45a1644a2ef2debba03109170bfbd2d171a12daf1a654ce3 +d4898f33f91c200f4b3d607e6f36b9357b49dbc68afb59bd286a72644cd32e79 +c1ae46c901d663c9f541d75d00815f5032437dd7ac5ba38beca82934e426b5c0 +ca41a30bfe05abbcfe07f124779a80646176fc9a0c6cf106e4590c213e197e37 +e70d13a2eb789f19ab0896eae78c33e9955e2b3cc2e40c67bdebaedf4545f7c1 +2a52435aa8b4bb77956639a2b4da866bf9fc29239d7c34c69ab773a9f5ee36ea +7ee2c3a6382107af28a907ae82a5c87e59f89ddc02aa844859c4282a4c56a11f +0a2f6f7168e1f05069643cf7dae56977328fb193dbfd9b379977ca3b5970f73e +a5573a4cc22c6fcc9d288197fc87a947ef0562a957373f7e69a1b433c4d127af +c1f8a07f25ddd79a5ce2e0ae9e7d6b898902b089b195c7f6853e06ec96776956 +43c1b3610930aedd28dbea646ead13869b6c8c4ebf3db19e7f9fa2f39601219d +0247265bc4f08a8c8b7a517e6f19c4c957fa20d2f530cb071e34253466d4c419 +049794a24704be35d7a5ceeb20527f42f6efc489e8c4d5336743c540d18a0278 +8eaa394869fae6220dc3d92d9fe0eb677ef7b409aeadd2941655783742908499 +8a1cce1c79a5e6f14d855b2b115fbf747fdaab08fa1d915332240f302224c6bb +0f57d04da808199ea9ee1302583bd29b506f0301ecb5bb856242adeb0b6f0515 +946668c44e5f73194242472c18cce2384faff37ce47f72c4c7f48e3d3e5f25ca +3c5be4068638de593f0dd3b07494cce4cad60239b6087e36ac4bba4c6c2e05c0 +e155f9901bbb5fd67283cb9fa73b3cd75f2b386172a0c4cf934dbb5231fad92a +ce711b216559cbc445c00e95cfaa60c1a5da1a5cf5a4b97c77de283c42acd379 +5a2aaf9ed6b90e4697077c894c6c81d4ba58e936bfe90b28c5cb2ffbb8e2d0f6 +f422adc721bcf540ca85c143504c07230f2faf0edb8182165327833b5e979b9b +296645369b06058723752287273842264ae8f61d71f0f263222f5776c8bca364 +ebc04aa4d33afc3efb0c0edadcb0eeb62105f82f163485ad5131fe7a54852215 +91c62be354f217480e540fe31bcc236dca130a92cef0455250e971af8dc82d2e +613d88de8045c6f65a82c9cdb2ddd3fd49cbc25c968c7ac7161e6bffbf6069c7 +638798ccda88750fe9db4ed9dfe1077fccd87042be0c65f70f5e4754fbf3c21a +9e8a1b5439d3cd236c4b37c97e19f4c0a9a6979fbd8bd4236ac3a386de884dff +dce651e891905f67ce0dde6fe7f700a0bf1709f107066330d49818af75cbabd1 +30ecae0b9186602318dc0e04546e788f9c859a46f21d96a35600bca815332b05 +1aa88792c7f12662007cbdd5e5edc7d7e7aed096aef86508feca451deaf04ed7 +75e245ca6d6b327131e1d191182a98630e3addf6d61b73a8a7794c58977a70e7 +e1cf3ff8c07380d27c14c4b548faa3d50529bda080e01072734d158f12921c29 +3e971395f1d51e1c895e30a890e1ea528522bb2e7997abdb670b6497201e282e +49aa106135da1faea9fd2cc7fb5f0f18c39c41056e77820ddb96dfd7f4aa6a5f +cfa2b236b65c3d7a1b94c17a452781dcf10e1bb8f9c47bb38c12ca26f2071779 +eb9d2da5125d5a0fe1de3f2dc7af6935f3b200ca31653fda415b72c20b4f4244 +37fabb8ca560acdfbffcf5e3acc42e0e93d7f9ec3c7d4ae2320709cb518c57db +ed1050a3d50d867b25d5ba22fe11bafb3a389669a4a8a009f9e45155194c52da +094d1fcea400e26341376f8acf3b94d5e7d67d2335188e2753a59f33507ba726 +8de6c27d4f801a7613b3cf81ff8a01a25a774af4664c97901b9727b2df0ecd0b +660ddd448054ad5d303832cbac4fdce4edadb681c4077b9fc7ef0296341bf23b +a5d0fb363161c1800565859967e4b8d5f6548916b8ee5ec6ea5fa24fdb01c559 +0c446ddc6690bba8832f47d81f036df3f6775b2b45731c70caf3a73b009b65a8 +bb88e1f84c107bec89b6f91807fb38c317f50c8f086d5668866757e2b7fb3ae3 +758c77caf8105281fb524abe0d83757326abc13e7cbe03f1131af48652933fa9 +5cff682f67370afd20c323891c899395a78caf0a3e264a23d298ff26d1f0ccf2 +52b98db9e77e2fde9f6967ba381ecefd38f8d4c9b82e52223dc59e64fbe91ebb +e96921ae0503ab4c2c69bf8611a976dd6fc8f0176c7bc1dde59394c0488faaf3 +a17e05f9fc8f540151c548b31bcf2ff97808da273daba5ff26dceeced7396925 +5282dd44413a113746033d9b1be1a7f0b496ce526a9cb4f5965ebfefe9916773 +9b3b6b96d1306fdc437685ba396fc321f60568baa5f7c6ee935126e2bd1b2372 +6574a7c3418fac5849480aeda5c842c371d50eea3622e71e954d76d9e5a88de2 +0b007c6da002729dd828828570c6b01cb24fd6b1026c89c723094b07f2d73c53 +69501179cfb0c7fecee44a285ea000a0bfaba12b43d0202305eb267bdca4adba +c507da81464fbf9747aecb18f6fb51e630982fb4781761a83089375baab53082 +9835f1792b06a5d7d679823989125d1a8acec477cac62a955a6bce844cf044b6 +d8924c9f103cb081486d0ae37b22924699ddf84da3fed45a47d0da8dae5f4cc9 +24ae7108c98d92b1277d24bdebe244b47fdb57fce73e81f2d6f9e76decb460fe +ab89f5433410c7d44c216de0d47abbc185e094dc6edc6d28db9d1294c3f0e3c1 +56d7433f6a86c4e0e0b17d706f98fed922770c79e9fc898695cee016db16bdbd +ef240e8d322b083cf54dbedf35bfaab630c389f8b7e6885ab022facd86b5ac53 +720f5f47a22d52986e83ef5de7fcda3de9195072b3f83b9f7f7bbee3be5f4a7f +1d2c9578f624701f3326e21afe9b025c13ad74ac28e874e3d68723b2182962bc +2ea164714bcbac4c16dca946f226f86777127a63a3d27b246a3ae6b97a4066d6 +e5f1d669c0b0be268ee9ae3ad9ed90e4c42abd4e8f0e2189045748b23d306c8f +484095875f015217efa3c4a5b250b1f3d876f867a6a7f5273cb77d1b052a5b24 +a6366aacd2730cf1139cc90fb810bd6f63450a9e4f99212fd4be6109a315ccab +a7ae7cb65764e6053b6a0329b3362c2c5a4a024c31cc2536ac9b7f0abdf6eacf +5ab2ffa6a0afe33544ec34b2743871ba2a8ffec2db1abf85c1c4258add6cb4c8 +08c6168fc3477daefec48e975ea42b778b6e3f6c0201277d51a73508280c39dd +2d4f294df05244ef34b7a8425184dabd543238534305a565837aa8c07b9da716 +5bbfd8e6c359dd84d88444bee23e433417b332b42c03ba6db254f6add019b203 +acc88cbd47afc27ece511fc6233636872e32e6bb88f1fae33cb00dda9fcec463 +1fb3530530ec2dd046bf6bc81794e9664a6554ba72d6e04f15cbcf4f04195994 +4b601045c636f873909dd4c8888b266fda8fb482b8ae4697b9f0f99b2272b0a3 +5e4e693417db2ac0aa3c089dca2ed300835710f217df2a972b7b3b5995c4aea8 +06a56b69c98dc13d33d087491f498f588c5191cc3b52092e6f768a62d9a16e1c +908f31420ceaa2da9c5f9dacf672e64a4a9d12cf03f6acef54b65cd9ca5b45a6 +065cddc001055326884f9a343c6f2d45a0fc47e7f3a13e8edc74afb80ee4fd22 +09e0460bc21e5fb62d1eda7b537161ee1bf1881ed08d13cbe1d96aa4452d50dd +f245b49ee073f6fa8b4cd9d85e9fa2f39d8fa2fe77b562a637183aefbb719129 +8606e92e9f5027dd9ea6f1bdea09fa35533d94296e8444383dff90106aa7ae63 +6441cd4341e0c5376779c649507c96e228a6b330e6dd713662baa1c1d44f7916 +46f9e385f1d7cebff228918bba1632ced4841efa567e87abf428074f7e7d2fb0 +7fbd2c7c63cc7a815237c3e254eb83c8d610e8cb3d7ccad60225fb78a30b7089 +08e88ea635b9c5aa9af7d4cd86083be33c863f1340235b4c89fb3ca26c00d515 +81fda7e8e208a6501a4a229785aadd38f0a3896866efcf1d6aca468ace439f33 +7bd4c1f8843e329e4e64535d61b7515b517fe4ac5011c4e854e09f534ce4536d +bf421c0d4aaad92a8765ada2502759caf8fd89321ad45495369cc2cdb76b3e5a +7429e3df9d4bf89437b6e1e3e2df458e5826d0cb784249c240b0e3313f4c9c69 +10fe12e0d8541d6302d69cb7be6b4fedc27ff2db8096b1067f321f17251eb7ca +7f770b39fff0fd6e11ce7983ae0f133a7c1bd4f79c7045d01851c221a7ed8cbe +a70dfe0635df7dd9546b11f628cf2bf465365a432e49399cfceb91df7bc444b4 +73542a86d2616aeb9683047761bd574ebd9ff0d5129de4095b493bce740bde97 +f3af033ee84b26e2a90c27f8fc5e805f04ea24bc07389bfde9a9fc411ac97dc5 +76b3d959fb2a2fc97c82f98c4aa2d20f9bb080bb22c8fa28e9e8dce4768d2457 +74f85d95b9c702f825ce9dad99db2b0688e040d3735e2344cdd878ff5c12f682 +9eb0aca1ff54d8d1094e0469e920853abdb071b47d294f45ab1156e3ffd8e967 +2c3a0c805f11bfaffbadad359cb8477bf88f6e6bf9b9bf8c4221b6e1aad697a0 +e19280477805ca6c7e0cb42dc34d2d5bbad2ef17b10eca8c39aab923c5ed6368 +8620655fbff0ca06f78da47892a4fdc80c7b06d6d44e533c32b612c1a0e4f77f +2c9f14d5cbffbfb9d4f0c325bd8f0987d03cfd66f11bb6975b265573346cdc39 +649d34b36a712d5434c062814e459f53fca2274bf347f282447a666775710b32 +0945d6d58cde2bfc32670c58e406b4cbb71913e86e97816811d0e595cf173dd9 +077bca0a85a4afb70b4c73ceaccce3b7a005c0133d62c24465eee47330898a0f +086e140455f8b8a543ad1c380d9a12e3b0335dca4a8a3dadd0407d8500ac41c0 +dd93c62dda3bb3a48f5dcfc6f4d47e3d3f0a310171768fcab7a45185713ac5f7 +25b321ee7c587618d52177a5d1604dfb3480bfcb00ee1417da1f4821eda3e2b0 +c4af1b06d805c6bbffe266baafd8896cdba25c79183a3a22423ab9a09423fa01 +f36ac386cc6c96f43cf35786e608d1db9f5666711400153cf72baaaf9ec43a0f +de0ec9473756c4069c71f68585ca69f9fec9389cc72a67689817c9a49caa6606 +c6c0d64d5819b3e2e2c10babef1845b54dbee07e37157c1faee00683e6b9252b +1061ca1d360710d428650e3e0034c30311469ba0b3ba1f269bafbf859c0a24a4 +a74004dea31d053648547a6a387a39986e2d0f01fc3075d543f15a81a365bf45 +fc479404b12460dffe09eed89de3857905e4ab4d118a7f650763f037a126f6aa +1c46cf544b984797aa008f6e6a22f977b7d5f26ef193524fdad363f7565af63f +f8bbe48f223a2183fa946a7b4bc4791fbd51cc09c2783cadfbf14c5d8fd3365b +010a22b063153f052aede4ed053b320a1d90b95810f0df42603c69620f5db814 +41749d8a3e1eb2daca14eb38163bae505aaf2a0b74422c1a0f558996deda03a4 +bb5d3373573c13f7ad774cd58c4bf54fd4b61c8f84d5706256771bbe5b564e3e +bba8e8b57dc90530da519c30b411d524f0797a2dea8df018bf0368b06d383cd6 +0fccd889bd5c7714a78fb05e4adcadafba1b811ed30d07dbf554b80c1fcfe457 +0cc25b9bf52f8a8f885264d622951b5a9ea219025861d262ce5ed49a1b8cdfe8 +87b2aa827e537a14a9d410e8138fa2c9bf4504f5e8a6e07f29aa7affabcd3034 +be41e99173b9a126aedebb0c3b98034b406c6307771316d11630ffdb6dfd7544 +7f33e2fc60d08d6c7e8e14046649d1e045992b9873eb6fd67732cd573ef64fd5 +32be64c35c22c70533c0711b738493ed8952131f0195eadea46f2debd5153582 +c9e5a41fa3d3d415a5dd4b553690e134079cfef6532c294caa3e382b2ea44315 +07bc8279ac5fa05aa6d9792ad97b43128a926623f0b6ae106965eef6060e8cdc +34f122de8e6a44c0bf143600d18cb06f1fdeb44fad8e6f6be5ea5826a7465576 +2cd724585b707f1d8a65db24dd11db1df02270ba6fcb85827873c44db207e49b +b48377b816b122611888263098602b018d02c10864d53618388d302b2f3d9ed6 +3f1f99f0f9d6867c2335a429517646446b20c7448be1692a6930edc9634a1981 +3a8794dbce163183283325f4f7a22579b583c08ed31e09401ac1c4e5134d7c1d +46bcd3e96509bc55e2f9bc2d369274b42b0e1b7c5010e85d4616b7e33853ac58 +4b5074cd86131080dc4af2bbec6e6a16082f4aff5d096bea7dda3d0258038b8b +ff728c668b7c2a9fac0d13b5c7316e25edd546f11c82f22d4cbc99ae85380c6c +24f02a8ad6b2cc7783b0eade2b8a6969840453e4c602876a997e0fafca069cc4 +132c242cd64cfae6830fc0d5a448948582c9fcab91bf974a2a825b4cb0b90c5f +1b6796fe4ad97a44f0c6b256a0074f52ebc38e01605b7312f20753be26674aab +b834c1449d73ab587132cb272107304737a205fbe27bbed3e16317b98a9d4d02 +50fd70489bbfd6659f2334944a12d523d5786a8deed50de17483451f8b7a9b6a +c4580aee19650e7248ec9c428060fad2ad6a690059af557b742cace74d798cc1 +4d7d564b891ee351710eeb186c14c8f28a4f2e1e091482b5da2b7b9945c02623 +516a561ac247272f29363039a476477af38b220370cf52c01b9663c8715a1b19 +a6c3ce4615c3315c42a32112dec4e8f787db1d2597d6730df5719fd3c80c6b60 +38eb9257cc35e9cdcaf7e372dbed0408b52da536f52aaf415bd22f073216a6ad +89341fb56d55edf63bc9204c9f3d8388ca9b69722ebcc4877e66dd016853c724 +967f85cfd1608b3102480f9bbaf67c282b607a7d085ab1038050103f8b3250fa +f6367891e702961a358fbbfcfff8e00622ed38f38679a8d932603c24234d604c +9982c80325f242ec98935015ec484673fd0fecad921587553b51495f8b1683ff +a8f5d486da9cd9f19809f8b48582a5f13e5fe47ce4f0dfcaf4141d385c7cccc5 +88edd2c5ba856eb262a912572ca4ee11e97ba0986722f891156e3bb54455b4b3 +00823ff192e56b505222f0f8bff3dae7a616bcc82c7c35338040881a3738a7cd +eb13bcdd975bced0598c196b7047f405549670355a3e036991458b0879b8f527 +905d837faa3f71af350896a4bce0aa79d036523047582aa5790376f73b3f6af6 +d37dfdc6911b8356c624ec80ff2a5d64bce91df76fc5eac9d4a88174270cbe88 +c7a25249b3e0441a32cf77dfb4bb1ccef4d8da4cfedd10aec8988dd5aadf4d6f +ccedc69b3fc8bf495d0a032b5913543cad5d53f3dd544aa8f6e624f74b3802d2 +61dddc4d733c186c0b5216408415fb209dfec8d72fd7afadc11a90061cba10bc +0bf75e9a94c29c357fa86b075607d77956fca068ce3547b1d7fc1292a61ca42e +af32ffb1b8b57b6d19fddb88e353d6f34c5b750371928bd163d96e6152aec8cf +52aa38c526fde8e3b1d9a7b36664218226e22afe65745cc2bb048841538c47f4 +8dc004790909516666f274bf492614126c9a4aab105cb84ca2c0dfce5de10a01 +e7348dd9fe9f5407b5b1579557f9f9392efc55948e5ede88ec14c0eef560556e +93e23eb34a8096dd59b8537b4528aec9a289a589fcdd7468fc93e34f6410ea7c +3f98bf61bab76d317a82c7fffc6a430d046e58d915d91878091be8b45a584c94 +e54a01f4ef88ea45a00b1ccc4f857ebb1dfbf891335d18951c8a26f4e9bdd0d5 +ec03dc440c2de134722d177fd7023981198ff4c7cea5c71a083d4b00296ee4a2 +306d35eba3a2f3446df72a93ad1bbea7b809601f880dfba9347a444a21281bcc +32145ad0b70028dbf7a0e4040fe3ce15a0fc68800b52ee68416ee31946a72556 +0af9d0167e8303788dd92df4f63eb08ca70b57bfdf6e0e5f96e2b8b9074fc71a +3c9ba68ffac4c2f71b57a0d61aab82c3dc0183f161c3a89ff0891d8d842b000a +231b09894977c82ee832ffc107c89c46e1f2565b928f9ad809d3f8326efbc020 +db7f89eb4d080545474601223fa89a197232f7727df89204b39924c40eb278b2 +f090b437ce0536eb54a1f63ec89c298c84be1e3e3082d7036e077bf7105b7201 +3470dea8519ba5fee607a43808179d81e64bdc919bdc8204a6c9c73f46e4b7ba +d80c95120facea8b587d89f3b2a441f1635392f3999902011330fb62f894ebd7 +89759fdf9b0207ad11f2ccee214d9bfd84adb080fd1584be34dbabddeb285312 +f80db60c8342868842ed0373f13b2a0ae4ba93eb3fa3a2924a90178727da3e54 +5ad6c687e0ceee0856495fc44deb091b4b4ae3144cd7aa997bb4feb0fbeaf63a +24d7ee4cea745b3e7dc22d933d83ebdd2a52bc2088402a711acc35d4a2d7a73a +32381c4689e0d170589b165af8a44d5da8504bf2162b0f6ed0702f5fd4f4b8a0 +2cc97015f85e394017add193e641f48d3da38a8f7beb2acaa427abb6ee1638ff +f0b901ccb2ee8e48279a2c5418ea60d6aff41d6b1fa8884a0a1ae00311ac6875 +df4251892a0d3a175ff366015975d4963d72b2cf1663024ca508882a40c0eca0 +2a4654da02cdeb7c2695624962432407533a2afc9785b894157f265de0db13f6 +1a0f003d30c6861fc289b83a12daf1c9fc63d393726903b0e45f26d115b2fe5e +389119fb52dd5ccdd3db8a54e533e38b989250566f1398d022f970d97be58953 +1b9539c82000c6658fe5686deddbff23bf9d0dde66cf2b08cce53726d54cfafb +97bd8eb89e61f337d9f8fe48db6e1dd248bdbdad9c54717397593267bf8d4bf9 +8b56895abe905c161217b635cacb13657a157baeac6b94bb1981813d1f2c1b71 +16498f178e5ade082a13d698faeb5f8a1700d6d0b23ea18c9e43fd0e47fdfd68 +2e6348c99e618ec675b3d30628b3367bf475163ae9e58409c5ead362403a0b42 +ebbe0caa922db66058f0fc12e8dddf0442672c40534077c5a0d44cb6bb9b4741 +59f60296e3174e9928473120990bb64b1e17f0f10f131986176ed87ab7131ccb +3855667cb581e4a99c66705812c2ebd35f329c93c4f12e4e295fb599cb741716 +d708bb68b2f6705e3257c64c914d226f6f8beb279996fe8fd8bf8176412e686e +1699e1217d5939503802439092614b7574820851901bbba7bcb62b368e5d7b48 +09553069d909438fce067d5f3115738f677ae610e3402153839821d3f4e8dda5 +e2a93c414f5560dd0a03c8536a0936478150003f8dc994ae5c59622596eecd86 +62ec33a7fbc21dad7fe6d6c012b3c24d25c830fcf7a482635d41cc5a4d0ffcc6 +70d033b9ff263a25301ae938e91e6100af74bf60979c7aaa320220416d0a8cd9 +f700fc8fbf116d647793e4288cd67d78a97fec00e264acf06952503770409532 +fc30129425d2acc6f1c32805b6b9eb7b3c28e9b216047b44830a1f5fe2f2d5e0 +72b7ba233bd75dac8b9b9e14e0f5d4f290cc02e4b0c5303728b9dc9883126c08 +746c7560ce2f83af03e85502757c2fe4e25e84c13515a818f062744d719886d0 +2bc5dcfb209a5282118cac829cbd37b8951120a659dacbc49fc8b22953fdc4bc +4769502940d5c3d0039e6b10f0193ac152dac9ecf7ac03521dee45b3776336c7 +034e2fa7824ebdc00f009dad5dc4361538f4780f83846febd35e97b43909590e +7ee790652824d401313b1d4a8bf66621e7f391b636d3c94c1e8d8566d6d749eb +4f9044c9e9547b517aaa77af776c00960138e37d11a13ef02c588a703bdd9ce9 +8945c093a28d411738c26225a67d36145308347686af649a93c58d1c62ff4dba +5fef762fbe9f55ea18e74745e1f92c75752610f2872a8d9e793492225ab62807 +e581e7d4ca106609232ad4c5e21dd7788badb26708f78a9c1022c208cb465603 +e2f5e65cbba8fd2337eba7a98a0fa352a4446ea32ee104c2cf56bbd4a942a909 +e1f7ff098670443e10b4cd6de79430bdb5f2cad58bf4b9476da30dc8ec052034 +2adf14136f3746e6d852833ba15566c7c293840a5609b1afef801d514212235d +2d581ef4f893bc89971a8d4bda986339e3781c8fd02ac4f2c563558720c3d29d +3d1342388262134170803fef5527779f8aadcc8e5f736339a3c570335287ff4b +eaf0ab62151ce24177ff7ce00a7e9295ecfccc17b4f6373722155c5c54c4fdab +300f15859ed79ecce0ddf6991de54ece5c2799ee59a0266e2cec1a0213c8d826 +9a5d4269e75133321543ac3b4c4af8b98df02bc1872c65d8934ed44d63905fc7 +678ee95a029e26029e6b8cfa2f1ba8c1d02aa3ff1b8eaa3ef2b1e7085a51e248 +38e5d68851e7bcee2569e1fded98a5fff6ad014f948224f9708c96dc7298cdcb +12a656588c55bd0eed77567abd862884c7b46e21dbd6bf4bab77be4bee9ae08c +4c2e351e33cf99ab8ea500372a3198cb94ff272f84015b9c008e1184e7bbe815 +226c654139592714230ffe37825f8224e5d3b42712332e1c1903d6a7e11a95e4 +42a0a425efd7d1962cf4883ddfe62d9e8df42e993e92a3f30301f7299b4348ac +2330ab3eb539af36a30d0d09dbc03cce98244b4e37875963799abb986f3c22b4 +04fec9395101b891b4ed0a886e71913c65f7278675c42c9319a9d8701182f85a +c64b9c66eab7631477c48be15cd0948524e7a7b0c06984dfac90bceddd4c521d +0db0732a2a3d237280302ad7b5986d72076adeafa19d687fe4f07bb013eb9970 +d4a9cb8d2ee5fe1ffaf9a61b729e8b92624c7f4c96fc8fac58313766a868c93a +25955b5f367a5372b9d57de71112c8452601d8c44efda4fd17c726503ab49c49 +6ae60f06d629e49efa3f0d2631b491af2a0a6fe3f082e504d8eb62b6816c4b72 +33fb2094d9ab4bf8dce4d2565e16f286df692045f45f9dfd22ecaaaa02805930 +880d5c984afb9adbc5d2693d9d3a6315f81aedec38c9bc79023595100e39f5d8 +ae0098e772730fa489833f8080085f3407beca0edec7080961482f7e6ee11168 +4d5c8d5f5e7a353f1e1d876d3a951f79977adf10fea7e3c3aea49991ea39c4ac +d5037a1a8cd6feaf406342a696da53a48df3e434951db8ae2eb963e69a891447 +8d9820a87a0cbfc785a4f370ccdfc50a7bb980dccd7a1900f472a254e25febf9 +af05ad737eaadccb3a74406587445ba743d2a02cf8bccb68e645bbb545520b5a +95403ce9affb6c4faa774ac22aca94a099eed586f73480670ab477f474fcb160 +c0ea87e6bfbdf2895c8685901a155b2b1a5e31e3a58aca5948945be4e55fe543 +2e5fdc2b6f0c9412b902916aebba7d160022a139af3a247abab916b436e45526 +e6e941b6ede08ea678fe4cb566ba1ea9f567648e1baba5bc15f2a2894dd7d47b +10f361ea818a08e372abe6344d80833472a053cd53e4e8e9757e5d1212d04a10 +f3774f5235ac4281561eec032b140d6474a2c76e6b7ac0014bc0125995296bfd +0b36eee99f98189e695601338b5270a635569c9e896dece51a3280e9ce77f327 +c109a04eae401ccd1cc32f46c48323c0735db7fbba052a46ed6d63f4586f5b33 +a6fe27cd94d5256b23a2ea9d2d8eb6ef5af46f4254592716cb8ee21e15b5fcc5 +0b771ede13be928ae552f724227d36ef3d67fbd8f397fb84952a3029793e2e49 +fd70756dad3a3d13d21dcb35313ae6d50354ce2c40a0afa4b24eebd8a2057f08 +f1eb59e6d4772529a72f965ce39d1cc3983053b1565eac5685b878e7104c8cb7 +59dcbd806802a4ac5930982a84f62ecb8ea98fccb45f6daa7834a2c8dd4731a2 +c783e2ee9e4fb9747742c70a199377ba084ce85084b90dfffe787791ddc413d9 +4eb988acf159cba5b66533664b12ef89817666037228515e39403dcae2abc312 +81a857b47577032c852e556e41e808f7f27d56c2b889df69f8f34b1216e5ae53 +ff980853d3bb59b77816f1bbcbdc6a0ed1e3a96888cbc0c7b3ad13ec858942d8 +115f7edafedbc3b68237df366219cfb3c72a07456829748b42ff754404e10869 +eec8d3d30354a2e0a829b1332605873c6e888421dfe51e17313f78d54a52d7f9 +ffddd3ed3fc60dfb37e6cb0831b24008327787bb92f1975d00e56a3c4af27fd5 +9cd6c53ccb203a4e5e7dcae31c1f4072fbdea040b70a0da6c4a335c4ee7f5f17 +56221a93e1ba29640aea51ed46ac5649532be0f5072a2781de973966b3c510c0 +e5c5909289ba4e8d64c98f65e081a5df2b9a80177c8b75bf53b8fedcaa7afeb7 +e8cd0cd812b26af435f370d2d750a7af940546ac32a104ec5f708c4e24a310c1 +2409d07f95a51643371bf649d40c6fff29342394c5087fd76279a70c0f1375b9 +b1373e3a104b2fadafcf44e8a74e47d8ce607e1184de4c290ede9bb05d4b0e05 +f1aca00aa73546354ac8a52c714c6b333eab393cc888e9e812db736612e6a2fd +9f8246e441423382dfd76d5f22ca39afc930176c871dadec767b33ab7fb2078c +4fa366ea28c8aaa97595c594da9170901fe67c4518e88f06312a451948caeaef +323a20192194cf3868644f658c365e4c7ad007d880e568f53b222248b16a596d +2afdc6c141b8ad5bb626ed13c4bf4219ef8a51b78754dffae3e74e5e91eb313d +22476321c8eb6aec99ff02edd365c65c0b889e716108a481b050df27cf2a16b9 +d4c53a1d9c526ff81fb161771c14bbf94a1d5b8e9a28813e01afb11bbd6c0b3d +7d00b21330490de2ac5990cc7527532ad2ea8612f1bdbde630bdd8b1a4dd8a83 +54c71aa8558c3d56b2a99dcb5863b39ff941c4ab40dde023a8b8babf7c4a20f4 +97d5353c65c4fa578d7eca44323ce65a7956a9ac8b1a7f0b5761557b8d3bc3a4 +b0bdefb9b7adc7b79cb83be2202ddc9c123dcf7b98a3f32571ed757bb8ea996e +542c3acea4ee319ee542b704731587233ce16386c40537d33899088b1a848f01 +5423eff203010db0263daa74742c3094c9c1dbce92a903344f3a2aa11f5b7a7c +9c8c2e65db5b46068e14ede76d5e3775880a5544ca15b5fcb30a4ec8ed5f16f0 +dd44ed8d65f6465fa4c9511772692b37e312dda091c4c9fe9fa841d43472decb +3635ca9239c94542168df9df80b896a795d719e79012a17b3b43c51e19915c39 +c59fc409b7880cc54e0cab931e7e089f679ad77e9c5db9568da28d727292e3ec +5d22e93be4f353c64d6ea1d2e499bcc167c6537db1ef882e39c44599f5534396 +ba3a1d1f8358f583456b5a8c40992a65d2a4b6ba83653a72c9bfad629d231510 +6e0ed8c01ca0b79a2da4deb45641a17f0c7216b0b9a0411ebc9bc698a94d8eb0 +53f04cfd72396b5804e85339ad52eb2f3bae28921e08a2c0870796b1248b4033 +193dcda073da82e1bb83283f4c7ed0efa2b8d0878e1539d8ef1de1daba96e083 +9e855d9957accb89edeed61e1c172851c75d310ed8fdfd10f500ffdeefcf8cc0 +2ba233eea0bcaf5448d3534f324361c136cb7e6713513e3ff9138f16831e2a0c +5ce944c48b810dab299c901ac93533e8a77beccef5cf09daf8e488b97330f024 +37fceee78b348c707c9658c800c0ffe24c9da80e3a891676e073ebb87dd6b643 +b7ec933ea53da982d619f03bbc322de5f65f43f38e389dd4bb898694d8229836 +ec5c6ff1cb27e30c7b7318d85503df730621ecffbbd8bcd274cdedfd0fce3ec7 +56ea95d2cbeb7ccac21594a176da1ce270756edd93c2166750750f87206fd0db +abef70a81b2657e616d3e8bd3730425ac57f7a3396c2b7400b4f3735f4016797 +0874916e9f65b3daceb5677c813f768c1f1f0243b56939deb8de992f3c4c3d10 +ab3c40c6f085c93cb701f0197531b9cfee796bd87c27c1f866d9f3fec1f08914 +074d3af046010d9a44708b22afb7266cb0df53b362287c242c8155ce80502a89 +66c60c331f392abb43a83e3c5484a628947d07b3591ec29289df208423beaeee +d5c44ba96a1e791cb11eb45c547327691ac9d8d281ae5d2560d4775ea43feceb +0f8dca1adbec8c096f19bb5e636e55549afb3b63e485d9fe38ee8696bd80de59 +1731398ef32f2f97984bf71638d71d025ea244ee114aae0fd5e826fbcf71456e +816b8b4d5c89210ad94fe6ea6b0c72c9954d1f6b4d66c8511415a6873f76da10 +ea296fb1d9ff823678d823e4c6bc50a384d2714840681cf5d6deedff45a75de4 +47c2222a68e1e554567659c8eec356ce4488f21066c62d8e9679a4b8ffdbba89 +0992652fb5af0420fd1e04558fcaa6aea12a237c02370a79b73abfe6fd329a7f +431ac98868a1825033733484d11cb2c6f3aeee56b498244a26a43039e4aea280 +62a782e790052b633ed044962879d117a6aebdf3a632e22b7280b68bc25fa299 +394a3b49dc7d174a5a3ee41989f144d59db30a5ce1483d6e74644c83957297c3 +7963ad0ab325c3cc874a1a0da4a2796a97b9cd988b3e90d9318e31b3df7139b9 +498354e97512693c75106146a649aec375651df91ae241c174f73d1fbd9038cf +8c37299b230ea69c16b609ab35a7c63f37382982b07abf7dfb54864c17620ee2 +7bd94c075fa27a78b566f66476f91055a46f90ae053d43448563138c0170d799 +2412f93676c12d1fce3c6bc5187d59ae6a416c2c9e594a5eb63b8f368fa6272c +6b9a406cecd002d37f8d63a4f8a4b1b04465673ddf9c37c4269f1c278bbf843b +273b09ad1fcfae4dc696a04130410df2f78cb0c91b2fb503f987f05f0491653b +7b4fa8055c09c66cd461af4ab1b895265dd663c6c59e9ff2d6a083d3d257fd2c +8cc9c24133c41a6094bda50d333974f8314bf1ad0e5490d38c585f75defc58f7 +3724b764dc0faf44ef0e24f9d6be17eb81fdde355bc9c81058c036e5879f305e +f64bc349b30fbb5fd43002ef03c4b7e00734858bb5f0caa7f41f55274a4ca952 +a399ee13aa8c5260996064c500f1f7093b99fac99bb9a00376ac24b03bc17214 +7a655967654458da7698d3b138d96d8242288d5873673bfbd32c5e65fa0e1dcb +f2463580bc85c7c3a0893eb983a8bd1356b6e15d171d2d18a361068c281e508a +68b53c0bff224571cccbcad1bd483461a634fbc86e69cb7bf44e9341ac7a6cdd +7fa71be38fc46776c709cfdf2b56377294792eefd82d5746a7775d6aff1e9b59 +68bfdc426ee35e5bef195d9f2a159d1f5ba366ba15bcf6f35debd59650a3b53d +5372c5cad39ef8f8131bdca6eff43d15b20710fee07a13b2771254d9f07afe5a +0a4dbf92e8eaedaf17dd68a0064f609689b3bd8caffa1e1f43d7ff380d5bbf11 +89db18133052a7359213293ac8bb27b08f9e74343f527deda3444b0ebf4e863e +5fef4126508e1e8b8680338fa0ac6a12734352da550e810fed9dd02ab3c83670 +2438f3fdb7a7fd22750c4118247519c383d38b814cfa10b2302f7fa6f13f6bad +f59d082a4359df586d4ab0b3417006b58acf7591d238b066e18806b77813332f +ebcb15234235fb788ac0a35a8a5b2e21a8d3f6ca91cfb426dfe3a3b521b3631e +05bac453e202267115c00287ef8f13ac7e6d054e671438886c705432a2267bcd +2b9ca572ceac63845780553a58878289cd3781b35377c1a5718c34a45630c5e7 +921bb864d0543beb6fe43f6d79219f0ef324d60c4b05811129d0e31dd50430c2 +428cdcb0d77f92364545ce1b61885dd3e47822c060c0418ba845cbb9990724ea +ff349987669b3e45e2198097386be658345d1fdb03492e1f35ebc3a73c5ca8cd +9149dc94fd47fb751c82a377c2dc829ce6c54419fc127e0bc0a014deb5e42814 +645c3708577ec7e67b170a3750b2daf70f2e4dce8ec5e741a381125f3bb89245 +5c26a8976acb9671fb372b2e3bed1f5064e7ca04b23108f9c9e8a8db31f48fa7 +bba4b7a8dd79f4bdf442aec2203698a17d6ecec46b03f708e986ba22a8356806 +faa2753bede88921bfdd430d73c0d5daeb1404204a146814da1aad15f75fb620 +7aff075734d1ab67a15e4cf0e74c3d04592fb29398cabaa3e718049e48407990 +490b663233a8f5713b460a9b5502ba1492987f42f230d0fe055f076ddf4a667f +6159496901e3ea7984d64103957dece5580b872302c3211901c1596f73d5a105 +1167599860b24d2d2cf4b29b2895281d315e7c9fd052d547b473ece007408d51 +96b221cebecece9749bdb1631a3e8d57d87c84aeec4f58e81498e3597a952148 +407323efcd0287e0195e636bdd92dbfa539406c78f29f46a5635142818ce43ce +5597b156b5ddd0a7402f98df6bd949c9385b5ce4c74ebe4ef34b6db322d8de41 +8b95223f3bed1b123cb36f632c636c240408dbaa1e97ecf753ea2c7e600ff69e +a3307bbe031ece634d5f209160f74b7e1d9165512c2a361c37112b9793339a82 +79a4a78c5f22795f4eeda5dffc2eda282989b78c70d94df41e879ba65c767945 +b9dc1921684440fc1dc297175b0e4e2ed9d1c9c742301d0e43e9aec0daa8d912 +f6c5c946b97da21c906b31fd3d316a55d1bd398cd1bea84d37faf7da3da3420f +fb6fae59a096a60597a8a3e3f74f7c72b4cbb2c009eccc0d6e1e6d7d8f8b06ff +87db28d6d7a7acf3e19c687cf48052bd8a5fb4abba50d5b03a207834fc303951 +06108a3d4e893c564749e28a5185c3065395051cfcb1ae719ad06e9eb24030ec +a5fec6cdcd4438e64f3ee596457b3abf68a98d14f41618ea2825318652ff8f3a +1ec6a5af2cb0de947d71ad47168fd1ecef8fc8cee1af04de1629b1cfb070b0d2 +202fc55eab597be1993f884ae3ea4f486c6ea2d679cd7996452a9cee1f708a84 +52adbf8ad147279b9580b7985e4ff73a7a52c30ab0c95c82fe9f06b5995e7194 +3e2e42ec94952c2e256173d4dc76bd0d10d9679cb84bdbad752a39ed79bfd559 +2539e8a049c6b51b6873e2e544f3bd1b560b3e30d199476f15f697ff2b468390 +1810568c079f0a80761e2c3525a249bfd1f83c0d2d04abae1782ec2b1c24dee8 +099e692329e256be8f0cbfffd4393b747943303173660c9a658808a4574014ef +c41e414ab99d1444c7dcdf5119f8b997106e2211a77ef2c15a4f0c0e04cdf136 +ee62046c520c3d879bef31a247cdee04c92367a5f5b0d62a59cfca7a8a07fa29 +8bb7f20b5bc7a64ba5ce995f2347c8fb21cd55f56eb8a88e15f4f9d551eeadc7 +d970e83750c575526df4dde36d7c61c212fd1a66a1b507fabb47ca114feac44d +de20d22af3c5ce03e413c358aa724b37664a827264f3671e35f72f11fc116cb5 +41db844955f0373a77abd53ca40b89641aaeac218ec6e169f2f56ec2e8053533 +55a56ffbffefea6f89fe94f4459d288cc6a6cf360a04f7d262183f2e3734ed23 +d3a24308ad0a7335d1cf3240e8cca5c898e2ba22f3ef9eceb30f1550920b08c2 +6b3ff082031b3c63c0462139e4026807557e70648c9aa87ad8242de82c793adf +a66902c8147783e8a425be69ac345c5bda7723b8d55828bd066a6e0203a71e1b +b3c91b066c282ba17d2ae359e9409a9ad605378929f439b1dd1478314dbb59ea +5dd558ad1487e63476f6541460701438aaa160ae836cfc0f2dc4315bd6679f9d +2ebd9c6ed19d18261c4fd7bee9bc5943500f5bd5c23eda8f36bbf2a2ea963c1d +a15e4bbd6b466e92899f29d69cbb126922c40fad047331ec4dd0c1cab380711f +29598237a33e665945832006c393470d0b9569cc2d8432c1e463ea40bc923736 +fde508fac77449dbeb44d07cce9b32e3ac80f1d8babb71a674badc0d9ebfc612 +494ffeb9a7a78bfb56ebcc3f917f8aaf61a2fc1e30c2fc3aab7a08ae73a506c3 +9905b976def26ace6e0b84e352d4c8e60904ccb5fdcf8fe26ab9488d60b1df2e +abced5d2d372ac65526413e0acfd9e65e5fe1ab653fe33c980c94e331eacf3f6 +e9b6e9567e197c8f66fcc978e2503e08dd8acd2408a9bdc2b22a3bf392e3b432 +023476ab94ff01bc2ebb99575e1f694ad0ca5205fc08f041a7f7bc0d4406e1fd +b6f1df6b0cf4195bac09157e3c6c6223b799bb97b10ca1f820d3384e7a1a7d7f +8e4b1dd2ad8e143c3be4a4f03212797c886ff431c1d980f3a35a5c86e0b4e650 +daed3c3f391319591ba4f3c284518a8622c9a2d7319c2e3eef7c2ac02358575b +e9baacbb7a5d49a6873cc023038daf76ea1c5383221cf2fcc7c369be9f3624c9 +ce0c43257781c53be5681c2046fde85aa1d8523e7debd4844be57f93faa01c4e +5f46dc9218a4d4a88cedc6a9d68584a0b890499c3fafcbbf1159ef652de6a10a +defee3fae3e32984b9241e8e1ab61aa267b35948c5afa74e0190447f86f24993 +7a5d05c1f1c71b130ea19ebbf1369e64187b1e09aa1b8b5b1e4768074daf4e87 +5f388769520d838ff5fa5987ea3e5b4a35c7b7d5d61bd9133c55f69f4ed0ddff +9539f2839cd5f6d7fb4fce0d7f1feea79d1b8c82060be5063a5754e49e9324d5 +addb47c09360259658996c18511ef70c5d062205272f2b85ed53259e4b83a43f +0222d28706307d51e8244524113dbe072b91ba436defd0aaea70d3491d29f591 +05b82a9a8d6633ee9133e23c31d0972b1fba8ae9af8156bee417255a2a7b7095 +b287949977a0aec84429267e96974f1b93fc286b44c14d6a30cb2fd97f755a39 +5a1642cef33859342fbbffe5d9c652f19cf1dc4f9d46d099f811fbb23b4de6bd +0a23413940ca50ce7772621e940e60793405687788b263a67239683be424205d +f4f9f790b0c130a19419b0c9d750674eb8a3d95e317db8407cb61bcbbe2b0fa3 +d71c218c60330b95043dd02bc3cc423733242290973437dd4dcd40438b4b45a5 +0c7a1dca20065cb9c4fd0078530134e2949def6e40d8d7231cb220f72f9f65e8 +becf8ca9d97d1040c518791167e9bd542487b618f315319041b4cb43919ca54c +b2170aea06218227214762d7c37346c5763c5493f6c07650b4336bf3e277b698 +54ec16ccd3c6c3a710ae6c93c6d4c7cab5bf33d7d1c926c001f77874b84b894b +9df7e0717148554b1b5cadcdf09435b20a94ac98fb4ba4e2234060e487b3e16a +acd8483026d91f04708ada9429de6e692349ed26ca54389027b933f2a1474e32 +e3571f23e52de44cf127e0a2388884999517b7809397e7ebbe70a5436ae4d343 +00d639cd0ede5dda61944b1c955ce9eb4598c50ff4c6db313f2901ebd474b293 +c5c3580f2cbb38b61af25bf2ce4aca7051cc4a24374253e14d12c58715333395 +aaa22801ef27923b98ac1c316cf0eb5ac638cf74658d78a0fbdb6375634314c8 +407ae024a8cdbd08d6e58221360e6ee8ab331f1f7a6a9a00db933395304f7d9d +bdcbe5d4fd7f6e0db7682d91b010c8fd8a2969acaa5d90d9fa6f90161e74ef70 +fc7ea2c07277344b94f60c35489ef9ca43e66f7c30e68732f4f66cb6cdbf18d3 +31893cf42640eb22705f9d5ad766ddc2c5eb71baf6cb7ea3fa3c6980df9006b0 +9bb2e41292f2720acef2347682abd72ef8ee08893fbeba61d55fa11fd37689bc +5201e91b19ec1909ee705b2110b28e38889b13010175d22aafb4724b1529e80f +f213b0c5ae74a766e3526a0fb6770e96c47b19e88ac5b6737b9e275a6eab6670 +62d7511039c041eb846d05f16126912836f5bfbf558c23883bbff405ecdb7b17 +a9a4a27beaa1255c0c6dceaa0631655be82693e5f34c80c0c0c91e60d9787627 +20d6f13b7e8804a00bff313c281af96ab427a414406c93f480edad9c6a764131 +972db7d8895ee976fc54dd793df6a34a9120005ffc69743ff1955d74c7e27215 +7bc6d3727fa1ff03de8afb4d551acf4882d21e9e4ca0c56d0a05f82516b5801b +372b4c8da4ee4b2218747e3fe2290756f6e1061eed3ef02ea74574188d0accd1 +ce3da5951be5fe4498fb1b22773ced2fd85e6438d2caa71e58477c9ea3433be6 +a47431afbc95f37ba39cd1a7c3a366b718acfd1c1f2ef1eeb92bdc64d2a8a335 +62a08c07346a42147ed66e00c5052878f878b736fbebd150dc504ea599f8450c +c0214d554de7df79cd7583621983994f31044bb11b5411835975567d2d3618cd +99dc8dcfec72c2122cc761b75f5608e0251fd3b46b1f597fa8eb7d08e2593d1f +51cc78c4525f9769cb1c7bcb518451d380e056d3e1714eb525daa1890d410053 +d263ebf120d6d314706a79c73e06ac43fa4e54c8a22893a8439c2cd3e7471dfd +36672aaaf1191d09d77b6117fcdef8e1f30fb1b79be5db53cd49a67f579925c6 +5041a34c9fec6bf097c895c8d375665f4f8ad5c74d2af3bc3871ae8d50d7c214 +5d58b16b6019444063ea613db3ff2e8d001e54408b814b398c5119af8bddc9e8 +bbfc59f4c556ee7a23d4d1c43d52cdf23108ae53ca589dc75ad0d95a8a0abf31 +b185388320d4c9aac192a169de893f6af0fc46dfbec85b135358a5d114b6387a +425abc82b35858ffa892ee2495e5f28890f04cfd03698978ef280e86fd2b144f +fa07bd79e4031ad44a98c81557524f22de9331ff23cb2256803236bcf4440d19 +52e512e728c3fdb524dd53dff284399ec547faf85413629dc1b853cfe9251fed +6addfa43dc6bd7001b3274d63eb8bc3059505c3b6c85d8dc7d01918e0795799b +0f4677b65131a12ffabc4fee35f3b9c7c227f6fe4fd6613d950822a027d727a0 +03d413f23ac1a13e3f47fc8f4069afda7c0c2474b331984d6acd492d46bcd6f0 +2693c48df4ca7877fdbf7c78f8362bab9fd6dd8721fd7a48b11010a1eedc9277 +a36bf0cbe0274be7dd98dfce2974468e08d959585319e6dd56d9959367058b07 +66f16ec70a729f053c6c712212f688d3c3ac5b2a6584168d97ed6056bc990916 +66326942b1042a7af7955bd06c8e70d0469dbdeb234033bee3e8e251fcf592c0 +6b35c3adc13d1443762d2f24f72dd481da026a40a2f0b72969418bbfb0c78f64 +905483718246843b8a75a9efbb3efbb5835187069c4ef7b0cfd1b27597e8cf18 +2f7ecf290294c1ff386b7c14808553f553c37f3b561dc525e0a252c5b8ff83c9 +4c4c192cb3573532f896b8ab851b6809a8bb48a6d135bd68e6dc7ced69e7e696 +b9fabe5cba73f16f9e4cf40a978d6c7f7f03f03691d02ac047ffc4e57f7e37e4 +9e849e36fbed1a2b0cccc9db0cbf576992947f9a1908d51202a55700d9b19a61 +af475b7a0f578606d7ca91216bde81c8e41d4532ebac813dc2c590f5abd98cf8 +56cea7babd8cb614f71145166b78e10e0ac09a1d7d6d5f82ad20375c2b5325a6 +8b83c58426ea3f7c474df1132ac6cc83f12df0c23578ed0740bd87398d33b1b1 +1391e5ca242e4ec088d91d1413267fe304ff9cb876a3eb8e475de3b270018669 +d61d48150495b04a48abfe963e632e9ab69b1bbcd162fcfee5f01e24fdba7622 +ca57517d6ce50e0dc8e599f179a862e0403cf41fc1a49a177f25b48882bef36b +19d49ccbbe2bc1f1b1d3de58f01e93ba091324e8f5187215da8a29e61cba43ae +559c4eb5e2beea9c2ddc4c95b394ed725ee42e39a8737e0ceb970e040bc793b1 +b6ca873156c4ba81707eebc4d82e05cd1222b0fb2abd32540e269e96acc372eb +264ca76aae00918f6384f2bd353a32d012cb9cc405f4f05497bce5dcc4a4c9c7 +33d900cd5a76a1c23c1315cfda3dbdb84557b1521f6038a0c44d2bcfa97182e4 +56506c342b9afd92612f9f7a602512b054a88cceeee0d2af8dba5ed2c935972a +14cf772412a9bf080d3d949cf6da82c6dc0a58f2514f33bf2c550bf039e90490 +ebd5fb8eb50727ca9af283b8ff9734edbb915c32a98c9db81db5d43f473b29d2 +1707a26e545923f6fa6c72bdd633981959ce5a3c675d964d843fba47db9595d9 +f0a12ee78e7fc02e898562d27aa1e2c4d9541c78eb18e01ef739dfd17769db09 +1c665fa5e5c6ad233009ca8cc9f74382d2ced9798a32d0c30b296ee52bdfa320 +dd6dab50bb83797407de1b66943e16aad63a55f5c730e8df5f2f7d8c8bc066bf +4ab699fdb736f33720a83e42137ea6779ee30b30218f63a00d9e3c1ba982a83b +260848f109e8e4bc6df3528fd7ae974139c2a8ad3e07b9104f0dd43be484a0e5 +c33fae80b9d8c19d742d2c3d0fa3121191242a7bdd17c4f6a5c9d03a193a055f +c50453a4a32cfe5d6afed1fd3862e514b12510273bd6b56b2a3600572cd6a152 +8a6c6a2f6ff3625102782897b568a61f4e0261d2f98a9ae782561980998d5570 +12d5517c975749e54f19803f029a616672fc5c3ebc9e8903702fcf07cfbd1d69 +bd837187fc0d12111e58587ac3820e503562d81c68036a562da9fd509de0c40e +18c4ec5f35ea0cd0388aeb7a78d70906961af66955ecd6db07985da9a09720fe +15afb501a6f12a1e126993ff9ffb0ace772c12c74dde6622cab577c5c868e3c6 +8bf3a67a265f475f315cfd0e9223bb6ce713bac6c1fde449cbb976161e51d74e +6996731f6b36505715f40df02d844b4edf39c3fb8d3f39f6f455cb9508bec5b6 +d8104b95ed06fba3894b3492b5a1ea81b848d4e50348b6a8b0cd655961551113 +704ea64dbb0848575c77c36cafd13f6ccec13f1ce1712b887f6b2e89d559117d +35db5abe723e90dc189222cb1c18daefc9c15d4f2637ad5fc30b3d2e3beb7269 +14b5703ad5adb74a7bb83267b3d2ed592b51c794b3f77bfc50e8f605938282b9 +771004be05c0301274b21c873fb56bed7755562b62c3b9e99acaf9485aad9de2 +4ace34957aeda05dc6a9c4777e4d84195d843343c553b2c46334f5084bf1e1ec +322fb88c89316022c562e3234a6f3dcf1b0f1207835c8fbb864451ddc3473348 +462cd58bb2a8f3b6ddf199de8dc841e86cc4ef1e0e19eb7210e0bbeb63305d27 +7997e1dfbd3a75d0eb0626fe7093a24ecb45ba6a0c0d495283f902bbb76f5570 +0cfeb74e49c0879a232231e8e5ecbd015b7da2a8c7b7f7ea1a25902b551f63b1 +a0d82840ed66c8a64f1ac405609cd7601076fd49c9194e421db76b16b8bc6874 +eb7e4dd09a6184907bff0d2125e456efaab371917a420222cd1258f06bf5ca2d +4977e15b644defc6531f4dc3e8e1c23c8a27ce3ada998e469b8536eb6472aa9d +8db0f5e48ecd1332acebb5652e214c53fac21be425cde6c0b1ae8094bd28447f +3b0a5172a4c6c47ab6ec25939caa92ac1bcdcb42470c43cac07137dc8cb2de62 +e26a82cebce9622a24686e155f492de17c07bbd2edf931462dc40fcc5c449141 +f4368a9d01ecfd5311d123b3588404f89701a566c0591ee59283dc339b437b94 +fb5fbb867814219f9cb2c47605936a34f873fee51a26c8438f9bb20956df300c +7e0dfa2e5e39b483106237e28e21d7d007bd9eef82690a674c4d0dd65c22d96a +9a89147a75a5aacf71da18cb1defa829d43130f65589f430a136463df1d92a60 +5cc06ef394a804af908e92056b5de3a5130c3809372efed820f27e1212bdfd7f +40795ca298257a9eaef3d27917f1589fec6dbd47dfbf9308c3f3d7014fb614a5 +31561f00b09cbea8c0d72df7211600b8eb450b9c1eba4f64e19734f5137d97ee +6a9ea333d099aad78f0ed97bf12210b2a4d9d11118be484452fb3eedb1f658eb +f32d0fa91d78cc091dd9eb8b90598f1ad4bc5d809eb2fc0afab6510479b1769c +6a09ffc2f04d6f5d7e094ce3e1bc7e12d4f38c0f4aac829b2deff9d13a9e7641 +ccb20b88deb904320888ac198f25bc6dce496c0b86a8af7d2c3d1bc8fcfc5abc +f65a809d1e0ba418b2149835a97dcc8e52cbc38e813d4a4ad5307a5deef67050 +62954a3fc37247dac8c7de0e20232745be80c3d93989240dc7e4a94e24a6dc5f +ec984895152c8e5110fa06c763db17fec201092e0e30ed33b6b1ff5659ef9272 +ea49419a1b910cf2dd63ff2f590cb92e77270f9833bee65a83889cc343b70a3b +361755a409f1e97879a7976f582085f2cab6111fa566984b31f098dcf706f975 +17408f3b7993b14b1e2aabaebce35b7d67400cbd702f3d30322ae656bac10c53 +4a77847db80e0a6dfde9266b889e09bc0228337fc5def2be51afedc9fd9cddd6 +79e75f049acd541db2663ce012eaa8cce6f1a102bcfb2df6d50c163b9db7ebfd +5b9dba6a86aff60510c30bc2dc62a79958c87a626cbd076d58940e61ea7a255d +4f52b8491f42b546bdf7c44a32321faa07f31dcc08722b0c7fc95b28b573bf81 +f75893ea85ae9305734603caba291c96b1f925d72ed74f09022e1d323c7a8f85 +6b125e03b63ab94f229b533d9edb3ae242ac432c08771814da828df744846c79 +5f5cd7c2737e9a3430821bb7fb2b16694a3b6eea913172158b1c50df4baf9b67 +a9a652044abccbf06e5371bd831990cb9d570162f4e252f6e85d7ad4610dfb63 +c04d0951c72f93fe383cb9c5e482945df78464c9261b7831249d3149753fe729 +d193baefeddfcfd7b1d88d00fcf79684a3f9c8deda2e132e93d6a6a991334307 +a9ede2eaf7aec246acc03b4c9ada72ab11198480fbedef6105466d7f70011b30 +e8b22f16c9311e0d343afd3f3715cde39854d2b087c3486d29c546f144b3eedf +5dc2a64507fef9a50e113a4987236c984641946f992bb588c02efe8bf2e60ac4 +0a500152048fe5890c31bd6a8477c4106b9a65080c1be528d43e57f9f44716dc +741947bc656c7ea3f784f0268a01c06e9fb80bc77ce0b7da7e9fb400e17209a8 +78a0ea62efdf832e1f66b1c67a29bde024209af732225bba945d6e925c60d7c5 +fd8d04d629760ae6440f784118102282a8d296de1e8e3d3e457f92537aa41471 +87eaffd33d847f95ef99efacf0fc9d9e367ebd2993044a94e6785f2907344a3f +fc2fa08d1c8a4b876642209ac55b7e5b305e96ecf4d26f0551219c23f048180c +3b824ba9f380c6ef78c23aa522f9db98803001bdc0a3e7b8edec0df0f82e9b94 +ff37e093378575c50fddf2fcd2a03c92d7d2d7c3137860bfdb747523e7ffc63f +b970e19f1f9af890a5c8268e412842df2f035a38f09f0da6847a9fa39c9da75c +784fc53e28f23223949aafac8db2dd48d927edf6730fea2a3fc02cfc99252786 +8915e4d6842f4031247ab0fadd7f47f636a88d9b05b80f06e09f183ff40a98b5 +cd0715aa8761d9a1d32c63bc4a1feda56df2cdd2ebe5dc216459165c79e8794a +5dc8e6f741e18f6176cabfbc79566665aff78010a403fab8a299e2b9b63a56f0 +08c08764271b1dfc5e82050a70a911e2d3152a9932d6a5ef547d216faae9d501 +9f502cf59b15885b1543dc06ddea0e3618d6592d8bc8062926795c05355ae273 +c1fd175da6dc32e065a076d0ecd3384dba51e8cb8317f16419850ade0c3afaaa +4a61f053e63eb3f210f29e8dc9b7965b66e59a338902ba609eb34fb4b981bfb5 +95354786b6c58d7b72632764a785c0e733c0e7cb4d09b65b0a334c4bdd7406ae +e2df99ee6ee0dd52ac54cccb32296e685a22ac2c111e14c0b315bacdb3175a4b +8417d8904013f18948f87faefd4410c0bc0c64f00ba623e28e58b24671f4a1c5 +baf700aa051abc95791ae14d9302376f9a52816ba84ab25eda843a1d8f1a6add +6dd171885f3fd9cf845a45e728077e3675b17f892bd2e501f9c67119dc14d5b9 +6bf92fb5a2c51c01c075c95a3b9a3c24a7c6ecddb07952420da9162b07f15adf +81113b48a75b31b130b93aebc57d30e8df755a40823e444ebad17a8877bc11b9 +5d4914e723f564a1e78f3e117d0d2e8b0d76e56d631c08e3456e4c377e5a7a8b +c576e7bf429c6c060089b12e23a8236b7b9f9490735d0bc04f9eb5ea3392f2ca +be3a88e0d52c056c374763d5bfb06f0b15d3444230fed38a331bef2661d3a04d +d0b92e2ed0f446c6016e048e613913f2b256e756598ccd5378087f356f457956 +fd07d58ddf83a1434e3b44146bfb18cd9eacfced456f3c218c90a015aeaefe02 +db0ee978a363f64ee52df23304023f132e46b14a57fcdbc2dfeafd736112326b +1eb6d71c1675fc17431525253b2f7b720f73b22b852af9bc13f7533fd1ab4daf +55683bb43014b67ff87fb5740c5be580c9fb39c7f3fe5ab46a3d1da0087e4dc8 +1280340b2822ef31e9ecf79dc9147b2b3e42057a4ad483572e0a3b0ce15ed42a +022c8e8f5bc6eb60bed7565e0a1a5e6ea6d17b5d4517e390c01d9396abcc0956 +985d38f6070a8e57ba73d2a199134e9447bf03a78de5383713ffccde6f9a9894 +b7b7f3aa911633c330ecc1e5c5daab47e95cf5bb17b6f92434338ae77365fdfa +2e1f1482fd82e370004d4f050e2f7b29121f689635ec5360b33841aa3c61031f +e652e8889f3530371deb652bf03b2ffd60d2494202604895389139ee31c0e1f0 +5337492a52d80dc16d09f0b819bb171a11f443ed3e7584ab6d2d3acce0e36086 +6ed5fa39da708b1f9c76b7ac928bde78b7696fd02c7a4003afc2c93732eca1e1 +d11aa9c527c54ab46beec2e810393b9d48cdec62886a488c7daba199fc1f6083 +f3894dbc6c94910ebf6931dd9575d2003d6a8b771841760ca988b0b28d71fb2c +9c7f8e3a13271d29d507357fc043008ad082dfc4c736cf22b0b6cd46bcdd209c +6b3957f17b864bbd5ae5799d33832942322fb17284ea6ea402ddf46018f79af0 +74ee40fd11afcdd128f5609db13b4aefd386d9c6bf8be7d257ed39c2a093a1d5 +4bf1ac011e007a639eebf42dd7bf6c846baff0cd2b3c11f7a1803bcc992afde4 +1b677c3a8c6e43c538a9e06c2f0ac77797e5cdab41026436bcd662ec0066c769 +14a39b5209423aab0373ddc99623cf3d04b703e8fad773c47a44219c00b3aec2 +4117671bdc98aaaff4a9fa832ac7cd0957046e470ccb3e31f0f4080b7d0df64d +bb2faf8b89289e91f432c335ae02cbcae9af55a4ed2ff6d0be791563c5ada0dc +82ef2999973e9a0555dc1d7cca400c27e694d52125c25a3aaf866ef2b137b5b8 +00828773c83e89f06c8a0e67f292e421fba7dd82a879dc0c5f7af445e5d9e7a7 +02ffb69052a2fdd8c6148412295a5590f00b0224bbf01efb8e61312305a064b9 +4d3455d4e2fb756321baa8aa9179075ce75535d961ba5c62977bcb089f0f5a8b +951a92d90f78f589afe3b8ec23595b7d75d09d57fd0130557851d583cc0161c6 +3070aca0bafd1bf2a41826f075ba168dd5a5d1d7934750b31b664d07559f6520 +0fbf31f912d9c917dad8e822c5ce055379ec30dccc25f6c385a56011c87ecc48 +3a71a9c43ea3a9dfac885e8c327b9293bd3dddb3a231122c767dfc89ceb27dad +e8617a590005fcc90e99f4cbe485bf8846e05b5929348c9a0daa9a50887d1d9f +be3847be0af0e36449f0cdfd075dd7c2ca57b87181f88042db9ad2e14dd91386 +82ef14c196440a0ccdea2d7afbea6b57d9d2cd7c1a6eda82bf3032a585fe989a +4aa0692cdbb5c1bdd0989e2b034545761b6145c0d5328f716cd7d941322a4e10 +8b1d17851d721e70d27b1a1f23e9c39b07d3c68ab311eb4f7fb975144eedc54a +206fda4f1309b9047616acaa3edc86d5c6b7eb5f720ced0b3ffb83dbf13fce00 +02d0fc69cd5c93eb950d521756074475b9f1d169ce198658a0d12bd87802a176 +17e9a47be3167c0126185e0eb0d0327c81ef3812060469aea43f2c294651bdc1 +ffd49606768981a374a53658e94fc2d9f071bc45593bc5c030e64cc13a82997e +90431f90a207c72c6f845edb9148cb5622086ef18711d0e005c3f2175c16f158 +6b0fd252db31de602c68dddc31b0104045c3aebe121bc3e4b2324395d450ff24 +ecff8e1747b862a6130af36ecf3ca422e1131039c7d933a6cfdc837eb60f192b +00a0e2829759e4ec40bc8f6d72e1240594de45565723395a8bf668d9310e2dd5 +2c0bf1f13cbae10109d457a54d17e8c76ea3def831513e603ab97a0e7289c318 +8615f0051c853f613e5e8fb0ae60b81f68dbc19544b7e8e6e477a35ab96fdb1d +886cb0402250c912f0af639b0be769246f247e9d94d65996ff5e09159d10a5dc +3479e025a541e3bd7c373510056d56e4c391e71a1e105e71629d8553da68b52d +b3e898686789a48875b93ae930e764b7b534258f215e6b4c6fc9c1b149ac9bd0 +6a1a7f4e484f300b54f0b175690e62eb4a7a7ee04de99c73530413ea97bd6b87 +ec7107d181d8c5f34ac730553ff2a7a78d3fc4686d014511c4c064c0125202f7 +35eca8b770a295e1eb16722f522c595706f3dec4ef7c7489feef359172e206ca +bea6d1310b47d00ab4d3ed37fb787c921d2168eb23c47ba402f0732ef32092c4 +138e45c9dbca733e7a3321d645fe2014cb31730d2f3a7b3bd22704dfe2cc0246 +f57abd68ca01a2cf2c4d76de78495c033217f7c95a7685c39bc0c21d7677761e +1c587f57dc417f5a644affc9ce3b8439eb73d7a0354106bf0754f9651ef7737d +0b41bd91df127303a0dadb3922a871888b25c4eaee45249bc1a6714037d645da +d2cce8302d6fe06c0b2c0631a1c879710b9efbdf9f9d4c2f1fded93fcca4938e +a9402199a48f2f08a430504db9c38af110306dc0c3f576e40d14a59b00481466 +75450ab97d5433c95c37e671ea3c5612109ea038c7fe99bef2a2b3cedc3c01f6 +62859a0caa80893d08d52c447d6862d77020917dcec05fd9bf6c2bde9ece19e9 +c234e78ce8f780b5ad49ba87938e1b5e8bde82eaedab584c0ea12c10d60ff632 +eb5a063cd07bd0146afadb55c69085d58945e9e2f174fea5b44a5aa150005d2c +4720b0d34fd4a5ad1dbe91f76a62ed9c0a523fdae8ca4b8467df476031ab7949 +51badc742136566b595c16475145e6bf57f9b3e7f6a7e8f22743e5729717d389 +065ca8b2f51677db13019a4ef245d5e96f0cffe5f929c74f84243bc30875e234 +fbc0d66866d5734fc35703d43dce3bdd3351bff13cce871770adec6cec7da64c +fd436908a28729d2bd11b91077da60084eb1dea93eb3e35a6406561b4f7198a7 +d55700c8e0eb6f1dd49846bb9fe77ea48f5cf80943484cc1dccd3c901b09cd15 +6f4fb5160dd3ba6e5a50e744916196ea93765ec8d0b6a7772d2ca71beb5fe4fc +c1b297af8683f96ed6801d1ec72dbd479e5d80a09c8c175b4b9c9b9d6f6dd142 +8d758b966c997e86e2f6c42f648296370f20146dff39f255e4ec13b485a44d8e +d96475f25362877f2b338e3f566dc68bf749b7f3b11b557425981952086084e9 +643812f4d3174c8cc01a599875d6bd53e1ad6e35a6195bd85467a918d681fb06 +54ff9ed632fc41686a42827833b8388d06363ad33e548f3f3baa9bea5c3ad296 +9d3b9bfbe3229de62b3e1f90cb18328a1a8af7c57a1e99034a2f1b4d2f346e2b +4f79027adc581caa4b914bfa8d77121cb1fed8fa2d7ce4380f924397bfaeca12 +d0dedbb11702b663b32040e56cc75f283ec902c38d2dc5453830a0129d0dfa0e +775e0d53b943d2cffd261ca5ebf95f2489ef34ce9165e111b7449a83faa3d219 +0521552991e8faca51ac8f2381fb1d26e467d9036d7be1a148a324747cd8e804 +69abcfef1ef1c93ae385c23a171b90c056e6466a2321e8eabf002bd2abbed182 +b92e166f7ce45d7c6f457d536ade3bae2c0621a4735b3379f0b6377de13a118b +bdd05747e63edc41a26485adedd4fe261670c8b17fa1be0e43aa0e2e9342d967 +8cb5e69392bb1f69536dd7d2b36c6d17846c0d52d00a7f5e4722908b8a6ad0f3 +7d5a70b4e54303f0cc282f2b67cb615c6bc19da223aba32614b693945fd23d04 +b40fba0e32bedc6df803f27a0c6b4e0abfbac1227dbd3d6ebe955d3ff587f999 +feadde33a7d5531c81a3ebf29dce906bba74eb2576a05aca12fdad621f3bf0d4 +7953e08d3a7c8314b8b4358618ece0240674e81e017cb96f1b38511261c20b3d +146c1253180ce3a03a51f17cc120dd2961266a86ce4443f1cdecccd5afc8b9f0 +3a91f493e977fe60ef7547ad6509c9dc48719c4c44f7ec635e3db7aee7c833ce +ec0a23f96647639059192a7cafdbb5784f2da752c27325ef4ba6a0913d5367e7 +609dba9dced3a57c126c44929ec307050acbd0191221c3bcf144a9e8f06df180 +968541f24a4daae97dd55f2a5aa0cb9ab1d19befe041c4659632cb74af832e86 +9f47001b216f4f62c442d6ed05250f86b6b9a2bb75630ab78f6a497f890e661e +3adeff2c0ef1253da98a348511f3d373ba0fd3634e2952b8084812c80ac161db +580970b587516b5e373bab2da832ab4ebf67c0c7c5d102ea70c108d4d9b53f73 +e6d66acc829a1983dc95a8ff0b2dbb4bbc6e134eea4a11dcfa9d68c313779bcf +323384f375cc79e9ccf71d82a23ce7aac03bebc79f9ce18d355f1aae37b36ddc +0d16298e2a535da3918760a08ed839f89aab86cb43c779351991c56a5076c6ad +b421ed49e538b674c4db5a462d4741dea25b2f291b62f13e298f6af30e18aa7a +9793a71ed90b2059163788b13466a7c92a58e0719436c94c932f371cf6859505 +acc3dcc96c993d110852fe60c37dd8dcb5dd070689752d3a9e6b9ef365c2e463 +64206765f6c6da6fc0f337cdca24f09b349ac9caa8c6270dc446543ff6385c03 +07fcffb78a468f1850ed2649009ca7cb506753a501df8c010bd6b1915fb7ffb1 +9a89abea3439f621977eec938b95131aecc45a4c53c8e6b2c1d0a09c2f7035ce +8f4c94e6e604cfc422b5fe7179d2cced816c27554d477747cf3c06c4655c108c +7ff97ce9d60c7c629e3a78071a621beb16b502531726a5ea8d84971b54220a2b +50f4ef877341d89df692c6d03f49602029b9cff8c94e543d5930bdc1d3bb17ed +929b3378bc5c6541c9f3a0ebf4e03cd0536787d7ef67fa19b6d83798f90986c2 +66565f31be6f22283b20b78f6aa4c7e2e6f325c55084cded0b5a09e60e7d9c50 +845a931da58980cfa59b70d78d9fc8f19b4537d62023723b6130e460dce09153 +cbb36618fdf05ec90b1c6c8b248aab272fcd097d7a850ff427615c4093e83ef0 +ff22eb54e0825ff95db59e91010ad6c320f9328d78cd012ab018a85a545dd166 +768321ead18a5c189763831a5d225059316777b2a719c985e838bacbd3f48a56 +6a50fa123d6f8e2cfaf015faa97512925c18f9afaf53a681b4c7b18a3812ace2 +3b51c03620314625354db7db9cbb0cd4c1e8626511c5519537e17b9175c6d336 +09647a75cfbb0ab3f4f980078e132a382f239c84ec73296441cb998728ace96f +7e078aea9519f0805318f94843fe920631a39702c9a219523b534ddfbdc3d48d +a77474b979792ac85b31e615f8622674450887d27841079ed04f3fdf1bbabd7f +00fd1547cbd7b490eaff4594ed2b69cbc94a6995f62199152dd263efa138ff29 +91f8f32b09ef3c42a93defadcc491c165e9c2a6463bdd8a94474692eefc8dadb +b73371564cc20b29d3065ccea35a8b39861aa083eeba641eb56b285a09236fd5 +3c49e423642029164cda98bba0d446cf2786ddf7d757e16844ada87a775f4cdd +41a440106ea9fb568355d4b1fd2fff7603e8de5b0cf2c5916413b5dae89c7401 +afc8d0485992485de7f757a24bac3bf4ad0182c06d2a69ae57f7225cc5fb7155 +8b467eccda16eed4362d03b437d316db0ed73296edf8e60980b978088902d4e9 +0b822ba0a70f5f8e37f97311dfe871754cad35fd0efb527d12c1fd4f03d4b171 +30125ca76a86d2fd2532a7045d36da87cd19781294a57ff16c281a1ec6cc6b1c +3962fde3c266ab77c12924aa171292bbd0fe29ff89d5124529c35580dd528423 +3d817e6e1bc48dfd04ff150d716be5dc35251597830948c38c238d2ae15e6aa0 +f4a50fce784211e846f39e69c9ab70f5de91980b4cf6d8786a177c020aa869df +1d7bb0ff9db3f8e7e029ec19ce9e2c9088cd71a6d2ded42c030f272cdad436ec +ada0b4f094a4c4e9ff80ceee42e71b2becb21059840253a770477a8055190087 +68f76f31ef0a38ba9937049246592b46f6ef35569529c93d4b7965d0cefceea6 +ad71d7febe7090faac470e005859a3ac19989c3912a8e6f0d1645d8317d16a7c +1f4d7f3a0cd83db45894ab1a6f26fb148215660166530ddeb41209a0b2bbc620 +8ad2c6c21fbb1acac2c705cfb3d8ef7b929e2ac19551c485c0b40f820c6da48e +a45d2d4fc061bf8e29b25ebdb1a4cc3cd3235259daafa54d9421fa15c62f4510 +ba411b69f27aaac18d5499c27018289ccfe758acd37f8f526a5712955d36696f +1681c8a0563afe8d85fb246ff01abc3faca41838fa04991a8118d410b6d8b1cb +9439772a0c1f190020b92de9ec086ecc26901b08b7930f7cc53cc7f6a432ed02 +95b820109c725935e01c8c9c7685653dfaa292fb3f0575b396a3db2a5d406f59 +0c7a997f6555cbd5a811889181a67ad547a116d81194fc7e5549483fe733414e +415c5a3f1ee7f99a626cdd64144c2868e1751f24ea4549b95ddb2fad110335a4 +5e0a6a85741cc9d192dc9253edc2a54a5f208a9afcfff42f65a1c3442191c26e +52faf28510d42cac4d4839ccbbd04c79a78c136c646b0295bbb58a9fb5f95171 +023019dcf3a18f77042320714dc42f3981e07367647a3741daa155e088b9baa6 +8d67aff0e057889c2987bf47ff83218f58720a98079d9ea2874c15bd5174931b +0181eb0efda9ffec595ed7f10091ac0b09c4e8e68caeb18d489ce4180404bcdf +ad717f733b0d06e8afba80698b71ec593089b187b5c7b942e01fa7e6e20a6a5f +5899dd89cdc8fda8e77bf672a83a900c9337ceb6c4b006c3bcb5efb457dc9015 +8c6031b04f37e7318b0d2e6f937644c8949d81e0df3d285a29bbd3624755f842 +8ec7a9a03dd3c8ead29d1e604e80ff8412883678979a4279d0c234869f9e5ce7 +4b5614e016f2c151a5e0831e1c22039a153b362bff1931296a67c8df01795692 +e5f7281b19b0bf00d00b4543f89e48ced0c34a5f029ba050acf12e9955138d70 +c2970d05cacf2c0d0849adda23fd094c30870b54d8cdd4bd5c7b7d93d0a1060d +e13c321f0b8137e7fe486b2a192720d0251a71df0c9e7db1c7d7cd359ab9aebe +66156413a2d8556c04976a70a1302288699dd2c25cdae3a01c3138e96497cc0d +bc4bbfe9cf8e07ce198152d0dcbafeb69d209a0f9b50a181bb20e907da2eacc7 +27baeccc64fd775c5dbee30e7f2999e1fb88ea5712c603089d44381781c86a65 +b9c1887072912d8e4094d2b858391ef599916862fe53c9d27e8fd522f80d3609 +c798fdbf0eff40cab0f2a9c49a70f9df4480fa13bff4daa565e4f1e50e5a61f3 +f3cd7c653b029a9c4977f7544361018e2b9e9b54abffe8d5a4e8406c52069fcf +b99c6c650f45c61b853ced5e35c677c4a3de562737c25ab1de3b5d606f36e15f +6e37d64e5613126ef79b16163674aec5dc4e4cdea0d6111e51c28b8eac23ef6c +7dd7d8c8fc6f88602bba6402cca62889c2e8876af461019bcbc83b8ad7a75551 +9f432d7ac5fee1fe0b2e9476ea9740e43ad7445faca46c169a674ef253ca2b78 +17e9b7ec565febed7d6af4e22d04978e00b6f981426f57119dd43326d1eee8d0 +8574f5b5caaeba187203082ff09b4acc5cb05c74d4fe549a8d13992c3868208d +0fa8e95cfae19db4997c0d17d359aba922a1d47c0f08a897def44533e28796ce +1fd00f24356216fff65d828af7f9129f5335ae544f09c260e3f94a22a0a7b6d8 +32cf1a9a980637b474f3bf2e39da3bc2b122d4033550af1a6c5a2fc4fc40a4ec +2ec761459718b5eabd64e49e9d0d7425b37644d9d545ba0fd24f0ecbd01e3322 +39a7a70bef19dd810c7c6a4c0f23d3e5d83a9ed366ad2ee9b2fa08633c985bec +c237219d212807fc232748e71407592c1296eff826369a7496129e3f62f11ddd +c0f64b0c0ff10d8a3fc81245d0376b6ae9bf8b3795ecf197190b6789c2f66502 +71f9916b49637e1ba03b5b84e2101f2575d02670b507b907af76e93e67e60d3a +9fc78a22394f294831729675cd7e69f5b18688d88ad2b96bef6ffb1c48e00443 +1bed3cd7017824c359232d3333eb5c2ebde6958c781b82c12af8ede77fe4d6e7 +310556b8789761834701850d566d3ad6a8b990d5ead1a023a3ece394ff26d55b +6dcdec96af17a3a36a5a5a3429c494c680e57e9abbad61417eae2056b08ad633 +4e1346cc3079f503c798c907bd6ac891eba32473b42ea52fe9e560fbd85ae5dc +dc28e5fb54b6a64f7066aeb524bfc0ba7bd364314fbb4edb9150587892296b61 +54fc7128e06144c3afa179efea428f310fdcb39cd3f5020c58b668aa7d4415db +155bb615c7c171a6fd68b5408f8e05303d9916ce9652dc6677cccc1579418db4 +e7aea2360587516090645951dab0c32bbb43a829da3e0f7a9317266886310e3c +71283894d75f71599194a81f4aefae760ac7c24a982655a01de7e135d1ec7f07 +b0f267c21c7a80dac111a645eed97615d6b03745cb4eef6fe2eb118a5f754869 +9f387a7bbc64c60c1ac29d77f4bf2f44385e948cc0861376c68c1f0126cd9c8e +d6bb15b180396642cef68b579e1dce8c63a574fa86436898e50c6486c3828e2e +965f07d5e9b6f6ede6344f9788a4a876b8c023526c7d200e6100c99922903d67 +603c3854beab59ea92c493cd6fd49d5af3cece102f28da6c17afb386857c707d +c52a780aadfb4cec0fbbcd585ba95c3295ad3f2e0c320bb55e8e96569dc88668 +656e1c36d6f67992a731f24d10d4f8f9ed24e5687c1df3f3a1b6320732a9f8ab +d1ed75b8eafbda8b6f3f77f404070cb515afaa89ee62573e92aa0e23f1df3b1a +66c03e6e53b604a7535aac8a17ad9bd3a80aa9316e2c981128694a696f212f8b +61aa080d11e3ff663bfc7508e02122883dcc1d7bd009873d193cd458194d0c3c +364fb133727a97d70e9b55626de6ef9e06192f33ab522a7a229355fdee36d7d8 +b55b581682921af1aeadf621c214f19a0d3826409f131cc39261e2f749b712d2 +d670ca651eed4e52ddce8fcbb88d7d41d55c53038761f2514e61a06384b1376c +3e0ac18587a0bf102cebd0f970671d6351b31cef00f27face80bb2dfc3d4cf4a +0ba504595f3e64849b87faa0156636521a0814054221a62cb25ba902a935f0b9 +ef9509a530b988f643eb2275bb1d21fb1b87e2838e0a1011b7c4fe03b328af4e +ba7e91ece1a3150a82db9be7d5c5b408277b022d7c218cac235ec3b0270e4ff3 +315bac3f849507a8bb208297a261377ef4c8ee50309db63f45018d20a9ec2eb9 +03a141effa197bd8b55e6e954a9f15301abc5f8b21fdec918a2894dfc2719f18 +b8a0a86cfe245a429120d22f3be214804dc5a1fd7257902e67f7bc1001765794 +5cad4d0f5b1904c4048902230349c9696ccb4a285e5572d26ecf5d4f7fd84474 +2ff03c4eb801b29799e12739a9c302c5fb6afc1d20116f296ab7a8b904a92b00 +309c162ae8f0e95e17036444779c47694c8b3db8df9f5dc29c9e0ed5fbf5b101 +fb7fe536460d09555399e2065a2ae3caf41eb6fef8689fbafc2ba29bfd1e24c9 +f444afd9f60c4e84d8ea629c4c34e265c4d0542911e75e1e7e4c0e51240eda1f +49d95f8dc9cc9102e3254e50e238cdb744ab7c3c82799783ffea9a16aeda6d25 +69d0501646731252ed0e1f01cd248f0f003b0dacee643398be53e5affe122e96 +9ad1efa024c6afc222b5879c81bc0249450b2057b4c2c1de08be7cab71a40990 +91e05aea7f48dd44ce790786a6072a546628e974f1b19d69d96f03d0923cf8d3 +42f41d37abab99fddaf1c41578aaf16791ddf92e278d39029d7b8fa5b4eb3404 +d26e832fa71f8516f625b2fd81d6f432730ec79143675730aa878bce0f2d8a18 +d9554a64046e779bca30aab6f9ac4e6000410dc39cbba1aef930bd75f916fe7c +e6df2fb0b736970d480f598ce4f8cb7e26abd94b45e4f6772249b5b1735e6328 +4f87c02b57f8892c06017b12e0dc40c28c7aa2ff9b16bf17a2b78f86aeda4505 +d58a7d0c678150859d517660711741d1e6e8c4f7b9b7e531c2451af6cb0511db +631732da1f48ce9b92ba8ebcb668c06902e15f3e6c366a8a598a2a874de51001 +027e2072530476a21af45a71cc889bde7f8e1d1a8e1c56d02fd694c5bd9e4c96 +1d00d312446699fc438f164cfdd43b4e8c8ceb2ece99304a75ba36511df35e49 +4aaa2f983fe18254bb3da083d4073b0cbd92c92f68cd0ff915699c21315b93c4 +0867fcf3aebd2bc83625ecd1a053e0b6c7f082a94d5856a799b362999ef50a7a +a71232ee949c97b4210752a70aeaa4255c5a52d20bb9481265d9a83cd985c4f7 +3e6e25a046740d24acb204addc67fcde3fd217c934eb099b972826257d5c6cd5 +e5e6f5631f6903abaaf4030b98649b0208e04eafff864fbad8d2837f82f32b94 +83083429692a557b1f74d8abcbfd418e2f82309740949ef61129d3d17e4640db +3a5c1849c2b1ada98f6de1e3bb872717c367e2be9f53ceb97b17a01799b41f2c +7a1d60c70fe20e86c49794a08efb6f2980a6e3830a54ac8ce3d2a5816f2da2c1 +3a81b0ec586d87c09b7c91cd655538e6793b296ccc509519d3e0218e3d173780 +fd56ec6c069af908bcb761095c8be0341a34867f23894025337f78159c857193 +34f2d8baa77daa5d0f53d2c22839c3c46bd5ed659c291fc7890baee3f5201057 +515a951ea657bf621fdf4ce11a985353c8f6743347c1726484e92f57298b7b43 +8a7c83f4932effec5ba9341943fab2fb67ca6f68afb422541962453c2e7df0ef +c97ae537ac8285206725ad54504eb40ccab6deb477591ddbcd057adc7dd7108a +1b5b78d748816ab61e22e84c03e4a5577b505af8bf4d338cfa6431b122af9737 +979c582a6380607b5f798b9d7d4223330e104c3dc698d715bb5f9ad2a177aea9 +44794bc8a0a39daaae0f0f03e6a563e78fa15a412398d3b83a2ea8aee5992de9 +100dbbb013f2eb4cf9b6c3ef7868e7e26a5c03153f938b2a78ea465513b45e6e +306a46abaec29e4d83d1393f84d7d80f9e3332c768440053ee841a0c68fd5c40 +3754511deeb3119c34dfcbd04389d1fd3f6abd3f833dbdb5f59e171bcd011c6b +2767db9d2c888010cd931f62dab6aee6d2d50c084f116dcab5994d397f378338 +2267396ea53d1fffe3ff011ec9d8267c22e575d0970f72c72e12ea223fb11771 +dd15fc6e1023335e964a79cd2fe4f92697c14370d40c89335e8ff9bc4fa18c77 +93834f5456296be15657416b8d69b41a8cab1f6bfc70ebcb810091f3a005b77d +325479feadf5317b13cc7b8b5ff576af75cd306f96c7319eec244adc571ea0bb +2532cb6cd9064a6ce0cfd9b78aedbfae8ae79954c69235a3f8679cb775491543 +49f9fbecb7b196f3768a0157bf330c92cae3a73cbd1cf84856bfb6235ecc7e0c +cf8a1b7a8acc19a8c1f50e324b39538e3ce2e5c1a5f7f869defc39478d8ba2a1 +9c032ce22d39924e56f3bef00669243826b34334e13e3b1a54b9ac3448d1cc62 +6e0b939e4977143d642fa40735940f6514624eb1d21da4fbf50d6e8a91762fb4 +0ba5d55f85b3cfd999009ad7b65fd25ccfd030d3649a9949343be02d3025e930 +5d8d150c824ee0b504d1d1cc289838b6ad334465bc5b143661dfcf39ab649c0e +595c65c1bb680f2835f9e1ba312cac9d6978db42e46f13025ff70c8431499814 +7c4f9bdcf66d0d8838ef76ff07be4b6b5b661144769202884cf90010ca74aa18 +6cc025f01f3678ad587e3ea6f039a66dbe7c11780eb56c37ef7c7b2f7a7fdf8d +0e31d73f62aa2b9eef82dea75c082aeee0968298b73b31bf32b2026342c3be3c +9891e0d68b211b88518192a8a2a512338b1d86e1c854555ce402ec9689774036 +349f5a4738faeda427ae8c31eeed34d1dab18f5fe5341bbce6188936c6cd6018 +819011722ffd1da66dac4acd76da68236a8350d9116c25ac2e49238a0cd19d53 +deae9931d382b1922b267bbcfc229ed92b535ef7e44f78b62a495c5e782b5116 +a4cedd4e8a70f297c5b40c15ff81bcdf93e03732e429177705d1c10fe85f06b7 +f2b8e571a0b906cbc4f0b681ac3f5e8a982a100d7a215eeb84be4977934248b1 +b4776b8bf7871b4fde1dc4e4bf9179ae9a3ea094dcb6da9d44838465fc655366 +6cbdc8ba5a812f64cd150839cbf9a29fea76bee1a5e2b32efb3da81da187d58c +b53420589eba2d3b80811fec6f3d78f747a9e588533d8358b1cbefaccee1431e +c65b33f4541c632e47822183069473676d7c2a31ccdf3c70269b5bcba33ecc55 +d9ec404745589421384343aded47d87643e87e179e2325a8c3b15b22879ba93c +556883ea531ada3301d6549ec7ee95b2bcf948f0a67e1eeddfb84e1a694377c5 +a478b34b4ea279b18e4e8f035b0f7c8ba75639a85ea17c20517eb47c137ed248 +98c14f4bc1bea0bb5ba48f175d76404b295bc626d4d46f40342db9565a7dc66b +121fda6a9bc034791b73ac39c508355657751cbf98a571ac7407a8c0d59fc7e7 +dc1b1647e2cc53ca90ce593e970eb6a694e6d97149596006c5eda24ddc753efd +dc677c0026b960c8580ac88af65ee88254b50e57202f605ffbf297f01dc9a766 +6d9b75a8019190aa7b8d4516a9d1430e58988de7e53b33b27200a5c24f80fc12 +9efe012bdebfc162d006545684289c361133580acb1a083589bda5c1b1504c20 +c76928b37bb555189579769338180f8c72b5f96c45f4b0d18e0902d7b056511e +5ac7f05bdbc8a044f84c16dfc4b9b67e7e373627684d21bb0f8ec37853661f54 +78070a3fa33f407f01a7c78a07ca3768fbea7216327b86f85c013a87b9d5f9e0 +a50957d66943a6e29fea8caade26beff376fa4e1afe192be29670a435c09c832 +a159fad678da280fca55718ce8f285b591e77c45afcee55d7c2d9b2b743dd47d +ca7699f6858afeeb81f7937910fd46def51d0e741fa4ca0668c6dfce9493ec9a +a0ab9a13e5b88504db96fb24046dc003d0389d1cd36b658e3c31acdeb687fccd +3275a1022a9819b07106b74b0ed5b676a41106f75d4b944832135477b087f2fc +5bfe8a72ae1642eea5262c21e23ac74778b265119e0053fa6002db802a333289 +e91ada532ad3f85fcaae8195fc10bbc975348d37c0705d263dfe06f5721d11ad +c8e1c32de977fa7e7c71071da8989a77685d32222379183eef730f17cb6cbafc +5b97ab2d8d8a19684a612d1bb197de5154914e8c71d8b12050d326903354ea88 +90b4882e0a4296283a0afa8d0d5625aa75f24b703b70beed3c29497a4e873c5a +7b3f8c08b89dcb28da0d0fb6ef40c8baf79014c952bb5331b7ab126aa778a069 +5b3461be265de38e91d2df1be52f9b09247326b24d7797ee7ab54d16a73d7cea +14a204a759a34ca502d307f2a85ef0601c0d60f57428c671884f4da0e1eb95a0 +23fb2ea62e889b53ff667a9466b6c5c4efb479243286b942982a8af4529f56a8 +76aa3fafee8c98cd4a4f5f2e49731db7026a90252b26b590127d664666b89e26 +c2638a2318e63a0de91d72b06183f2cff5aaa7f072fd00498acb587f563a54da +33f4795acac34b74f86d717541ae982b072affa0a238678482c7674c78604a20 +d9b52a930f829f311f6f2c8f16646d25735f8460c33ae01de08d99343ca2000a +4a1c3c839387acd9efdc30b87921a3ab9e6f2b033d0f25bb8f69017c2d4fd4a7 +3fb3035f1389a08118e17c290445a54f2af5139e32258c338b115506341b45ba +8ac37050293d28147cc20471009586e7f40068cccb0c70332d6f0043b1a65610 +59ad15f3dcc6ca77da33fee32ba7a86614929af7073231fdc5ee356280ca649c +a2a84d0e16253bf27cbd8e1b076cb301f09e3beaa2320a0494a3245c7e67708e +05fa485525793d43bf6a9f6a5adfe3125fc5b3ba7774e2255bf6af4bedee9305 +37da10b7a73e7197a7189e2317d7ffd52e8a15e7931233689cce527a21258ce8 +bcb968ba1c278734760dc1fd46ed9db62f81fc7ef344c937337292d3bcf7386d +3ca6246293c27c60e2caed4b5f7f130f379758ac54b003ad49c79e4c1dc62fe3 +7333270922ccc6440152b14512dbaab65f523009694d932591dce7a7a1f3e529 +15adfd2e833fc67d78aa0400d0b7608fa2c2e9217c570be31a06570f69c22812 +911b925989e734ea31d62d7860676fd5f318fa51c219d0edc5f5bff056d6bfc4 +dc3cfc4a55d8afe80fbaa50e2c3e7f9968f7192b8f30ff52ac5db74fc554a1ff +991e3fcb20cd23d128684a12214636563fdac85233f136f9b66dddf566069b51 +0d77153c9d6cdfb938639431c0fae85eaa0220b6e6a51785834c59858bd9bb13 +a17fc4de0b754f81efa8e342b1af17b6a9c57a180c741a7d8fb1bce802b25b22 +b6cd5bd9f80f613ca845642dfb345ad5cb8f753158571ad13d281bb911ea1214 +2a6e207bf6b652a5bfd67dcd7e21aa755a24a072415addecd3abe5be85ab4ff0 +582f363f6c5b5a3cf3837e4931c6d014c864892bc29a2f919a1f63552a7bcba3 +c10a1123b604c1ae70784edffbdb29c304e2fa9d297f43381fe6fa2140486cf3 +7905d265ff799bb6d8b34f441e18b644c57cddfcd6d7f6b29c558de056955054 +d6e99ecfc21e8521c494dcfd0454d8f8a65f5114808f6009e8326ec2730dcbdd +9798ded2fb28b727e812676043f315b1576cf9d3d169752922b26dc142b11a07 +67e5c13343c5735bb8f46d2cf7929d69b9472ae8d6534465f88ef9faf30f060b +f682f4676fcdd29994854a0dd62e37bd1b6f2fd698087fc461a9728d708c45c6 +dd75152798af0fb60fd52979ac7f46fb7623b9d88c02eaad26b96b48730f3da9 +7385f07a14b38556f7c3d83077a303b0980a926d506d78cfeaecdedda6e2a918 +9a78d7d7d9f510dd5b190aec89fe9cb9c77f8b00200cee77d5aed641e37f5c9f +71f2163cf5b6b1dce394ad81768094dffad9735580a1fac83a40bad2f7ec1795 +b7fcd4ab9530dcb2b2c6b1902695951bde9b861fd4dbc1cd0bbe07a4aa942ede +17f47a9eaac7538de196d92e3dc977a169e8ff4a30af18e23d8bc6276efb3b03 +7dcfb7cb44af90b1ddf1c6d7794bb7ccb5dba6df6bec6b25b45b2154a72a8e11 +40e7cfe3236876b78610aedcdf36c5ad5cc0965fb3c10d765c5b1921515b11f6 +e72ccfa1f1e960ffaf1cb575c67dbb663894a69934ccd947fba101fcc67f5bfa +53f198ea40b4c20b1dcc192c9fd483eecefcda688d04ff00fcd85b26a86d0947 +ad7733cbe42bdb31e2a2e23dd03efc19033575281cce86a8cc5301cdd8228ea0 +ddd2548b6b65c90d7e1c06ea82a17466108995240330dfcc67be94ed4e9d1dc1 +ea560f11eb46df4d6935cfb336953a3f835d25266c8bacc8957842631d67942a +e86c9723dd8099e3aa33f65085840028d9850d382c2e5141449100b87b5f3672 +896c02b3155c943eb19a1a92820e5b7f7159ef82744d07de2c5427c3c4b8107c +d8720f29da28b88701351ea4c60ec3b4733341651c9641d96b24aa2c34fb5d44 +e10559079787c2a95989b3d8e5a074bc8904ed74df8f8e07573411ab4a806337 +1b99a80e1e6a7ff9ef80239c6d302521872c9641825a3d30b35715b3082e8214 +c8ee58f9f1ed2cfad6aa4cafb20ae7e1fa2b6c09e7adf03464ccd73f0f46ead4 +bf63b898e7af9f21f626373a8ea3787f918816be5c39cf9dc38a141f19a1ed57 +728d14ee67cfdf177b33d4c5707983278e3e32f8101eb7c380e11c067af61ce8 +65a9c452e3cd66de578bccc44f74ac418a4295e470c21e57425a018c8cd4bb10 +1f3f7047fe9be6f7c09b3ad766850241a0c20bf467d49ed423c3b56ff255fcf5 +c858cba72fc5b668b0963941ff67eeabd0084db0978d564f8ea098f1d915702a +ae286dc52538f8ece474f286538feeb23bb1a078bc5a5df098611bd8fafcd6f0 +279bbf5f1345cdb4320301f69b87c3e8da48c5d6e5581e10d5e7af656dd39419 +45e4d444ef2a83800029f8dce428f9aea5d9215a1238e4b227b9c8438d81232e +729ca036f66353d9d097ba6c83ae0674cd05c0890376af184c2c78f4a09b5eb2 +b41e3dd4f155d5cc7e727901f2345aad56a7a270384ec11447b7fcaea70a399f +4dea87445da13f4259397101c6a39f15b57c6929498fe3337fd70f54c21603cd +3196dfdcc3b3a0a76166e941d1dc0e16e169e1319ded9262191126eed36fa93e +555de9420ef3e90cdf211e1dd9efdbcdf74becc233b0e3af3b2fffe101db0180 +9b1849206a361905f4b7c563d2181d8aff443b4fba261dc8acf8ee85f03e101c +ce3351d0ed817178d96df3ad88ac936adb24711b472376c7b9b3735adb8ab6c0 +34e65c24a5c9f385ebf5cb1eb785475426c97d82c4144dbcb019cec9b2e7ac88 +1141a465534e26f7212b63e361342f747613dbb1a493fa52a57b87491d5a7e94 +323794e2422b716147871e21fc8097e41d821080aabbaf1b3bab330885f80390 +bed6dbd41c2fa8ab3bbec9aa1ed28f13c6c17f721ee156e340d090e3050b9abb +ae4ec3a691ea1292618c9844737f4ca88f97106a32a660dcf11281a6aaa61d51 +445365c708c49b133b3aed5b8c4187d40938e1b0a80751a6ff2d9eb8c1cdc6a2 +55a239df8d2cccc596e2c9922be2b3488536bc78d1ea775c440d4c4d51250419 +7c622111e74333deff91b4da2b478bd8846263c807de387e442a3def48aae366 +57277c9d8c8bb282398503ce55f1a8ff24142c3d7dd180e5d3157d326793da32 +f79cc14139460f90016b2d7b1dff05c8dc355e6bd190ced08da8fd9ed9c77aeb +f46474e9828fb61359d33a7ea7d0d816c4198f297f709c62bab34502c0522f9a +83321498e1bca8c4014f9ddb3cb6da2f353d5730346fe723f21e4d8307309ef6 +51f9f6367e14a7b7a97837dbc51e17ad8e01db824780666b3af9ef7337dd56c9 +589704529bfb19b6d311fb4d9898a6dfdddf48f9a685be4df26f2175e5ab1e28 +6657067259ad25939065a2f927a6f2ce4c436e148026cc3913b2486a3ce2b9db +e2d8a725330623625431c3d81ce76aee60b0d82c6683c7c9def20dfff563da73 +43b8772101b49671ffa568bd965535d439a587863a904429b88cebf8b083b082 +a5c04ab78666cd1b73043b3ef7978b66133a6c22c6b88ff183b55a63cca32dea +ebb71edbee8c3fdb033e6888f05a109b91640cabb413cf7d4f3cb821dbacaff5 +3f1c68483dd03f721508837cc275afc63b9e55f33475ec3cb0bb3c06ecb258a1 +ebec294c7b644e88952e7e2251e1b3d96918fd8df98617c11a007fd9d1fe236d +d5515b319eb119408a9f48d1b63b7eaa80dd629c4f41821c78954781168d4468 +655511e1841cf29a49e48e6683b0578d9dc7f9a3c4e1bf71e99ee48637482d23 +f7808744c5a42e603b34282a627b344f00ce23312df1c079c5192d1322fbf781 +388bd7ddbbfc8a36a57fe2a81d38d82acdb8dd6847baa55de76ba31f093164bf +c52579e8fa13fdb9d53e140954e754c19de87993f9a84f8313b7dec136d1be6c +d2060341b9b8980a3b553d0115e91afd7831047334a4cde6fb8b822c67fd529e +a2ac4baef9e5f5037cf212fb574b69ecfe776f2593fbb310f966eb9fd72b1913 +46fa531f9a68881e52f1d0ef59f0d93d021fe6c78dc5a644ba8b9f00ede369d5 +d4362b01b362fa30aee7bdeeb0bb72f96ae4a88cd4576b584f5309951d748636 +86df4f13dffc7f6ceed53b9e28dad3d15bd23c976f9004abbac6567fef841c8a +bdb3d8280b1233304b1a57cfdeeda3e8222e27d78ee2e99e6f6b7f3990066137 +13fb9ba7a1161f70bbe449e97efaae5669e036d2bf3b2e1f816ef78abf779e95 +4fd488c2c03847a1def06309e4559914891fea3d756c6849c2c567a2c2ecae22 +a05564bcb6af1312053637445de2df3c548303109978ac1ca5534f9d23fd49a3 +7cca05216b2d993da4fb52e1b154ac6945006afa6b30c52e5671821ca80d5681 +2f49c24a97867034c94b0a02d929cd58b0f915f70d89751e6251479fea05b994 +1743d3aeec3bd142a63b6d06fca07194a017823952c11b83e09a257791085cc3 +4b3bdf80c6f13950602530aa9e4f50dbca77abe426cd7c276f93300b67a54f25 +a23e634e3151a06de5341ed950449f746996cfe1154146a8dd6050096da734e2 +f9c94a8b0354e2251061c9b0a3f6f983c958412c17916a16fabc9bfb178780bc +dded63f7f45d80329db849fe2f70b48eb07697449ea6c849dea2442a553da625 +40b3e442686297e96da857e2eaa6c43945c9dd0cb2490616fc5b507c427da8d9 +9e3fa2e2513d1f71a579e93d300e95f7543929140c37c1adae929dbe6bc8e988 +d7969c9154728f71ecdb8c9950c7ccdb803efad62b3c4db0fc196e2530eaef6b +07718a7b0c3b9c75ed303c79b2fe1886f541677a25496c41bebd47510a7001dd +2f7c2533d624d0fc419eec4985368bc0f0ce7439a779b99f3c0f849a94b995ad +03edf360195aa33415b5e6245b9695791b4d82d032f068ca43736e23c576db6c +adbe46aa7261515e47d59d93d5d4bfba4c3f8ba03b07603bbf5ce97f3a377806 +06d135a500328833a8434f9ab8d7dbfa98d973f71328350d20325bffd4b7f82b +baec88883004643f53d1a4dddec9c13d1dac0e218507b93fded9a08172765d77 +47aa8fc810182b33812341ec3a65fae8c94c8a55ad736086a8c761d4237a0575 +4d7044e80e68ed975fc9889cc3285ce506163369aaf9d52c15dcc6e2fa6d82ea +4bd7d8586deb169278eb39a08cc8147c068b0c83334310aef77a58b2386cafab +13aed4e46b1cab4ded17ce774468c4ad6770dd02cfd92571712a263df59b6dbe +644e4b1ca1ffcfe27ccb83d6869811b80c36693f0ddac5e83db0d1c97efc0f5d +d06428cdcdd23fdc2822020c2d15ef85ff675222cd4a022ca4df2afa29fc64f6 +6fe9cc2800fb2cb35a45d14fe467247f811c4b7d3dbef9e3022e58e8f85f476f +b822e0965c5ecd7d9ca9b1c60da14f2fe5945a149020d33d37653b8c517553fc +ee9a2d314a5b30024e9a664f177372269d3e39c9f7d897dc3964016b67ef15ab +41451039cd5d3557a265f45fbe0f6f3b1d26879ad0106f5942c6980a6311cf85 +3751eb4397ccde57e12c6eac1d84b212d8d7cad090fac3141da6811fcb01b3e0 +6bf55c98eacfe8ab60d4dd9f896755f2ff976ec07cfe92954ec7f5877f07e4da +2f599507260c49464ff0f08d6acb7043b892fbcc120e75f162f3456b112fedfb +6ed7e44a5a6c0796ed1bbd2e3bd18b6073408c89223f06fde813cf2f755eea18 +aa057f90c1760e7a186ae3fda2de09da37f77b9ea29163a57d2dc87aaca52799 +fcd9b3fb3b468e5a7bce38d034db22c21bbb5d964231cab0150ee5b16b17d72a +c14c8284a1f10a961f4171f6c2c716312880133552d484f655f46b709f013666 +45cfb5ea394fd80279abcdcc73bcd2ec6773dfbffdeeca892e64d94717050930 +92746442e603728f599808682abf07106f8f775d3f4fcfd886f865b85b5a9154 +f10b0cdca3e2ba7bab04d84352b1ba02efb24df85465f084ae08a2f0e5576672 +d9b9649734b1501bc19a138dff3c3efff97893ea63fad40856023b5b1b6096d1 +deddd70b1a0b07b0e9585199a468c4f820ea500ab04aa6238da49e4bc3945f43 +f6791cef792e5a0d3c5360e5fbb86e2dfd76bec9dc33b98c92be381b3b87ecdd +4e82e6a2766088805d909e87de1fc0231e3ad34e014d0297cc303de378cd469e +e75335b5dd5a136bac12a1bfd19da68693b5d6d483a5e93c739a036768c71d15 +44a74a8ea5ed3a2f60f19c8e28cca321e03fbb6b85342127716c7845a9e9a0e9 +c6834250b8b4d3f3214737a96c0bb1916f29c95577ec93d5ac3f5b4222d3e378 +d3fc4589e94655e9b9f6b19ba63eddefb326bf38fc0a64f14a4cd92a4f188488 +1f463d51ddf122452af3805592a6a218f540dbc04de17d3276932e42a04f8dfe +34a9a3db0ec4730bc14d1e87406056c2e88505dfcfebc23c08b33e23ed704654 +6eefc07ff6cbda383af18185204115fcb6c3a6b6c9e7681b2b8129267eb9abc8 +3f84c755a6a1bf12127852b6fda1480c61666e97987ccfffd7163e073636564a +b1ab920718bb70d1008ab60b15aa8c9efbbf528028a0478b1aa1955ce1c5e1c6 +e10702683487688b0e821e897a7c95dd6aefb4c47469711ee38b402461629341 +e7f7223153652f3fb216b89679c4d468e47be6951d9a83d025dfa63674f2d375 +ca8037ffd2828fc58c34d9ed778363e2d9b90cd7704ec41b41ec23e97c844be8 +b0e442c77d366b90941786995da3d8a5720e66ba0f58c8107b6e014293c73ce6 +3ac0ea93642b27392036a567ddeb0ed6b4302d54654f024341846183709da046 +489a38366e083c7488c28604d7b65a4cc3aceee895591771c1cc65e704f75571 +34c2ee5b066ba17b688fe2d9de79b625a65ec7601e2441fab2272c51e02840c8 +2cf2ebb27d80b07505041e2364792cfde34ebe77c22a2ee5bd669cf14743ed88 +bebb10fcacd0bfaffcb91b709b1d878ec96294c2522eaa51e2ed6518d7302c3c +2d282d11d8947b745cfb6479b55eb73da5d1f66d520be28843ea9b4a02481a8d +36e338e84325d87f0931cc91607bbf14df2f546664b96d2aa51ff55c24d77100 +2eeb71e9f13d8819a617b18ee3ebaf848aad3e33c28d07aeb721f52d192ab34a +46a7a0d5056e7585ad22d300ab2f1974f8cd8fe225f0e1b2f65d1c74a4ff793e +44134c25380380875e499b65896562430ed24d46906a00a0a27c7d0bc8f0645c +ff2fcd78b200a77d74438c3d5d7808ad9c452d62db903fc2674d9690f892928b +3a832178c4c9a2b38c9a7900dca7db1413f842c55d3fe4f0fe708f5008aff902 +43e950c728b8a5afdaa8dcb2cdf032b2f71789dfee7a52f9bf2f8bac931e3d7f +f7abcccaa478b01a47e3a8ed50279fd7e291155cfd8628578de16989238afc83 +24b0059966cc08dd82826eb785ab1c174fd5639b46704eb9464f41aa09a33fc2 +769cb362181be1eedcbdad9eef8d79e16caee45d199c618a3b5bb323e3100928 +541671eb0a4e58d80fcdd12d17cf851e93bd8ff8b439d69569e7acbccefefadc +a5cad1ac22a84c4e567c3d502078dd06d08ddb95c6e77cf2998fbe80e40a012e +c09a0411b68a9d7ada5dcb95255d56600fe560555acf76bebd982be544340434 +6efe226c77c38f3b34149c0865b5ed401c18d9fa866fccb282d4ed4e98e1247a +620d863dda788672910f1a78e36bdb90f5ab5444b44fd6f3eb52c41f562f5f29 +abf75bd7c88121e7a50170572b6e39e13141370aa896448f03f8ccc1511fa97a +29a4ffee4a7e29fc2a205cf44d3000d9aa9163f9f3d511434729f510126e78d0 +b63c89081761d8a44e7dde70b24274b9573e22cc800dd88fa298bd41b0328cbd +af9c3cb27d98309af8c94f125a592c12b499e057ec7c4b111006b679fe8fa676 +e79171796fc674d8758e9dd2b51574e814cc3bbc51cd8f8d065c8485b2c1b5cc +c22a363a564a7ae70bf7c62d5f27483064bde26528d5ba3db9afc1305d3d0866 +67f38ef1e1a7bc736793c57c2fc4f550c01ca59a9a6c17c4156be253bc335cdb +1aaec641ff9be3490496e048174bf6a1ec6f22a1a78df5d2710007ede6d56a49 +dd5a64e66e265a63cb6b99bf5fc4778a8a9e3fccd93439a27b272b8c4f0022cd +b63b5a78a6d8e463667c2f20346d8284ebc04242b2cdea5e73eee824789bd046 +4ae9a51d2a4f2b3f1d877b7e1450886e234cd3f58582cc13ccd11573fa37b303 +1bc699d876c80edacca6dd2b916cbfa4d4ba81eca87bebcc6a73db7da878c1de +9ec104a6c55384ba09906a982d8a6540570afca82cfb82afc18703a8343c477f +171b76580f988640e01acb5c83d5b562c3ed45f08d308187c48473c215756d94 +604d21e7e2d780de76caf9991ff28b8eeed7db563b69a63b9ade702a7943e957 +7bd7886c2c8124fa37eefd48c66306058daeb8bf6335e5e7b3a8df3985513337 +71618748d33625a2cde4a9db21c94d29b46dd3ca34f032badcc93c05056da90f +9e28ba3ba5a83eef41b95421e8853691d88e2181c52c31a06d926ce1235bbb0c +e73891754385989f199de5f2727b022fdd29d49de0d2a19be7042a429805b00a +2d778f3cd5e4161b25779578555a24daaa332d325d63736470572ebc5efac02c +ddb6117a73a20e8600b13d78a1041086d3c4e0a8885b51b794ee0c342f70237f +9a3dc44b32a0e16c185f3eb344abbbb94dc0c57ef1ea11a03fcdd8b02f0ef436 +2375ba201c658b36c959aea128fee5c46c07be8d8c73f0028c19bc722811194d +5cf7bbb02cbe9745a3651e77a7c0ca6d3045c4790a5ef3d098a7ffb6cae83328 +2bda3df8436877e6d27c619b27588db88987f98dac14adaea7cca627aaf0197b +78d86123d04a360ff4eac6ffccc3e885b2325c2a8eb70ecf8cf03c6abc927fda +e02b7b6a4eb52c1ca28cdf87529f20bbf62e7228f64554d3dd5dbb2230b61a25 +60c7228ee59a2cd3e11ec8ee768f1b2274b0c381615bc914fde2ac80e359e6a5 +26629d1849d4ffdca907a941b9226b200701033d76da91dfc5bd4245f3cb5601 +4ca3db1173c7c0d2e8163f62dacd1cb9283b3d045734cf1cc2a2cf20962df02e +51507c045783798545c8284cdf9333a613273f4c32d49d0a69202c25f1f541e0 +1d8b65e49fb947e9681f86726971ce5a0be1abf61f905457d85e8959853f4483 +127ccb31c323f454aaf56b348b6f4e7fffa8d57dd73ae3c610a5d4cbd86f64f1 +506c2e6dd22a983f2ad6ba0640cc7d94b33f3dcfed1dab09ac3b2992c13dcd57 +9b2f216a3e6723b6c4c89f0ef8992dab671b413af7b405a39ef64c080ddedb49 +516d1a0d9cd173b8fe64478a382ee93de28a4d8e058459b890929165ec893435 +38d4f419caa7c8770dba82e1b68f4b285f63d15acab9f0fad68fd418d3a4a023 +ba99b6ff9d3619d4ab7505cd5e5c8ec8511583f2e13d14476bcdf1910d7493ae +d3b3eabd34cec3106263c39a9132d4df71f142b5cb04214ed1cf2a33650c43da +98133b0e35baaf77d63b1a318e7f862337b2b40af6cabb93d36e7a84d16fcee6 +2803d02319e76e35accfb3756160d9bc3d34e67aa17585819d1886f5b4f5a909 +ee49ef373be2aed967a6e13490805943fdd019be8a982bcd6404d20b9b4858c8 +8c3c241453d77c0df585b5333e0863ebd16d6eb1d71da377a1aac06b9f04e9c2 +75438645400fd6669cbf6df7cc44c12cd02b57a0a6ead317503ddbcd07011f14 +92c4f460f7ae374300fa51f2cf6d5bd49abcf77cd35fdce1008c6694e918a140 +b3c85ee4b7808bc36f3be968a246135d9b9efcef80c47b1bf84821d6dc5c1135 +3a0f3411d62a7a77506869ebefea98fdc3a519c68fa6ece0f4d779aaed3b72a4 +e1dfd70d5b769d5db7e0486d6f30f0128c2d3ab6f10e3aa22f894af98ddd62bc +bd5e8c05569d7b2f692ae56ce639007cac4d30b2fb37181072a3363d6fce3f6b +3ddebc67403ba4101add655949698208a246644de5d020dfc708babf5e94657c +030295561b652903250d8688fdfadad878edefe70fb66daabe9043ab3c0712cd +24d36a1fb4356baff359295dccf562666ef73146e87f1d0dd31f9be8c306fc90 +0196853b8b56f704e9ee8dcb699d50b438606852db38e7add3c57920c15251e8 +5aa49c0b940a3aaba5c73cfd27404311ae4f071a7a61f550ba8bab3aa370aacf +543c5aaadb338e2f262403ebc2968f5ead6e6115e095126359f41be3853d7e1c +bec928abdd257f570cee3d8371eec96af96a75a96bf5347f13538b9c6dcb575c +057ba46b6c8ed7b40dc21a75885788de46cb95f54161eef83c8275e82e77893a +4ab3e0f89a3bf0c7898c72f41d66090d742db7c9b5c48c41ea9c290bbc1ac8d6 +abb9663b1111c8fbbc2589c28acc442e62bdc624927db4fee7c904ebb56d76b9 +b309ebd33a7cbe07cdd51647b72e89fc753d6211c0090bc88dfb1f77c5aae39f +b535dedb1528f77545cd1df7dbc464554c06883638b2b2b971c87c23e6562845 +55f1bb45d01e39ba38f45bc19364ee505dc93041b5621b0e783a5bfa2bf112d8 +499b9dc2c8e49aaf0606e44dd13d70a14e10cbc6b47362e3a69c4b46c0082c65 +2348175e1c1cae2bfc53269ed6141ad86576455c04ec9c797cb64d33af4c1807 +1da3a342a65f2715398ea0b7004e2de4ffabfc95af0079466280b14aee22cb61 +05b8e4a5b3a3ffba50559115f18acbe2be3d72f4b69a8c214ac820d81a5e1249 +8fd47e7575157aabb7a4de6568ad35cdf148e760c4dc3782dc5f114ff20d80bd +ae14badcb2fc6dae2124237ae075d648775d9fd539618c2764c5280624640697 +7c2b71c88929c67332685c2cc938527205c48c52fede48ef9ea25defd2a80edd +bd631c80fdebeb2d9a96159d47a0f175534e01442786e9b89d4f44c00222e04f +c2491f78047fd17ba9da220123ad1b96c8299d3555c9ba5dcecd864ab134b824 +a8d29bbe67fe26ee976a753e64bd87c6c465edb4a39af067fba336af165b3303 +2f7c1f985936d52b176d6854e71e4f4040d6b3b9e7ad9626ee2c69cd65486baa +c8c4c10bb8cdb6989085c9c7b59ab1f68d08245ab81658138b1235923fdb3cd1 +c9254b3870058f0bb220c9cc8aec5114851af904737c1e9d0237fc301b1482e5 +9be2f0a934176724d6eecb5add35013198a0ad6f361423d3b291942e5fdb54e9 +b3612877e0858ba80c413bcc0717ff69f0b245c2713671427fd92570b8fd19e4 +946ab041f55aba60c82304dd7774c2f810c6b3eb4ad676e79f41d6dfa82ddea9 +006861992c199f885a3c86008d26532e87657821d34701b648d7678190af504e +69a36bef7868967b0796ab03d9eee44ed90de210ebf7c2dcde0e37da5d7296a8 +6ae105dbafce6f140a8399054cc9d37af04820c16faa5a71647773453a19aa0b +a637eef1f43398e623c1431c21246c7d06306285ab07a83607d839feee6550ea +9f5e1c711c9ad404980770859ac901045de3833b5144b3c76998ad168684c6ae +546590859e449b7102bceff9019c047f7f3ee5d794c285d699db77468895960c +ddceac5e377defd48f9fa88b31891a88482139907964cfe762972a49dd62b9eb +3766cc18f2ca4de4fd0a9c56b2e034dc1876382c99d2bcd2aa45fc8ea91cf83a +8c22e55988f0bdc40583b5c3a4f5e4412322ffde3ba6a54c9841dd4f3ac42a71 +5b395dd6c85b316c0af5565dbffe8cd7b78fcc40f71d9299282200cf64341fb2 +069d70c93436bff50265880498c236616809d32cd4dbddb48748ffc557a4af42 +bd5f1e8f137fbbebcac9c0a2a9711516dd9c41b077c9b7c119d12451c4198d71 +fa5408b250663fce8e546466acf363f9e9e326ecbb236cf3829f62afdf9fed26 +1d3a39df0968414246ddd9bb839d92496d0163816cb23fcf1382e306fb2bf7b0 +d8913e30144ddd80f2757259c14432227fd07c29e7c7d3fed9361bc25b9e469b +2ca58eb8076ceedc6ed95f187d942e27aa19f485469d4d8a6c56e6789bf09b7e +60e7367f908edad400f3e6a725d8dd96b0a9ebadfa8aa99e5fa5e36b29859c70 +565119b80de29b6d8beaaa50776f2087c99d6d0410676081eb182d2676efcbe8 +fbf62191920ab1a53a430290e8ddf32718e9f207b20ab8e3939f1086db67a91e +5c0d9a1d41d44791dcb131ae1c434361a252e9c714c31f68ec73dffbd68de2eb +e3f3b5dc4aaeb9899d7761aed1846415b59be868032c2a37b19b3bd640b0cad5 +fc65f80740cee251777d7c0ae9a6c1f206b972a1a0a0a2c76d1b5e3b2e5f8c8e +f694c4284fdb41ee5aa4106e38995a8722c168236ae7a7b9773335cd17e6fbeb +b14931fd9e63197c5cb8971474ec848af9d37196cc70492140a3480ba1d3de93 +f42e6974d0ed85609d8e668844d377579e550ff9f78e735d12bbe0f043dceba4 +0296213d2f9b322151eba5f0a88c388b15b6235b2b4ab19562456493871d02ca +730e3e19f846980eb7028b62cb59246555a3b7206997ce36e53babc08ce679da +f1636e8c8e28fd16eb3d081408e30f5d4dc254872cb211642001cfe05ea8dd88 +732a76f27980a6fe501f683efb6cf47337e41abd49518021e466c09140fc06c8 +68702b23cb4599c76017b5539fb8115d228b6fa2e533df6bf8ffb37d53c201a3 +db19c437696b5bc417f05c6ff76afa0b0d4ce0fe33a48f171def59cd5e322dbc +e4b1ccd6ec9c38246efc2b253da41478f345e8e245dbe72349ef9bbf16c118c5 +7034f170ad99bd2cfa06dcb6c7fb9e2c2d5cc3dbd9b7433ca08ce7fc0768ec77 +85bd7f6a471c0f9c0c5ffece7dfe7e096db36da83c2cbf30c09e15ac903b10cd +770628caef8e10f10ac9117591bc1168c55360225e7543f7a3f88cfe2c0f71a9 +b4ce1c08e1a26e974559ed86a30a66a6cfb96b87d74b7fcf8125d653dbf4b74a +417105d3b6f4eca83e8f9523e627791ebe1d67a308d906ea2560ce735d1bc39a +eb3df8466e0dede72a89e91a6715f0e396065e0d08ab65f7748c649321157991 +dc5fee2d558c3717f6df62ad1dc7266fc7453825929b0f335822c09db751fb48 +3cce0d3cf402ce81d11e8f54ea93ce8142b4aac6245c771353a3f134751ea747 +05ac8dc7498fa6d2352c34975883d0146308cc680273e12183e45d50329f15b1 +361085f884aa633eda075d1b7661156216bf77f9faab30191d11b78be118bc7c +b083585672012e059b8539d53272f7b6d3d038a5569a81ba8e28673b83af4ad7 +835b8383fe9a956a036cd082b6f1c402ab03ac779c7e3afe4ccde03591775f05 +c3db3ac6ba90d967385910df512b6b06df871c8a6830444623c0897b9ed59365 +b030414c63c9ce6102d4e0b8d4d31395922db6f74ed81c84571ce5ed1c6811fb +f3ee54e4f0b4317caf934c0b9699f8dbf08668e0030752ab166b734997d5b2cd +5406de25707b6ade86b9abb61e7d9630f3ea9b09740800879801d32dbee3123a +b4dccda2f34fb5d54bd648ec5d2fc3e723b57b942b89d9e0399838b1a2f1fc56 +c2b57dcd1095658c11e371ec0f04152db13ee23375f3d8b2c316fa20c318bc48 +b9fac98c82b40c7d34e53b23c55c171219e72f4216a6eb58ef1cc1ef9828c980 +fd8ff783c7077794e1016c14c88861d43db587a23eb3c62981e6e6c49bfe2c8e +fae92bb8952a3f6295ac8ea71431c5960dc25e3358559e2cbf3c9a08c78f71c7 +1d4e705be742dcd9090630dafd218a78ddcdf6f61f5ef2cdc2453605bd68b729 +9dcc1c7e89971d7a5d30df39ec4a497a0028cc08e76daf81e2728d7e15efca9d +e66994c7c1045a1f156dfc39405a376580ccf94ebef6e9b0a76925908c42c7d1 +7a47de9e1db89fb04584dbd3e1b5a8ba979a7131daa20530cb22449991bb8cf6 +187c20e812cf62c94a32638e707cd629d6c7c45d9ac34ce252a517e4dfca6d20 +b3d402029330932d7ceb35ca180a8389ce86c6173fa709185a2dd92b45b0f319 +145d6559e5e54f6242aff5a42b22ae86ce1400f1c7600c11f38f577669f995a0 +f8be0594ab4ee84c3db9775c6e5686cf5187f5b7c2b090ea06d3805edab09f6f +78dc8266c9572ea2388bc085fab742889bd1a9bae1fb00b99e20381d57f473b3 +a909213034c5ad477e295e874606f9b50318e951fce3256b87de4b436e764dbd +54355d3af1462691c2d17f93ffa97f67896b1c1f53bf22956efcbd000907ef7d +05d8707d5ba1b3eda214effed42914c0bd9a0d4e9c716867043966669f482917 +bf66184937615500ced5ac8b021f50e406b1dd38d1cf31c4fc94410a7b4a0d1c +577bcac1fb159abb4c2fd6cd2725d3d77a835237acb66022810add463234053c +279803591e8e73b1324113ae082583ea1f40bb2b25688c3838e18ce2a03202b5 +fb6db0c72e7330330989ce8c4b6d2c752cf42ac8f10d24c82a972e0bf0126ae5 +52dc1032570bd58f5a293a20b2170216076d9adc2f03d31c61302117f5e49f8a +1bd63003ea3c3c290700b7660ea64814425b7e6e2059224f8d946d14587d356c +6d8acc74aae9807a703fdb5e58485f49f02f776f6a1da9f33dc28dbc39da7f53 +10dcce563fc1582112c4b7b6e06c29ebcc7a28de3dea882f304f8f100679c196 +db47ba47cd1d277e8b68f69f76de41314617f6556babe10639157fac3ebd3062 +25f5f84821017ad10af596c4dcd1590adfdef57d18402c1db5c79c7f35c48d26 +3d5e41711d46d480c6a768e3987eadca8b9037accba3e5167512015fa15358e6 +aaffb7f207c379fd4f5e911a0d49af2979e9477b4d59ca9829cde5494aa0fa0c +5cb80b7ab3cae278eb418c8870a7e965685016f36a44966b4c29d566ab93f791 +66841620f56fe0418ab6b2f2a53f5a6464bfbdf789a3802f464b0506ebf2b66f +77cd3ccebb62e9c078cd868ac2d005d82a383a92328a2efea694408c4efe96af +09c14612d6498d6925399681a0e5863903657622108d6fd8584ea97065b0ee93 +295a1feb9235aee6d919675bb0d8fceba3487b40c85ab6abd9d5dc8664014fd1 +1715b7271f8c69181d7df1c9fcf482791a73cb87a787e8a6e5e24216ff1aa3ee +f95f94d0d8f52e8856035e3ab0852762c88e153a13cd221b5a7b03b180950b23 +8845a0dadf6c8d2a29e589ba1e9f07605f4c39f6205c8ba88515c54c205a3cb4 +d8934bf37cf60f0378792d0c83a34e09cfb4f7ace4edd4c261dcaff348ce3478 +882a31c637a09a02604ba05d39d4426c22c7af6ccf2920f6874192c15f922521 +5d1a49dd03bd2fb2fa252accf68bc0808d67be382d0487633c18632f2aa79fa9 +2084ca998fd8bcdf24c3970b1bc7738315c30af364894629ab796546569b8dc4 +75329393a6ce20f4b106e4e5b92d62ef81db4c43c9568c3f558b067eda207340 +edd5dcca617f69595765fd465dce2461bb2ea1ece65fce489811c242a389fb73 +1ecf8fe7ab484f7da6b77772b8f46db0d1d0e8e603f66fe41f0e23e3c8091781 +4429d7a6c7fb14dbe0d08d561b023ef6eda3cc1295dcae983b0decdbfe6c348b +88bc937ac23016472137b47b90639eeb628a26398f66276802bc4e01ce2ec22e +fd9dd363d1ef93ff708be70cc7a9dad4723d6b9f431e316061b106d828d4f385 +4461af7136d1cd190b894bf1af3ade9df278de7c98381303eb1abf202a4ff968 +6e3906896e553688e21a30a81d71c37e86dd411c31fbadcbb877cf9861a80f55 +0d856d8f8c5b0fa6f747606b9d70de0b83c67e94f35c4ab5f6d0d2094f4e8894 +75629ddab8d0f4f2f1706f8a0ec73fc3951ad9b6e327521676b292f55fe9f13f +8fcaa57cc9051c222e4d3c75e528e82e256c8d21723aae8753f464e68d2e97bf +c1779c19ad8fcc11b37e0d6322e12ca68983400967a0767551f3b7e9f6da428e +ec41de4d6e995825bc82017d16d0836257d1e20df07b9bf8e3979e0dc887bd81 +2969fca9fd1a6fdcb6a4eb680131f948a0f6dc33133e760dc8274b7fd6dc8a9b +69046161f3b99cde6382c83335a13ad56a9e698813101022f4babd644bfe8506 +46315c2dc4ce1be6c3f391ddec50f77540664564157746f2d87f00f838927bda +e0681d3c91531a554fc4c4bf13d997a3e5514e63df93a3f052fe27b2b96a5efc +6fb9a397988fcbaafd4436a3b7ade3810d5c5b2f46c1bb4bad1dcb7b9bc3cdde +e731ab053c1db4adf7a6aa0860f8d65b6b421ffa978befcd7e61e5ab5ad6739d +b1d5ed67e0a064c29337f8a88a8629f6681351543c746e7899f5f6863dc489aa +fd557c0cd0b2d332a9e01dd3bf5e6cdc324e19ee43317ae1eb224a0ca0120fdb +924a58b7a5154d5cacb180f43f53ed0f7822ebb701c94383c15d630f20104f7c +b64534094f32c2baa95ec5ddc6e635294d191e1d92abce77650d17b706919ba5 +4e24b53e6d9a7b0bec4473709af5e7852dd4ce2e5296099c85930a4dcd2f5a28 +ba5d681e593448135c596ece5093ce0cfab71aac5c244bfbaa4809710ecad080 +e283c5ede49ad6603dd879ea7b5a110fd952121be227c9965657ceec6df00284 +ea0de8b0617267d7ab587b1bb9aa2bb6dc0591e761364d931686d4bad164e3bd +d24a7792985b4f3253df0215a33fc33560b09344ee987a0bc26aba63155648b3 +f362897c0fa2bd6d846675c53239b700ff1812f35ad7d9dfc2e2c5704f5f6568 +f68fc5353fa1f5e582a030ffe3c2c6af5e08f9e78ef674da2198d2d689ae0b2b +2dbfc30a4750cf692133e6226d42660e5aea66c2ead3a2fd196c86db9604c6fa +9cfb9f451324937717d7954d58c10adbe211bb2798b0af00d5c27b209535330f +0d3b631878355c6f815ee118c2ff2b862dc72ebb514dc054a3ae080e1d3fba79 +011c5ba12dd1aeb9736bec2493658cc73eb1ffcc298c23c2d81e740345ff94f8 +6962b7e32768d7308717f81a0478b1a343d4709d7e51113760fb1d050341984c +39cf3a6d2df88a61f0104523391c30aed12aa757bc89c8326534e619562c6c22 +ed8cd2b3d51c6e7f26d6187ebe25bb72642cd57e1a72f7135bbf449faaaba741 +6c1480b6f3d1c8351af642c0040cc044433260750580452d1b87e367ceed3ed6 +d6501105bacd5f976d57368d6f153fdd2e622057a481b42fcc124f2a764cf5f8 +5ce198af6fa45cb5e091e821016de4e7adcc0ed7d43802248301fae2f8cf8f0a +18267ab4ca8dff0bd3fdb73e6a6c689ae19fa2590c17b15b9b95cb65cb02319d +9d95e317abb6c4fcc9ae9f8f48b7f34e629b11b557f8aab3a17de160093b291b +d5006d27af126c48d053a4e76db4d0f98ce2b342d6aee618c287124fcd5f29fb +8081115dc9b1aebf322825e68b157e443a9bae73f4799fd8276d715badbdb40c +9495887b2956aeb754c6dd406fd02828f67883fd90156e3b23aec4b8ceef498d +d33c592e2ff377deea4f82d6a8c26a2ad66e040f16bb4159440dd29125b541c7 +ddbd11b57b931ac107a7c5157d2fdb11f7fa4b9c99e289c5affc2d8273336b34 +a1ed52d2d565f138c8892d4a4fb1c54b96a292ccd440045fe3e37cb1289175d4 +35f3d76f45f8805ac0c8b59234baaa236611350ec019a58df94ca3e321dde915 +b624ce46580153e025184ecaa09d1440c76295603a75b3f328e773f16857d761 +49b4efdc08009e7447d51417073fd0c5992c73961353ec8249a47accea67eb17 +26b2a2a814cf7ed0493eff4a124294e3d3fbf6d3b1efe65a6abcbda0b99cf9e3 +647ff10386b44d5db8dcbb526d72fe527ad107887e7073868b9c3ba06972e62d +349b877c7a165b07412d69561b7589987f4d96ec1721c999c9b347a63c7d9ef1 +a484c4ac05ddf80650296861463ff954193f6dfc5d86d1bfc955ba6a76ada0ea +4839dd02a7bd541371a10bd95f3e91520666367a1bc8fc4286050c16d3252d35 +53e87eadca200ead422b997a16ccefbc0a1c0489145b4392ce304f652978c27d +f0539c169846f7cadd72a4a5f7323a837fbfdd8d52ae1c1fff0cb9c22d8adf82 +77af5e3d69cd3ba378342696ede4a7088a38dc8d8bdd0548c76486639eacd5ac +89dc467e3561e972c8bdafd17d852704498862f2f87dd10ce2aef22b0a7ea09e +9a10dd71b2ea61e42c676e6298601fd8997901ce5c5b3a119d4d6401e0658f10 +a645aba454e3e7501697ffaa71f31712277112fc298f31cf1a9bda67c1ad246b +69555a03adbf7a0bc72a444ee07e44dce0cd94258dfee22328320a47dc487a85 +d252d0edb63bbb4a5c8713156ce6f09b198071a9463db3f25c4106cf8d77be27 +8484736dd3f4d352cfdb9be39edf281166e23088e75bb64110ae0728d67f9985 +f76ef2cf0c8915c253326fdecd56ef514a33aa8dfaa7886ec54eeeb18d112a9a +9568c0e7fa12731b5b9d50657d22dd92e4c15ab946602f24b431737f99a1f531 +445ed028bd5bfaf175200f5739275533bf4c60227ddf0f7a94ff135fc586f64a +200bc1a7e13018947552f3d3e47d113594c2e0dd54e912dcd408daeac456fa2c +94e282c30344c125067f589e86a62879788e2f03db11e1e04c7558dfc4e03949 +d9d6df1f4740aa633bc09039323e3b384b31dc37af32df4dc342a82e3ed43f34 +bbbb6a31730dbda00205a1fddb775728aeac791117211a299828123e770f6971 +05eebe344626208a9fe69204160b985a5f0d94e415cd8bf7ce77e68db443bd3c +c84797dcfef6301c662261f182a8efa67616e2eb6f56706c32a114658ceb8686 +bf9c7eac737f3ce2b3a35e797dc1b009a3dab6d3114f00b187a9461107795136 +1c0da57bddb614798c0aa11b4bc86ed44dab772a9f0f7119500943770424bff1 +b013f6234d5fb2ea04aa51bea632542899aab1632dd7b9cf0b413a13fc91056c +428f2c50ba2aa39a066b23a6fb055a12bb64ca6e0d125a3279a8228b9feb4941 +9871b4d23fd1e9b9c822951e31c2c1bbd8c3d390a641d87309dd0ca90184633e +adce806175f62492069fc0254e91759fa667c47cbddd65fcbdd631845e1c80e5 +05e638cdaa4c144083e909128fdd47fe19c05d55d21e97908fee49def88b99f0 +d88ded300b1f82f86472958086d677d96fd4ea31277d69f73f34dbe3f9b8919b +024e271acedb9b97aab5510e7d1ae62c7ce2b7ef098e6ed290b6f019b096c32c +80cda3261ce8c27d40915b926bb4e1ab96f7d79c238874adf0ab9fce9b73e562 +6c5d7387350f4e17a265885011246d678e85ffce6361fba44ba72c7df01111e4 +e3fefba06e02f2654a752123ea3a7b7f6ac7b7791fa4afa34455073fe477ebf6 +ab3e6ead339d2586c1077188dfc95ce2e00c96d056f51e1c9b8cc69ebc3b97c6 +36210d521da802d80192e28b1fddf4580f3c4b997b76c033be4ccea3fe000c5c +8d6123454930238b452237a531f6e1ed40e44e48e24d273c312183bb7bdb4413 +34584228cd2f48255fe5e7510a430e47a81c73f2ac5174b9d760c6493b1bb950 +b31e6683bada6f59e33fd9fcdfe889617d9bdc675c87b2db3f2532cd1eccafae +c87e6dfb0d38e1c5aa5cf7041e25a2b88935007020f6be96a5328ae06cf27c53 +cdb4ba42b129cd35a23ff5498a42c6deecaa34eaca83321527adf517c74151c8 +adb25120589b8a9c3d2e601a0fcc467ec60f87271211188048e0b8e426e4f120 +f32b9708c8f44a4a00cfcedec55e512b92236039c11557d38c6816c568d69a4d +81275aaf5aa5b0edb4dae67df4714fb94d1d89903ee7c98faa17b003b4d4a62b +13fc0a580850feea27108dfcf36adf4844408594fe9c64a5e0b274249f1fffa6 +729246dfcc86a242cf179c35102a6433710a2665cdcf45523691a0e43547a993 +0f87739276a4736d7159cc3aff6c90b9b9932f542358b392cf70d6d8502eb02d +3c0fe012ee7b42bedbe77d122557bd9452bafbc5ce71c9b2e113f9dbd6150e4f +8e9e95d6b3ed6dd86cc99bcda55a11d8ae16b29fa22602ad2938a3e978da5b31 +dc5dac768d87fcf428ff7464c497153fcb36957ab4f52ee90fc066d15d165344 +1a06e92919fc3245c90d7c35ad6f0681000ea2fb29c702c11a82ae15f4509e14 +b9094ef0bb0f3bcb10a2cc5bbe1bcb0dfc19946588ef786b83f52e8365f70a2c +b74af84c20a87ab0fd2bb499b58bdf9acb8e66f2f4acf72c4a409c4697659477 +fb634c3dd9f27b1a2807bb96a0728cf88eca49eb72281033af6cb98aaf1c4e71 +e4d48f0a64e34a6c0ae6caee617e5c877228d1d0240c69ed0ec6d5b13ce9bd85 +7e6c1244394ec3dffe8a8e66ec41646d4e4e23acf65be6faae1cb8bec988569e +9da20c8e367798fbdea825774f1ec6ca6b0af6e61350231c8a5decc614a0c7ad +110f28fb41b878c64b709087a0868ad561b65f6a9b2ed87ab2d363e166b58892 +b9742d8b8ed964b0c241a96e0aec018e22ea56dc90b7ca34dbff9d69a44860cb +8190881dc4d6923ab40142a3c30041bb8fceb768c0a24122986469650da20bc7 +d9ca31f6b11351444a5765a6bf108b558a11f8c79e18f7db0217e5e2b6d0c77a +70546ca1dd047f704e3ab0afbfeb42d19a85c5ac43d9888cd8ee1d0244ff2555 +2470fed6a6a7a2a6865e3a1b62f90cc2e10629670bec345fa57bfaba0755a271 +c99210888d237fde9dd753f29f86db53440f3242fb8a09315b459e969496f640 +f494e694d871046f00a78f383ca2809775ae3a35b66f5905e9e21f9c29064732 +47df203ba7a9aa469eb1039aad454e50ce67ba81b7bb33b66dcb430fb23420fb +ac8c845f4905243c6ddbe0c0e3656112554bc0d13b1742d88e5ffb7cb1a302c9 +ef7c622dd9c0628410aaea7ef4905003c12a37708a6ff3fe067be34f44d1ca7b +5f484c37c93ac92cbab525b15cdd188d7f507a4519a55969ebbe2f532f269e48 +0dd36314afaea513721f3e0233758faef60ffc0f81cb6e762b9e96eb55657209 +2ef47cfed7d4c420c2b16be0e9c0dae90647aa41d1d70ccddb7719048a98c67e +1d0ce290dc39b89374b06f385dac2f3158f83965c318d8b09b41747aa7ffb026 +e282d42731aa01b4ec38013c4b270b75c4b2283c6e987e51a1e9a2bc4fbff884 +97023a833ff032ad1f0efbb7b94a3f27f0948bced42c9c261fa9c63abeb34557 +aeac733a39ffe253b81b90cfd0c4184c7a96431cf0b8542c032332020c620f11 +9b996ff9226096f21e759b8c299752f6ae8403e084e541b3a09a2a14fdd4875d +704898bf2b0dbf0120253d428876338665d39f33e4777a5d551c3c7fcd65a58a +e124a4922b82652e2b6068fa57d9a91f4d9389de82def0d700fff50a0c009375 +8995c05863c6a455a0226990806a6e12db55b9238cd1e85c1e3f9bff35e8e2c0 +3b2ae3a26fef4af90c333a98c2091da151bc0e3d4ae71768e04ed85936670639 +585c0bccd7e2107bf0341c48a6d78f6ef4638123f5e9393f8322e841e9fb6261 +b519ca32cee231135ff6efe4cf91cba2e5dd149480a28e530a4db584be98813f +0a0587e8ddecb2d79931a04e559bb30ad6898d48b72f7faf4df7899734bc4ff9 +ecbe80647c283a2339bf94b1c386675bd11c78e1790655cee1c0b591ef4545eb +3371819be8e4c79af67ae225c726af3e37a6264396b3a36e4ad31ae48e649c01 +97a2b08622b4c6749d819b64f35b4627b02ea982aeb8337b4c5c6748c62c13b7 +33929bed71f7aff6b2dfd868066ba25e6ac9980226900ca24ea784caddcb1b80 +c099d50216e21c4fb822b0f0589bb369d073af2db3904e4147ed99f25175e7b6 +563ef2e58967c17df472fb8ac210e40486857f3248a77ab95403cd2bd797e797 +f92b35abd66be790a9ddec2a003da348ef4f55c8c0d51fe98c6b296ac8b9475a +47c027fdaa0c4a1ec71300f0a897cf63673d5674db63c8b5ef1af891051e1395 +ae9b0bae704ac8914987a1d6b2eb2991d3b9e84fdc868c3c11f12e1fc9c54bb9 +9823eb06607a7eb60b5e9cf7460fd7a69954ee974451bc0fd9a566d48761ee5c +46d5e20a1ba58abe539b4dcdbae5620e87a41fd5933b186217d1b4c9721fdc0c +571768e9b2b4d631e082bf43beece4c084c9f2b766c38aa02aa0f615bef08e56 +84165a6ca5070195bc5b6577b7a843b86a8c3bc103c85266b2a4fa6994f3d92e +7818c70ff352607261c766fba137a38d9f36aa16df0d2f85aa6db1afcc811e11 +ef2ed402b4adaf7f868c49a088a12c9e9af4927d8eac3e22f1a1af225aaa133d +0c41942588f91296cd74d90d0bc55317f77573a4bf59d8a74247d41524274f07 +1d9fcb04e1accdbe7a7c286846f90f44f80d9b8a094a0bf8dfd3811f7969bac4 +3d5996a09576bbe0eb0b26055d8330211aafd69ee70905d3adb949a85bf77ced +baecbd612a10f9b7489d5c033694c40fad1f564d97ab791cbcfc4d4e201beef9 +f88fe0c9620d6397b41d1f97ed2941a8a6b4d0212e54d84b70c8715696d1cc4d +552c4e223fbd68db73a842ee269e2ace0229ab65252333135b73524775770759 +0bf3465fbe788b34c5b241cca11bc892f8d3c2fb6629b0f738208c56279ef3f8 +f0e2a3226a64175b506f6e9dd9c73b45d0c8f46a69dda39252dfabc222ac772e +3837d51d3b3428e8d00fee9ce2882e61e5c8bde885007844a24514413bb098ac +2103f556e69cb3977cf61e8c9097c882d479414c75a35297592fc31c5444fa24 +9739884fab12d48157289baf04e743d9ec873830803c91067dc04a01b6e567f1 +db12edc5ffac0527ad7a44ef6b24690947edf9f9a0dbd17f1534a13eccca52a3 +83c65e533d96164c5383463d50a30261f0e3a21317025ef43cb6442c9f299451 +19cc37619ae56222796e47d6b1e369d51ea3e348849ec69702706b43899ed64c +0c71488fd86c826041d1efa7e36f6653e52f4fd27f3dd9be68ec7f62d2de47a9 +cb4f3b4e771ca6ccee3c68fd295d8596d11cda89f6ee6256eef34e358f12d3ba +1011e1d3ec48a0e0c593c674e933cdea59b8f5558e34874d2b04fd39da66d903 +4d27b134c799cd648dad2d2c8348849e4b43bd8e022a9a9dffe676ae8395a5e1 +35a8139c8fb45e4a10ab08b6a0a0337ef2c4d71a12f19d13a872f7bf9044bed0 +9cbdd1cfd304d979b8c773a9fc4f575954ee93a15838723d07bff6a1c20ae3a0 +ae5223e587f17942104bf3c459536b49b2436968488e61d7c2ee41f7a5bfe729 +918115611fbb7ac23f904222e0fa95bf84fff5bbc16cc24a31e39485b075a820 +5abd70434a84ef480fc7bc98fae7bcf22fd0df815d8864a5953d49355f3fa871 +3d17597e9716b7a0cc5976f510b3a7aaf33e9a618f4c32b5b9c977c158465c8b +f012d84a0f71e5af165d314aafd73ca7ac0c992cc960707bc744fb7233fbc002 +4e8102e311d75d16db6aa27a2f27110d6df980328e6f80e1c72b27ee94b81a64 +cc971baad4351aece189d5c3f915cde6600a7e4ca4f79323820c8467a8b1c4ff +42543e3b733b4a5917e6e306b15e87757b8e868b707c7381c9154c1542f08af9 +eb3a01e1105162d0a111d502c41a5aebbfff410aea8d79f314fd4c6d7583377d +f9d45b2124aee292ef723b49da819cf6f44934b502a0efa1f26516036b64d1c8 +bdda49dbe631b859c22f4457649fcd637500698bdc922f05726ea74d3d614ae2 +b684ce6fc1c8782ad2708957fd027d7886b378969fd14172a814c17a2455b645 +b094c2120e4ef8aa5dc79fd2cb37b395f7cdfb3fb0da57ed34db5bd09e5d6bd6 +8ea67c9138d9102ab2b56e7bb3a91e865b03dbf973a7dd99363fc61a045b9ef3 +b32f84d8fa08e03940f8fb3077114ecd213bad35e83394fcf15910aa482fb3aa +c44b59abce23a97e1efe65d5b9cbb29a9c409aa2cc700939e80635e55a6f0388 +12302f1fb3454a67414c8c07d1ec87092975f17990779d20feda4772ccb91651 +25791717408c68a52257190c1537dd9c07139271cd2c9d3decba734b3275d8b6 +9438608ef32f3b7334b3285bc2ac957e988508118ec94482286cbb544da51acd +de0e313ca4b680cebf6376e3b38e727f68416312b56cc56efd9b378fba181878 +540eb6054047ccb6da08be54929a165a5a9de2da9e585e95d59263a3e4727e58 +9bb617cef3f479fcd14ffb2dfdfcd3b575623030da141834307f07b49eb6b055 +1b2d1634073af6ea75f5e76dbe4a53a891ba6c05677480651997f838e70c6cfc +b7ba7a4191a0749b471b8d49e8c8c5f57c47697daf3e31ea765619e2042a079a +2e5ab2bd3d902adb3e964aacc61c0a7a1db2f41710b59a80e061e38a632054bd +a8a6a518b7ed2eeefeb43a35d254de4b2effadc216c54b4e8b98719da90b4b18 +5bc1caa6e5e16c0b81f34dfe22c044250379dc0c26b3efc6562e1ae2bf4fb314 +23e2dfc64205dfe38876790c1f400ed392a1afc4437668ea7dae4f4ded33c182 +86e70f690733bbcb7a8663b3d3c59cd61124de44041ad40e01e9ebc9127f2dff +78a66245a85bfb84380a3ab990d46460b0f1228152d97402b4007985abd74a56 +cbaee94a8a5b18758c430816deb56ad4fcb113565b5760602156da85bfa7602a +5665d5ecab41112a8d2eecd7aba462db0b5b69625b26761e8acba4d9275c877a +3f6654dce43c43d935a9da1d92f47ba0c8456481bd0d8ca16394db1b9eb16618 +f18ab53ef20340448a49402abd71b94960033c1db5751636ca3180661d891be0 +ffcd5b48e2cbfd15fe24ba509dc87e799f7ef591dfbc341a31075bb9c4aa6592 +02535f3e04ef2ad2a2e00611d0c6ede8138200c7f2903ca427517122da7c15c8 +b1999399c623ba0341bdb1ee8457367c438c6d997133a3e5e9bf1a11b2d302f6 +40ad9e99347443ca4b8f66222dce62488dbb8d6005ce32f6e039a9efea6f4c65 +3069998580a5b8abbb3b65524556984d8b7bfff8658559a2dcc888e55404fa2d +e2e97a3536412d1e2519b97167712fd5b2abe35d497aff272586e63b5bca5cae +610e9db5cef7d987ef66ec7470e3f3688502c8f2572e6a2294cf856e39afceea +179f794196a530f687adf6ad4518a3fc3be95dba093962fc4d6d29176ae4ad68 +c3d4a2cec5e0d5edb8667291c1eb468736bb8d6d3c2d563358af5dfc1a7b139f +5ce5396faca41a473006931b020fc624de9eda730c99d3d9183ba05e2ff5c84f +86b40a484ca08857fa8d951181791e995b2c0d469e6e4a9d871e2911594beae4 +0b60c995bb4067519bf438651e2fca5d4df17a27e4b3d7939757ee198bf5d218 +65db4ef9a3772e870583761953c6260aab93b754f8adb7a3d1a5697cddfb6875 +e3bea760e528fc4a43888f9c294caa8d964f1c2c62afb99439785d031cff8594 +c680ee73650801ba6dc1a57e582fef12ac23513a2ed766cd866f5013243ae104 +e2e897edd0472f81eff0eab10b57c8c16716254cadc34dd643a637128d69aab3 +f14ef85f27d82ca5289e0d8a8d53330a54d6eb663ef447f122dfd31618eb9031 +cb4a0484a9c5dd9704a1a6f453032ca32c725d1e7cf3b04f987f73888293ce2e +8f109ca0f221bdb8f94e5421c4f5e9ebec06c122314fa3994c991aaf2b677c57 +47af3eef68e304d32e8b7da6de48e75a4090be18576db8f2864310c0956d611f +5229a939c4f3f38805126ed55a971d4d4f4d90202446220f32fb74e8c8f9ed4f +8ee455aff3694ded45f9d1efbaa3f74e84f1b173d51efe9cb609b40b863e23d2 +be4fe77dd82ed5a8c24caa830cf93367cfed565d47e52e0c1f8a7350a3a8075a +67df991e1366f32d33508940302b4131afb6403fee13474d65859766e0ca4b52 +f37e778b08ef6135904b1a88fadc40ee87ded4a7dbbb25fcb6d9df7c711590fb +a78eeb1d15bce837efb365896fc470a91315ee5c76b51afe5ece429a5108f2d5 +7f1a835c21f9bcb7718edc5d07bc1c88be1e023393dea77c3e5166a4a8fd0770 +2013c3cabc4db61310082d1886052718bb7a206b2e2120dc2a9f8e74c32b5cff +049fd4dc2572439366ce1329898d1fa360f2bf92e80e6b1b3361ec13cab22c75 +b6403ddec514fc81f754c2638f803787e65e9967e68b8d6b02ae6c38dcd9de25 +0c62d563d9ccd576e006b0f00af2230d2bcb27c057b5f9b3be2cfe41d528fc03 +2ab64bd43e09d0409582666dab9206db7f1f6298e3375bc18a4732db3154d6a0 +12a625ec67d5f59310483b1785e41e8b856db867bf7a849529274eac10b11378 +06329d60c74bca5ad1028e1c73702360fee9a01b7595747812a7bc26c3dc0a39 +a40b9b69150238d804dd87a6235e39a7e66ec5ec102ee867babd9c6e20c2d50a +d266582e65e2f8d74d8eab2c628297daed588384ec8c0760295932df0d5407d3 +245f5d1bb5443a1d2a2436f3d5c7c19b0ff098ae5f223120d2717c2ea23c375d +2a2bc325d765b048ffa4c4effd211efc1389c4b7a5a0b07ba99e2102fac25803 +11d0ee31a13d06a8d1a63ba89593c65427888e548316b522678f2f388d02ebd3 +d7303376f7c3e5099c3821c9a0bd21c04a876656a9d35595813aaea6ef71440f +09c11c84abd7299f8ac48e47c2b58f68b8efccc9f18a9a097880c64060216c5d +303cf079012610069a9f7af418cb9abda33d0154b7a8ff32ec5044fb44c34037 +53a110dc17002c1eab553061ab293b58c7fe6ee6b61295a4313ca596f690f59f +0da8fb29d2d77cf1e544f3df5c99fd5e3e6834772a8481f38de04a353c18f02b +2e9581878d36c8a286e25dd02c084682ecda7792a2c1b7bd558441051e6c5f88 +b1f26b7b760624ac446e2ea75c2ba15ba64fe8a72d9179c46ccf0e6fbdaee39e +d1fd5a64f4751b34495d1486d232b1e1209933ac3fec6a08a0df898fc3d295a3 +e1d77baac2154830a388bec472cde1951fa449a1a2ec4cebe351a86fc5fad90b +333f3ebe12a8001f2fa20322092f8f3784f25b69e45a19e45dff561f932c4ef1 +72956e5e2d27247ff8173512bb04e957141f852f790538c9f0a38d84cd00e057 +6d409b38411a7a63e912979fc4dc5c9af184f699617529bdd706ceb9bffeb180 +0ef1be7c0b312cf090b28132e8c618c7affc8fa67a37f8afaee795b6e7dbe215 +2640739e9e30e2717770101b674640980f98829bb7490a4991cd6d9ff6a02ec2 +fdf105ed61d2a4f77f1c56514f72ee98b335f9c63fb7cd779286b0529bf67980 +e12471d5ba24c58e06673ce7955a4a3bfacf2d12affd7cd10352f42a4c96fb52 +23229e3ddba6c7f3570e0506cbc2c9cc53b9cd0937b87023a721648e5e765a58 +517cade762bf1b1cad0c52bb77e909c33f6be55860a4ba51fe49afeed7c3f69e +9ec4fa13608cf4b8b4a911b3b82db97339afcb92f083047f810f26802c1a3421 +2b9c61111f673230775d9ce252d46a000663b4b56b0d579e397f084be412fcb7 +f33b430d9710561d48615bf22b2d44c4081cb7300213cc39821c658f44c2fff9 +ad4f3722932f09b5327bc33f84f16d4e979a5f1becf2128df727ad71818b13d9 +96605f29f357f5cd0339d14e77bc462ae1fdd21228ae04d2744a3fb0db293381 +c2d1cae84874cef9965e41ee37a8ba6df72a0af8235b078e040ce04766892880 +fe4cd513b0ba081679e33b8f3317c3a1ef8e31d2203bb755118179c7da9a7fee +c135d48f33b2aa17ecc0bf573f466fe525b9ad1e616ffeb4c471b56dcf9202d7 +90efbe400d5fd6999ea1da3f3740ab97376e629cad75c6fd5e4e24aad3fc04f5 +368b05bfee07b698b1782bc08dfc660098eaf8c790fd78e738ce56ebf563a9e7 +9a9cad837fc2cdc09ca2e76fac914d607b2ddaf6e381f7dd29050ed348b84f5e +db9292c64b10813672ba0daae4916d58fa31ec316f9c213a3b01841293f8e221 +c812805d8ca3b7976382a5f32161726b3c3e8dfd2f4e1ffb8ab547983b9eb323 +258fc286dfb51390cd28577fb4de2eddb6ad19611f3d531ac5d01aecd8ff25a4 +7cf3abef5148834b8ad7f4665d6bbcb0d5366b5499eace53e06f84e7ed41ffcf +b9f2cb7d377573edc017d93154be8194a5bdb8cf781d21a5de761f3df0649cf7 +037e4f5cde0b37459e2fd108030ba55f3ab8a5291ad5eb32351941a68a020488 +26c3c3c01ad273466f14d043069c6cca7381880603429d902ff50085d464b04a +7972d5668140f9db6454428ddecf54e6605f49278fc58fd3ad2372a48b096be5 +3687a5d9320aa1beadd45fb22ffd5de3d6035e3bc2543513e59aa5e594c0a5b1 +ee17bf994594d6dfeb4dbef423eef647931bb8efff661762430a79abf24af2e6 +5072481b426ed728f298d0c7af09db8e0636bea12eec059a78a8e858c706a4af +cc6551525ffdf7c39600d038513d3a10d3c351afcc0a1a995678228142229fdc +1be53b2663a4bec75c658ee0a4214018b10541c5c81a2420255b5461d7439bd2 +092548333c17b14ff6ba045569904f07b30c35fd3caca577f535d4442bf32cc2 +77e6719d110676b5dfbbdbeee90a3df77ba3680421932ef9407baab56c44db47 +1b4bbbb8d1ed3bbdfd53326c07956e5cf3259e16eaf59fef149a44fa0f4047c9 +f279fef3478455db8684682ffd8fb5263ed89ecdae2800b89b69f942c4906dd6 +99dab5b40d78bae0a684b1ebc45b8dccafbac1c43373118be46adaa9beaddf89 +d5be52c398019f54f2ca574c1c2c37001984e514ca9207cd5065e9449f19bc42 +86ed3d23e3bb709c48de0229c5d395073e5c1c6c29200c5cda3b6f7723461038 +5aec6fe176c3e85a00097f5bf2a9f0254fb35f839e461fc15ff07516069275df +4683cfb34f1f59bad2f3626cef6e61eebda976bb6909a5474191b0282e89ec72 +e4acd5f268e72a4f7c8f52461b262c92187ecb9bbb7e7220748346464583c9a3 +9fb304365805ef868c774aa9675eecac90f2484565017e59d60abd293b6a36b1 +47c85a34f1bf225d87f720f1b71f1bbed958d2df190e6939522ed52565a4d650 +2166275ca789f851d94c05f56a25ac5268d851bfb76f08a66e178d476bd9605e +0f98691062b51f6e11685ba9ef3fec01637d783e56e9d17edd4600e89c2fbe87 +03e1f1cb3dd25897b1cca5fcd4355cf95a67d0468e7e96fa885d5c073caf11f7 +30e111c2a4afb6b9a4f88cbf8a5ab509946ac61abd8ed3da4b668dbd7e3b88f5 +5b1185253369d9e22e9b7ace952e366ca9076f9c4ec511f172804a72bddcb31a +1e3a0f18a49c616880163298401daca13d82bdeea0bd4ff5a98403ffd13fbc75 +a679e1947dad94f182087a2462a7af9d38c57564fbd323bb8d16cd76fe7b9652 +e9d3eae971f45fc9a3e2c9e839637497dc57eb066292f2a2712dfe8a1235c6a0 +280548c082cdb01fb78788f956eccba562812eabfee08138870dddf3b9aef428 +2157562fbb1ac186fae1594665123b059b33d67319635aaa35784ac0cb30472a +9121b2b270c646f694fe3e6a456fecbbaf7370fde1890b7ef8cf1a1387ee0b8b +37f49e853bdd305b5ccec7d3f5d7163ab5fe4f37970f31393d93ab1118fba63b +46dbacdb028663aa663c6236d7360aecf6196bbcfd48ffbbf1b7dd3078aa1c55 +080e4d03c5aed2f9b57bd3d871a4eb30209b8f160d1aa5d50326e27f340b3f56 +9cbb43a4bd9f4363b36da8703ab2420e70da5a4ac9bf21a4cb2a726f3d4f47ed +7486d4416cba880e38da49c0886e180424f17eb330a2d8412b34f47f9d37a888 +312028459594a2b9b2c1fa0d6c93e6708ee8971c3ca5263620655a17d6153845 +33cb9ea612cc668b1815db3ca08ebde969ec917f57fc491495d107f5889b08cb +708fe369cfd9a719988ffc1e296f9baf8dc1c9fc4aba8fbe373b756bacc0db66 +100a7a4bb43af179dbcb2e0f9944b7fc62a0c1a9998e3a306fd44fad9058ce82 +0218bc07770d2c8e5fb963b09fb94dde3d6ee573b7175cc9d5efb0bf2be58b52 +cbc92a4269f62ce7ca74f76163e3cbdb338363e4e5da2e4cd9f16652a0b575c8 +44b5c0ce05f7610f76ebcb91f55009e47b95f373532d4afaea3bdf9070a68307 +4b54d84e88906d7699fefcec3342cb352b2f924fb862975e32dea97539a55bbe +2b62167aa9ffef5034e61545b0cc4475f892f93f179135f7562fc77821df31cf +fe786ac7ccb06d5364e4a38249d358d7ac92b9ec7aa1bff6dbefdf21a2a90638 +a890c6ba160bcef6f721a9a186e965a60dc0cf47288bd05d803030f8700042fb +9d3bf87189622972dbee97a970a71c7968bf2b84859fe53e09b8bf4316fc85e6 +7319d752faf9228570644a24ae17b4ce3df78c3fdeabe154087a6757817e05cd +9f48160873dfb906d655de2076a4be9abf459d00981dae2da109cf2278780e12 +7674a6eb1d24f6e4353a82a46b52e17c8d52e8d5d4c9b96ad56c321b18df07e2 +5edbedd01f1c6ec7f696ebc12aaa059011f87eaeaebcfa2962b46386d50cb554 +a9f6073e3f0b241598d93d94c256832ac8af8994169af23b6e57cc9f1f4bd8da +f3260382853a1895b4c6afa6c1738075c3339abd323e2b714f6e0b0e3adcabbc +a856f7e5853baa0bb28ab49e9b79d8e77d00513beca0dcb98bc28417872b4137 +29912e3c81f6902072173b5af89ab87692784a24870b8c269aa517cefb472e4d +981c4d07c1f949eb8aef239d0050319561c2a77d1507679e07c25dbf7ccf1fc5 +0aa7ef3387a595d7ea61159141ed21d3a3e0d46b5cc59308fe355ece5413070a +dbae0505d91c572b02a2f0f82ffb1312fd4b338dc74ba6acd39fa9ec232cf3e3 +674484c1243e8b3c45cecdde7a230e68d8f466c31ece0ea1c299b77eb5abdd53 +af9c1381773f58cb55323f31ed3c91be057aa926c9d5416fd6df2c2eb008ed40 +c56e1aee2c5220184ef5e275134fd2494e30fa4ea04425655ca8a80af4654e1d +a488ec68732fb551841c2c6dcc7ffac895d98ec7e9378275ed20ea12805fc18e +305cd71f268567cc2aab53c9e59f02ce579d855f32fe9dfe5929c7e3a875b031 +75b9cbe923bd6b15ea2ac7923c6a9318a88ddcdf4f29ab9c0d881c0da9f12400 +603f24f93522ec0dbdc3e3c4d0d8b4ce165517568cc82356310782329cdb67e4 +3c65f4e4127902a6789942f2646f97b39944621389e69509940b85e4bba65893 +5ccfec4cfc4424883f5233495f014555feb2d2e0ed7d91864f2747debe007bde +371029724cde89d28a5f628282cc2838d194e591c283101360390ab73960e88c +fcd3534466a6012ec1538d2f617a0b402fa4f014c5157108329575b7d1999635 +4a6c20804aece87cc3baf6d14989b5887636b22c6f7993d32ce9ae8e3420f5aa +7b9c69d9214e33f020552e918d0437f9943fc63e346ca81f0dd362d5a3b2c8f6 +92381c38b59ee6c6b2680ef08358671ef612d23436c7d182137849507512f4bb +9dbfc1acee923f26bc9252f1ff28a184adab634d9608ac400fefebd60663cb17 +1f0f9ac869b65ddc49d58c56e8b9498a4536b10d5af86e1c6c380025e07b9a25 +329e1ab4608d86b4676172b2e094eec44774ba553546e452c86cb62794de8df7 +4e193adf2ec0862931ce14ddb10604405ea460abf53910ba1170c2ccb6546283 +bfbf849efc7a6f94a4ac72212ef6f54066ea1c90ed9ac550ac744f8c5ac6fb1a +bcf8b41a4c9f7e64ccf6c2be6c9560f585242cf3601119c76c26ee14d8b38188 +6e0aa80a05b159de3d16dd7af2eb2de01d097131b56bc44baf0e4f1884ae9f54 +ddc7325124c984d195955fa2d9aece355be2a82afca2154788c8f190696d0cc6 +32e53d3e596cfae451bced04f2beb061128f7ee5b7430a9f7511ef070cbdc794 +0dbd2bca7895f66c79ce5ede7ac89d1914362e96ead4144608bef82d2414f981 +37ef848f4dc7f20b2ebc517a07bcfc0bf142c0d9c7f367f93dc6725c179e6bf9 +75da27e8eb256487c3df872024450a943df02641f2803fe899cb4e43c2c177d0 +3cb3af94dce4029fafb2ba2560a926f5718a3624ab050aebeacbfbf5ebe4d1d2 +ec21b4fc6ade73f19a494a37e54cc58f65a50a38c4edf5e9567097d4b72c2daf +2f30e3ccfa8461de705aa43359322733b40c8798497f9480b57c4d66b059ff62 +c1905527dfe34c2c91588de6de17dc1105fa5e74bfc98b641cfcf0ec55f1fd89 +d666364a90cfa2ecf61929311ca62a1b505e54546cb0d5e80c50b5440b4f5933 +d606026b98246e794d9b6ecd2270e229b13dee67a57942c764519530b92236ce +25d55fae951b52cbd3aa218afb378f7e43faaf8a66f3b409473d1519335008ca +2853030dd6d425287a62d4f3d0bef7aa5d593e9649899c3465331ce66d3e7955 +f0e7ae6ba40b0651341a50926738ead419d6eac29deffbc5883ba851765c39e4 +1810f08c0e984d5bce15007850a961aa5cc3f4a36ec3b3bf41e004d4da298e00 +52b9d141a0b9322cbf2821a2f3358fbaee30f83a84ffd7ace433d1e0bf01a32d +24451e79b466a8d65bb6fe3f8cb45a6d2a1582decf1a0407e4c0b7c43db929e8 +8bcdb26394a16d42e7f42889e9bd45d5683b0e53b27d60c28fc0b042c45526f6 +ce4bf598a9316f6e1f5fe27b42371d75eaef279cab7eb1276b22fe93d4c960f9 +4d9603c746de037570b7e8238379c36e042c41b3457c08b48f73a850125cdc98 +fcf8ba0788fb82b72d2da2fc86eb7ca890bb16beb912e5ba1f325086a3c09f56 +733df23dce18120bfcb222aa54bab7b4db046ad24971a726c6eb891df5e9e90d +553c5d58d08d4e688ad1d665c062038b23ac065254b2ecdc3a84758557b5865f +2388521bf043f3e7c6f312ae583c5097373b3cb4511a17f5d6a494b155ff26c9 +bb3aa9ca6b420376821480c62cb808248fa25ac794e77d27058fe515225e3ec4 +2420fec6ac1b19366003ca0506ac68d08f510f549ded91f5900092892f64f605 +46bf871a9297b5fe0133a62296e33fa36bd59d8fa242c01de7f24890ceb6a57d +5aa919bc9d5cf1fd8eb73e8bb7fd5b45e1adb151ce771aa59a984102ea546fb3 +637a9fcb749e9841152cbe8d0669c5596c8b661f69b656033d0cb0459384e6dc +02d745a75f0d4736735633e86b7da6800b91434cd3da0f762fcfb7cdbbd25722 +5eccdccf8c5250b289deb4a3910f5273eda723d49861085e27cfd61e2d6f7361 +c7def1045eb70836f7384a15b60666bc000a4b29b0e7a7de0461b79ffbc8c7af +559187755b4d70623bd649734e9864b62751f0c6af3a01ff764d8359a9b88911 +dd592ec8b493d8ee6b5633c1fd34229d37cdc4a7b16c33b66cbad479e0334a60 +19ad1f1f0f9cb30d9af67bbcbb84a787ff4c5b3287c09a7543ee1da6e4b8650c +36bd36e3f1a633a7d7325b52a24f7c618ef70991b030a1a8aa4a13dd3843319e +3e0757b18980b936a1841bd8eaf4859c302e0affe77550e6bf1db1616a598bd6 +e921d51bd169af799a238ec6a539138f80518562f5b338bddf151314a9ebb013 +f170f4540cd6ef2ea5da38b21f20ee6856579c91e0fc50fdac6d1d52df1ffb08 +f4b1d05e272b2c5634cf4a99b4c90e3d7f508d767cf402f93160dc24d447420c +7d2f240feb9a36e90c823871d25fb7520443514eb55dee86fb88c465ba52fc74 +df702f7928df3578cb58976adc7aba7c8989228300df2f5870ead4ae0e5bf3d3 +fd2599a0302f1a7c9265cd8acbfeb42fabc70702717ecf941d8c6bed52f88c9f +f235ce8f7e59bc61f5c86145b3f0563efda6351f3622bdbbb833a3cef312895a +cf2f32f76cdf06ac282ff8dd3582e96a0d122c220fc4129d013c93063aeb1793 +5edd4f699eb78c38352175e4485988671c1504e7610d70c0d97152aa902d20b5 +c829aef5658a0defddfa797909e5bd22dda23bb5cdd26e7c4d09a13aecb9f0a4 +7031391cc906e9c7bdee067dab79f3a140f727f20d7845697605036e7430e32d +6340be4df27d4b5d7f528bc6dfde621dc577a03a0ab500cbe15bb4b0aa95c47e +937939d93f0a904723f344825d5114080cf4b9355ecb0be0bf71a066d10721ff +366ed079463b1c7e11b326057979df6bef47828825e2e9564af9d65cba497d54 +3cd4e63bfaa84a23cd738329e1b562577e98fc155462b73128bc58b8b14b3b95 +ac39d5d6bbef08408032d25eddc91d310645bf1ffacf32d9c1cb3be191758334 +0052154ed1baeeb1ae442ebe2ca6b4afc001941bec97433722fdeb94c0b14bda +a1e567ef17824b1b1b5c09ca6b2fccc716c49215489765067c1c36ad23235e3c +e1313dcf439261bf87e8c911ac64af1ae15dc2a6d8e827ed885622836dc5e889 +9c99e29209a51f4058b37a317105b1f42d1b84b19d4cb8a4791ce0b57dac503f +65a511d677ff96999963f2f07271f83fa54a516db6bef7dd56547973ed25e8d3 +03dbb92af23f38648fa84b746ac7d0a455e24bd549a82840b58e6dcb07d97b51 +9e6685cd42c69d235b7290ccfc1eb6cf3046ed4add6f83f948f3449cee8b7a51 +dbd90b0b4a5308ad3b237e49339ca4b048d38169bf10a88d755191d576282279 +c9b02750806cc8bffbb4c764e74380f956174f0cb331cc27ec4dc66f6ed2008b +bb1e1aafca6860722331239e0f3fee9eeac7962a7dc9a7a105bd224a41704882 +e9a386a794de743f8178e4ab2694e27b4e829c4e8afe32750cce855fbbbf25c5 +40cd0866d25b076a35ec23e47e08aafb1f8bfc986f11cf7f0bdda71d0392a3a1 +637593e877faaba27acd0cc23bfbe603990c5f11f71a279133ef0c56bbf4aabe +c0a38a0ed93b0a21753ddc30e94bb7ce4eb816de19a54078ee7768a13e032d57 +5aa186fb46a1e485a17771d3e4497638025c2998d95fa23ebab82f3f2e770c28 +57e98689f1e37738e323668171c4fc2d51f4cfc4284b0810e0e8b473d02f5c96 +56c631b670fead27147f887d6107797679b8f00f7b0c7afb72bd866a30c56bad +2c151d328ac0cda588465acb5ff6b09b2bab630238dcee1778a5daa731463656 +50abb4c0bb3bd56d0fe3c21a5e2fb3b73facd241d02d8dc0ec0cc45de1c3cc5a +5214a9b0f45994b2d3bf53eb6aba1762778d9cbc4c88a5ea357491010e6fec26 +967516a11e3b7a07b1d0f381f4e94a9009f342ef24ad26d0caf0dd5cc215c39d +ae6bbae015f2aacc9263fdce9ae48a4b7c4b6562a55897c44dd095a1f5577c9d +e82bd86da9c78b960e41cf7837622ead46b065f93b8347384452b1451c6db4ee +e8000666da95d7e4e4931473eadc412ab6b4a18fcef633450cc62acbf6c033bc +5063244d6ad7b5d5b66a7bb9489619a211f03002fe2598ca6a185a8567830870 +9d3700dc8cc1e7fa8cd0fb2a11baa25c40d2ab267d32ecc45a2a9e8dd3ac58e0 +e2df82e9188464a165a33b7cab7f59e3cacd5b241c011bf753e7d08d5c810b94 +7ba4b12358a2a27cd8b27f9d0e6d6d2d430e2d808447d69187c4a41d34d8e62f +24b8a8979347c360bff0c3e3152cb142a9a1cfdda1fe88137111726abb7baada +abc6d81cbc215b4167702d657e36d959d0e8239d75f412076558ed0951618dcf +c07d6a15e36c32d116d0fff3f9bfda2e003bcb11424e8893993bc396c02abb50 +b2953736cddd167c29ba1793814750431a25deb8bb5602322d1f69d4c319f339 +0c731dc4be826725a3abf9d854f93676e473414b3a4e84a4ce13b6bb6126e5cd +39188ac6060755a61d5ca8fafc40c161f5aead7b2b34be478081cad50b7d1285 +cd4e03d80f35eb1dc2a81b163d96b8acd3df844a122a5a83382e3aa8559f8361 +d16fe81f30a82aa57db640d912086353f47105679a8473a883225b4b54212b67 +b6a40539885a0b2f7fb1ea2faa8a3f8f06c75f85cd2de035c03be596e944a9f7 +4cbec0ea8e055993d65c200e4ec5ee6d2e4dae89fd24263457a8e99100e6f5d7 +cfdda04624f81db895c8e5827df1fabb7f12213739d61f7ae6f5dfd545a04d8b +a37ad39c73117f2ed3e824ae7decb075a85fe467434364934f5c46c942101819 +d85f838f67d957afe01c104e6c20c81a93d0422679cee315a29b435ad56d60b2 +859007173e21d5f021aa02aab7b3bdf5e0b2584d884ce9aaa58aff0fde7476b8 +b2df095ea89a35be7ba3ee6f0ae24c8e7312b3e6b32b3ace0cf0ddb707604dda +3f145c46868994694f9af7b3aa7d09fb7a10a78a642649c5d922d86ff21289c2 +0176f72372352bd68714364a85577c2030b21e38ae1d53d634570bb34b4fe68f +3c624582775ccdfe484e64cb27080b15368a5601e6c516476456cce405ec04e9 +688f4113afd0fca68ada629eaa1080a1e9c75e901c8726a78e62bc7472a4431b +1b048e65f34893d8679c8b94d107ebec018b0b642d49002e0cb9035bbce1c74d +69420c038262c8f9e9b1c9947c5eef9a206f657b47cb9ee820902a7de8138160 +f96fcd114919ec65730044ed2add280e5e379b8b3f40bd41800ed0dbee9bb730 +459a25870abf008bd83b2fa1b0361442ffa2e2302db0f94865fd7663fedd529e +98c050fb197204c542f08343cdccf10ee369ff00980ce954ce0d5044e497aea4 +d9cf7c18086e81a44f00cb88d69de868a07ec22c3a8738f448a7a56d9cba1188 +9dd897ce4007842a7d49e0b02114ab3d852d75a446533770afaae4b173bad8d0 +92e62b27f8edd88915c5f35398cb794b83d22526c7f126b49e42478253212088 +68708dc8011238485a84bbdf37ad51f4d4318518b711f53322b652be71279d81 +03fd9b651d072a71251f6bc0b8fa0809e6d95e66a88be098a9eb1cec487ca2f8 +3a7180cbc99fc7e629c451a07bc8c5d546bdd79c1e3b5d4487609e25f62d8807 +3a67cb822089fc69a08afc0a6935c3d7ef5105526fed19f50014919d736a4a34 +43c17dd9b0f328cf15d3f042e475b640380ef4805a5175057061851e39575c05 +969af184c2fa718915ce6a161d2e7de16ff94288330581c37ec7ea723e95ebc2 +9630a9f18c5f213225c55a28edb43acb3cec6035fa2fd9245322501027c2bf59 +bf12c3397aeff00d8c350a6d516bd52f9a481d6caf1ef24019100009c33b41bc +5a74d2f8f7e97d038c857ce7f2a1ff863bd2cacb1d854e64bed35a70b0c757ab +50037d777dd7f50e4e464d06adde0a3a5d243498938689de180e290ac4ba141a +4828582d5fefe2309f12e4c679a58897f563d0cfb79c9d7e5e340b05ec63809e +bcf02ac27c7d3feb5b3067cde6e854e9e973911f4eae9bd803c8dbf135fc79e8 +2cc634b705642a8a21123dae5eb2c366a0463393a25b3fe5c284923a94e13274 +f5ba21e6a3311da046915e0ae7881bfaceefc48a1d5486168f322057859991c5 +b97134a8f1681f6783c8c38972bc8ef4efe6d4afd1c4efa8ec5c035d8b43ff35 +a6af507e71751fed96109b8cbf1babdefb8376cf5968b3156435df581acca339 +37cac4683c4cfeeb66115a45cce230c469ca8c05172b90a013adb8c64ccd71c2 +eaab08f1912a6e1880dbb79f59055089c2f3e0be90fadd76c9ea11bfec5678ca +366cbfac0d4d1a7131e1ff81787357b9c17d32359b6f59c84fcb44f2d2d709a5 +765dd003fe9c5fd60e9f272a830d63e26b40959784b142172f559b3f5f295308 +81f1b21140fd1fe6afa53df587f362268f6b0f39b452b13cab96c59ff5171c70 +d6f78f0aa46f47c0f78b234d1650ebcc463b53ae9f3427bc908c18b3f971bd27 +8ff170eb0066bf7c210aaffe0317e2f6c0b95db0a1f9067159c01c3600f516b0 +6c413487f8a5c432b197532963cabe7a51d53c5732e5fc6908348de80543ce18 +3490364596ef7650db809c91f4a91f58d8141df4d2c1073d9cc5cd117981d6eb +1b96bd164a7039551e0b9880112daed5dfb3ff305cef6414b3e352c149d70be1 +7fed492f708ac785ccc85244f88e2de0d7445dca8a35f107007cd7c85e21c382 +1e32b11baee9738d9d8deb2bfcf2122364b118403356f6dc16ed9679b0030406 +873d9dcb86292e63b548562ee86c1491fcf8ab628aadac194ce3a51b28211fd9 +32d1e8132b746cded8b7c8473034c80f1dec389718a07c473d20495916577044 +f91794af58260d7319c3933775af950c119fd39af2fcea2828dfeea8f446f3fd +f9b00e38eace8371914b8e728e47e0d25a9443ac32b45ded60c6339e71aed420 +e73f7a43ff901a74036ae932557a44b380c2d894dfc4098bc47f3da9b583528c +6038cd26d85dd8d7c3c7322799655792a07197d35b19b756f0e978de5910f0a8 +208d9732a4e740da8c76799c477f75873780c8f07b42b3fa4dda6dfecf47abc8 +792a45662a82762bfe3107d2751497f76b16d0598e3e6f4219e4d6e04135fb63 +d7ab4fdc491cba1e1ab2833be224b9483dd87937b73495caad9bc5902107b66d +bba838d7cfc48757ef436b25be26cdb7f3430bc35d0d967e8256434233a1576c +ca73a5e61767a078c0bcca2857dfc4eec8ff8f0a171e5d91708c5f42ad7d15ae +bb1fca6c9fa31c369902d7b2fc95ffeb8e415c79a42b913b69f4fbdc6b4ef138 +6656281815fbaeca13d8f19140e9966a45c9b6d1775bdff9ab96589dbf864c51 +5a68047cd2c39a89ce3f534b8304444ea0c6f7cf4d0bd3626b0bf8c31403124d +fa7d2734b2cd6c7132c567195606073ddb6870e81ef53cf653d618514c15ac07 +4a747bc946d4942805e664d82881eb97432736931c7330e33e8f06dfa1229752 +002b73bb9cfce77629fec9f367d409f5b6dc89bd2c99f0d94926170549951b66 +17a50e638ddcdd347a085cf6377bc809f52d1e75852017194f2a80e9c3d3c988 +eb3781628def61bed2cfa49e7e7f88ca4207f0e12ce2284a03f8647e6bcb8f95 +c3acc67ab02cc60222cf571a75bc99b7e15d971d78f20317e27ad0e1c2a34bb1 +42514e9de85832c13dc429dfd5a9ce15528d3d207f9026fb33222dd73ec8e225 +080759a381ffbf57e6ee7f000631ca681f3bbb82beaeb7250b681c069d111f8e +5aac9b3470cf88b59d685d27cacef8e2353f512365ce68c1afc554de274df0f0 +4a757b5ed0d21138977978a16409f5160eb37d9257a10b1d1c52c3d70d3790d5 +3e579de45fe9104086fe6b8f29af9df08a5e5ff73fb8194882ab5a5c2c1d76ef +d32d5c3e4e75d4bd4fa7527084cffcc5ee65cc217421643331e6ae9b22d657cd +7d59ab3bc36b506e9d0955a5b9d74b8633cd70ea769bc7aeac3434984cb09659 +61e0cad0088cc9a64abf334e0591bf5696a92fa75e8473dc74eec469d31fc0c5 +5ef1ccf57d18d706630becaee6716026d35cd8be701974ca17419f389cea688f +f869ca6405b37bdfe9d372ce5233b1e247275364c5a0698913440c1d9787f34c +29056821ac6b82a7ff333edb830a5cc333e3d4c8943acce8a66fa3965f41a2fe +48a3a0ed19c1faa6633ad4835ea7398a2a174e63a3c77929fe3ebdbb8fe75eda +5b51d7c023f69cc6727c5433d10d86ef16af1fb8d9084d7cfc2bfc3b72ebcefe +a9f3021b6a7630f3324815febdd761fc5d60e30a1a19105ff0bcdcc927bf93b5 +3424fb611bde8b83e06a52423bed4a2f451cbee034fce3aba7a570fb96e2408e +fa2a83211538178f18a5b285f146fbe9467d60e6f3f705f110bf63ad0bce2381 +a3e52eee4e11cf5f1d8823bfc545ee5836aa2f3c52b8cfb58e2a1ff6f29d8b87 +8eef0b354a635fff2085ae3964957b9ee2b1286f305002df46ad7798c32b3675 +1a7299ca53dce8202690c778c8a11b617ab6c930e11c50877620ff0ae6376d63 +893cb5fd46335c7c949c7bbd8ea2db1811487ea5aa8abe6dff8333fb2c93e1b5 +6eaef387c4d626bd96d1fb067bf0efe7a75a1a459b6cca4687092317afe866ae +ede735bda895cfd97862fe89be2e4d0019244bcc42defef30f942ded8c16df53 +e2c6b603c64a94d042bdad76f51637796d82f69a6b3de0b1a1ae25bd4f490fdb +1faf1a824d190a022d4c23d1891c1fcab3bd1cfe69ff02cb0139413ecfd6dd54 +96af44e68e38d77eca447916af0e4eec34c63a58e1a4ccb42fd1cd4218bb6446 +420db97797017797b3d4c87f4880ebdae95671780c3f93cd42e52e2a8a78854b +9de6685c76857e619b4377a29c9ca97d797b84bd8b9af27f0a5112c5a8ace297 +64529cadf958535e826fc636fdd9296800551df5062c40d176ea242087ca630b +56922719ea9dd335bc95aafc52446b996fe614daf9189ea77acfc70a0a09a3f3 +a16b1937ea950c58729f2f54d386696e6fac026405514527a49771d1e25abbc9 +e6c0f61b2558d7c9964fd768732f1c37568febe50f47d0de3509b7c3272b966e +8ce58f7cf90a92c3bafa6cb2b9ceda78a5907c35516d3cde666bd140793e0d53 +00f636c2cfb180d942d295ad5f06b474a5147544a913a4003a6ae6a5192244cf +11ad6806955bcad577316cc6500bcc31c2cf7f442408cb327607ebfb50ebcdd5 +dddfc7c160778162e8ea66d8a738608279662216fd5329ffa7f0e8ee2d43e408 +b67f9748abe884199be4845a750f42a175d96d7e682414a2165d84f77f0d33fb +45d4fb9ed693b544a6be3ac87eef7c1a54a0f8c87c4b01c2691e9fd3510b7587 +3f549c1e7b7f32fef060761c8569e18c2bc454b0b1f0b494ddcfc17b78291d8b +2f71b3812820bb8e797cbb9fdeafc72e2d11935461187e1546bb6eaa272595fb +624b6d38a59703459bdb03018d4659d162939b77ce4450a4f516d9fbf9199cd7 +2e918da34758c3f9f5de2dbe54bd179bbe8a183d0a468332de83e7c149b9643b +7b966fa2003516b66309f92745dcd68adf466bc9b82b7c3bb379cd5bbd1a4661 +fc3a6153cd79bf57d70ca07f683b94ea96c7cd405f2660370f07a45042c07f86 +f87d4ca2a920869d6d00a0ef4b12c623cde1479b8e4620728ed85c257bd2364f +ded2eba91824c33eadb3adcfc985f3887131a05f482f5dc7adcae00e83cafd0a +5aacdf25d9aa9c5b36e6227e3528ed473872b116b5d5731879b47266cc7a0924 +a23a9df152401f823fcea44fa7294f22e05b3ac6b27e1e7b79f8f75ec454cdfc +25851dbf73ce292198b645a318e0d2ed03f2a2f15b24f1ccfff32c2fbde9f0cd +7dd1c06a94185c92d75d30fe76506726e6e4d75017dbbf001dc4ea942536cbb8 +d1efb39b9644333a8a646bb85f07f28aafc77c7ceeaddddcb4fec63ca0fa9e91 +7351f667f5d99c958ff448efc04301de067ed7758a04f246d7ecf10734b2be1d +21177b8e326c8d1750197ad4846a09aa862618893d6c1c7239d81145323bb391 +0eeb0be89478d0d4fe3594e788d968ef78d3e778dcd6dfb292c57c8f6dbe9e01 +08d9e4fb058fce9d73c867b37b10cd390fbf3bef2f9fdae7e57eba82de357908 +c8e0b9212e4c76f9cf3e5991f9b84e8d09f9ec6996e9d9a6130cef003ff4c88d +0d0ac0f6b52ae6a6ba1f68c90c63f4b8edcca9a052aeb012ab4737c4be588dda +3fdc0074f317e879dbf25ca512ebb95937ccd09355e65392ea5e160e7c7926c5 +2ecf1fec29d2f1ac57d61917082497c88cddc9c42069e24794503fe4f445777d +88aafc3bfcf83ef1cf34d510e8eaf566d38615b38c03b61acaa2b53b033980c5 +a25ec6f3fba4915d7c023463a6ea92fd303002f4719ed516681c281a7db5549a +ebb867907e48fa89bcc7cc92a0c0f51a6e4656bd0ade30807cbe644568e8694e +2e01ab3c1ccea0998cec70c2a64e0cb0fc431d99fac5dec1c13da45f6e9b6c54 +97a238d7967cb0fa9a2f578fe4a90c8a517c729b951bd6316fc5687b6133dede +520717fd32cbb3cd23bdf78e7c69509e2e382082e3139e2812a2e04e724803a1 +b592f1218cada7e121a09ec11b88eb7f820c658cabe750f9281f2f5fe8b0b782 +5b6946c12b730373de00eb2655ba9414c9de403f82e4731e468eb6328518f628 +d91ead5eaaeab0446277e073f5273a67ac08eb48ab5b66b180b7db852ba88174 +b75e4d101e7a86c8ad025384e93a43ac69477837352bfde69bb4f7d015131d37 +90782753f41fce9a1f863b7fc9376a85790384bc0580f4394088fd04b596b40f +d3f1cdbcd0bfe006141fa1225ac41f9284c19a8612914f26eb9e483c9b27f1c6 +5b09f8b2925815b7eb75c3a435adc19cb9521edfa31d999164d83fe1f4fd8404 +e003f6aefcf0b2efee99a0a398f574c9aac93e70f5796e1c9bad89510d7511dd +94006428469d21d251d77813c73a66e25337cdfaf571d849902a1d23e2a31410 +6dc5bcdbdb5353b1f2d5af688e6959ff4b737ddffd2a7d15a63905408c4fe2bb +b61ed9a97d88dc620f3c00ab129a8d304cef7239dd4e302a3247426a4cecfb37 +8c8244f7a3a892ed49e242689538f115ab04a6d2d6ef079f12ba6632aa9103aa +9fafef4ec170d5fc6867934cf1eae075df1a2f5a599c39a141433eed97d6e108 +000381b3c6b9328a07a7165ea81f45704d224decc08a372ee6d6c8d224f1a977 +0c72743ed3fa9b0a6470c4cf6a795d45b8586ed969246339953558f05d7e1807 +521778b9aa1b1dc1db4aad5ba1cce455bc426ecfb6204c6c3aa6dbb60071518b +3e1b761d22bbcdf4b0f2d0867ef5a455e750bcf5c39a83782954965d0977c50e +e6ad6887a2ceac219146fca4d8f20969f1608e8ad521aa92d8df76192f35e41f +6e027c6a177e19497c51a1cd06db5edf020d071712b065bcab1ccad1c15c5bf1 +9b71bbc71d3d750ae67147f446b12f4d0fa639777da3c3e519e2584b7930418c +08f53ed0761cbc0ab309c31b25b3d742897790d3027836d84a0ae33722a2bb77 +f18796f7815b97d76c7c54d04b2f0c65d03cda02567aed8f48976051f10141df +52d024dcc2b24f14e684a9bff21c7daa8ce2af28b552ec7682121184efb01204 +547b9b13e2d7b627df2402d50dd6b2a9d1d00870a0af61541009c8020e6fd883 +c5a21951b4f0f61c6e154c766352a567bbb133b67a5e22e98314fcf7e5d76bd3 +518b8881af2a0fa15bc0f31ff54fca253accf923b1b0d807be6e98598351e5c5 +b3be2eede472789471d1b84eac05f28b6b77bd06fc805c968471fad408c8b28f +73c381cc4ff561abf8b4936202e53ccc0383f3309eb779f2f1e60c8226ab28b2 +121023c60272379d2f2fa85f03c0a00bc4648080fa3af2833c1c09976dcfe8df +d62763fa689d441f23f60dcd02a574f7bbad9b8de9d46c5cadcb91c25f8e6134 +e1b8a78d09e02cac90957593fa6c8379bd56fb92502f8c7c0d9a428470135203 +7f815b42040ed1ca5fa9912aa92e8b3771c0b0a19f134c8dd9fd06591aac7fd5 +688b1cc7786e90c94738936c6e225108afc3d242e8c1772aa2ff7c8e338168dd +8c5cf012da0802ba89998b0844dec1154bde90b1598fbc0b2d70340c8717a5ac +9f0ac51ca799372d01d4c4f7c5da955a859631f9748d36e25b50a62902d7c550 +7893e47883b5928e3a3791dbe1f1f0b92e2a5fad119742f28728f185542daea1 +ced29e74d1b035af29d30632f34996c9adf6c0f7724700ed54023ad07c9dba16 +323593e36196c47226a149178acac0929edc7c2408b24c1134a8d7b1c09bb85a +396fa15a4bb8f2254bb813453aca0e2b6b19793bd99d18bca1d8b5dbe64a848a +1937b5de6c1597c0b74f943bf9521789bef828d2375a40b2247d7d3669cba927 +0607db0df0b518a593468d57c863b66d265c2b72856d89a81d7aca913e8216d8 +cfc68ee75688c322e21fda3aa17de52435278e933bcb295b37b9434ee7f0ddc9 +80430e22e11eeddead41ff2ccf3057ba0ad09bfbb10102b634e7cf064fbe17e6 +21991606a3084740b1f87fcf5ffdb8b933c601cf568d3ba4cd7a7aed529005bb +63f39b80e8aa2af76e08b2dab14667f109b33addd59092d193e3e631f8a5ccea +7c61d811ab43448ce74e4b90c28f5e34b86728c5e45db7f2ac15eed99e7ea7ab +7e81c3de63a35c50c56b533c8dc7d158794339395a7875ac269c6f02cf66c4a1 +fe0884ee3027358997c876908ed1476f288651d1b919d37a6996f2770b822383 +dbc37b0a2ec33ed907c181c35f29183c50bf9526bb27bee5ab9d3a17751e5e5d +6540938103543dd8749054ca320e55fbba91554a10bf39488f925debeb270f03 +5468f0526dbd906b6eec14745c86e6af9b6b6483cf456bb205a31cef5213c3b7 +bff728d9c1a96a6887f808e393b1ada2364c7835070d71b46a17a4364d40057a +316aed9778ab542cdf2435039531f23ba896106b3d74abd5de3709774dc69a64 +536cf9f5806feb6086a3347e5878d019dff6abc7f382f2c1ed085a7d224f7607 +67fbbd9e6e24a1dd2d149caf4e0722e60739d989db1fb7a011994be9f5f78a90 +71a17275f82e0646d25a8bfa77bee2e9f23b06e1f7806d353bdad89fa2c93377 +f46e63503ab253817d70772ced6da2ae26da6d7b811a4594803e58e1f138e75d +72aa32c18930d9c60929dabbeec643c398674ae897a7d9880de6344bbca16f3e +7d893bfc16e3ec0240dcee2fd923aea218cc77131b7c02fd685e068976411ac5 +a45373ed2576411227fc7c2068590947838314a385f9b12091b4cfd7f74fede1 +7dcd391ac82136eec88bfe43e845db230986e52e937e26b992a5ec74ef0d2025 +8e3506bc12efcc18b196d89bb5dc3f37918f9ce9388ce3ca2cc51f766eb01c3a +c32dd10bd4ceb98ae60a84a933478c74f538c3deb83aff55cfdc99f12354da2a +3bb651c9d3fe238568ad1074025cd42fd229e7199a44eda31114acdf83049fd7 +587fe317c13675740923851bd22d1ebb1f628f36ead6aaf2906ab14ab1fa69d8 +18ad011cce125081de84e8ba638548898866d53562fa51b28f22d31d83b1c802 +31b5d0ac2bec12f91f620f0ac749287eec99d7a076059edabdad9b37f767564d +55ce40de1a200808230ed6fb8e898e141fbe08dde997738493b0898b43d8341c +9c3046c4674f26e41fd2bc4033d196bb459030cc3c6dc7b0349fabeacf3dba1e +74c72d3f3fbe06d2f4bd94e844a0d250bbdfebc971c562a840412373e4b29f63 +609eeef3722b23625aa132cac952f4d4aee78b3dfc4460107a3f077f444e5698 +f638907f08b848f3178fce755026f9e5a934deacb2d5a14184c8e1a70f79c798 +f5795ba267f5c8e450d33b6f260540f6182ce1a493395a26dca6965e2ddd4f8b +34f6df4979a52149e97d8c560c7f102c465c45dd7cd41fca92e18eb0107a4596 +5b7529274572e153413bc157ee963fcfa591fc5abd2da13d475a1906a6707b15 +06fb1fe1052b2f7511d2c04282ba551960d6b589e774fbe9af9e2919ded3af8a +c6e9301c053b0ffe0addf78e8453c9d75cd73976cc7cf3794c78b7b905e1f181 +01d8683b62b1936646892560bc2e92abfa04f5e8299bff2fd62cc1fc7d68b884 +323550fe2890b3dac68f14405799cbb6b409e8f53abb6969a5880830627aeff8 +d4430d7c23eec75384620a35224f2b81a21a0b21fcedc71dbc70da7f2232a12c +9dc7bd45dc5ce494d268b7b5b102bbd106765794427d1c23f4a25764e47a89e0 +c50288a0abd094eee3328c5037f777ca509705f8130b52bb114e719ac7512371 +5e07c7a15e288435bf9b745f5777305682813467a70685f8c89f4b1f4ce4b208 +fd7f17cea8f9df664fc2cb11c53dd8eafe1829896f0e73f7a1a25b7d1ea18f33 +f17dfc815750f8a5d019548c97bde544ba82e68d3b067008a9000e8eb6868b96 +ed487c4a4bbb75e86d1f517dee6252ec554cb6aa894866b817cca1a64c94bcbd +4fec5f6281d296e63879ee8a3efe8a73313aab1c7e9b57b82374d70cede4857b +95b9b2379bfb133a2ec99fc6778aa2e382cc63b4e41920eb9ead79c2a4e7fb21 +238f8a2fbccb459893d5f065585fb81a0c29b095068a4325704341cce75fd395 +8b9aa181bd826e6aec7709fbc2a1bbbd6e8f6b92ed278a3ed418cdc3a5d15895 +6977ae260794dc22c03909923bf8fc3467cf10ac63a84355c4a5b5d24dccd0d7 +eaf1856400b1685c286ab9883a4de3cd7cf46ee30e67848662fe68d520b77ed2 +0ef00294de8da5c061bd62f31977f71ca5c011c164962a3d5ce345e36b19f40f +db6eaa36f04463c73b4408a4833d64dae3665599e2e37bdd5f9b7d99d0c3acd9 +e6b46e98ba86c400a6b842002475ddfcbb4b6141f1dc4f5d3cc153b0237fd836 +fe9a4a0c7b1c337156a275c67de43d1a7d7d1fb27c1b19e157679cd6f67a8571 +a15ac134ec9271d1293cff2ae28f7d85776b168094943ace3a04d93dbb4c7fe8 +3f4042f0480f6adfe272f9b06d8bd5a81374240f4928435531bad69e03b6eb59 +a0bbbbb3f4b8dd81bc1edb4fdc914fdc9bed55089afb472449d31c918eedac4b +6224c38e6e17fcf0a6cf197baf6e55e096225ff8ff4ea3ce22041632080e0b48 +11b8c01402cdd3fc9ce687216bf8bfcdf5ed9a8459c22896c757d59044fcc7e2 +1ce733b74a8d878bf58926b4730c4dd3297f38e3108e99d2648dc168d7b35516 +83ce206562e56d2a5eb020d6e72edf1f04de0b74acc27c26037550780209da82 +60729e3382ef204005770139a771bc3a2738bfc7bcca29229cb61e29046a80c9 +958aee15562b3c4c02740774909b9baa5e52b4e7260a857b9bfefb96f4609450 +31f065f740d38467f0702e3f84f09dd64e8e962c8e650721f1f3a75e46b2898c +6c47398cb963f3be190e16879ac0ab4e04049a6dc7439866ae3ff4fc9a194e31 +69148a7a6bddbb5b7ed066e25bffc99b119513f511c10a28b42d6abc8e73269c +094627b86ee041effedab63c50ea36bb38307e36ba2bf4e21951bdc901e0726c +c2458b47ef59b9df6cb4a3e6cd54831c30aa880525cc481417e84d1de3e4fa03 +dadf768295c1b5a7e5db121bfc1c0b6eadbb4ff042c948260758323bf3c1bb1e +1004c480976ab7b56d99c556b28e75d16504d71292e0fd8bd5c9a07411bb9dc5 +726dad9ff5e20d11a2f310ddf01447947cfc68927a5a727d8d849dce3a52b154 +adb4727b2892112903139858f5d6fef793d084eeb46a58043958fba01dbe96d5 +646bd7c4d137bcee12f7455e46fa525e92a991a262389cd004c49f7822232fc5 +3c30d7052c9e87da407f27a92faa1ebe187052855285abfa80460b5799f96031 +58a052d9b9c2877c63c050599582ccba6c6cc9d436b21954afe65f7e5334bb41 +34b7a2a580c750e1047864843849a47a89c79b833c647a6ed2caa9f3c63ea145 +0778face8c68ab1674694bc18419fb2948449590b87fac57123d5abd20eb5542 +36f58314bd125e28910d3bcade2ebb7e66d77e2d5c50f544a197dd569be91529 +ef04d19dba1fa44117e0ce315fb125f2aa23375c9ebcc8bea1011b28d23298b8 +7327a5edc3812c5f0944703046a50ff0eadbd8bda9cfdcb4523e4f13aa25ae15 +f2845cc32e21782d1c38b622a9bab91a16d08f3ec674cb6dbb622de34fe57f6b +5917c91988885bf2567befbed2e862052e8937b0276fc3833140ffdf2b150b3e +d82cf09efef7961537ddc0251529c2932aa76ad03d8bbfafe3b457a10729dad1 +29c7308c4c8932d08e7b0a33cdb69d952735ba537199226e7c564c7e02278686 +1b8d121851a28bb7a2eec08de4f189540aeae22e3eb68dadb3bf3c486110a465 +1a140253ea6a43b2c53f44d82cb8eda76ae4c127e5ae7f7a6f5c55c95ef44f06 +821b3ab8c727932ddd8c0a089f2f32ad210572d0db93af997ee774d4486205fa +6911050408cae0135e42ce739fc19be9b611f9f02ddda10849f671afe1485f74 +fe4c7d06c8747a6656bb64b3898a900abeb0d13928cc701e88e719c264e38566 +3d778b68404f091bf03d75eea19e9febf558894e8a54bc3cd8b6a8da82194202 +f8d513320b0951bb7469c82528da62aabe5f9a2e5b868b467966dc4ae71df95b +be051e42f7c762f1508974db185b4eb1a4577d8a794305e7a1f984362e038784 +3d1e6f5fdb427efc5f048fb4c6e975737be87f2fa5ceef7975790a00295295a4 +b538990ddbb370c0104ad3c265dec35ad96691698daf4cfcee33be8ef132674d +e49f0b19a90f1915d5b8a052b685ccd51d6d2d759403912b7d08dad60cf119e8 +c370e3408bb46f047b1ba5eda56b77a4ca439b390897629e9140e48445f868fe +7fa3b7d71c3a7bac30ade1c1a9ee6ca3ca478f21f5e35939071efea96dfc89cd +88d5e3d08a54a7324d05ca0224f1d923ef17459e321db7989288342f4662adc7 +66395a79f789bdcc42fd7c0c1156e0a506bac02f6f7238d22ce4d144edd7ed8a +46e719d392d0f6148515c7400cfd3a560ce52d15723be3153250613af7d49bb7 +02dc9053d2aadee33b1afa3f4ef22ce550f439604e1986eafea93bd5201f4789 +b14e08830435d34bb9920f8f2ccbf91d689e9d73fb7c867e7d51cf614449484f +0c7837e07db9575f329a6a8ea7634631365f1fbbf5d676a5614250ec216eb6c9 +df1adb1caf8e16344a63705f9854b5ce118f861acf439b52c0d8a50e8b3dbd58 +751f69f4e95029d1d8491c802f6fa8cfeb9183ad85f083a09ce22320043a61ae +390ff66223aea8baf63ac876d59d94c8822ceec500ef3cf1d872cc44b5f85690 +7fa7db19ac70ac9dabedb951230687e5b1d5e623bc4ebc9b4bdf729ab34d185c +8235cf714d48d85f14c5791a8744471eb2e32a320327e434181ce004da7c84ba +f2882f5965b0f890570bc791570c46578c6bb690375a29eb5da2a2e39be9a909 +30ae94f7e758d9c084cb1f3a257f1acc97b9594107a4a1dd68b5673769f7de37 +35d35edb62d799b503184440e35b3467522b950c90643d1f787137caa12e2baf +f3ba9d0d46eaad3cc16a33013726f7fe3678025b72faef55a0d1f6a740007b5a +579fbe536b4788defef1f19f0b4120d5ce7c109e37d543bbd922e9f8f49d0b63 +d93999d371657a799a6e0c91c2877394ca65bbb53daafef47bffc56e813ee69a +7d4d24b15815ce8887e5995428d373eb694edcba3a11b7b613aac83cda39ffba +c8c886a64bd078bd58e92ba0fdf69d11fe2a6c886d0d4cf4a3d4d3daa970db36 +fcc22d3ec7124f43710590c9c9b1cb559af24446f771932bd1697975f52c039b +7bc053145d7b908e01adc1ec563433c5b1823c3237a29a2fb8932c3f841e2cff +ad9682aba14e00428aaa4e5d82e91288b2799a77bd39631d297bce0815c2e69e +daa5b4a24c45a3c50eb0505ea996b860ecd87b95dae84d2c3941ef5133af11b2 +3b5582046ee5af8f7563010f9af3424226981351ad347a0fcf9b917c7cf3ce8d +4284c405ee69abb54aaaa650fe9a1316673f35b1d03e0c9ade2292887175603c +83416f876c6bde55ec5db43f0b4a76896116924c85d61d5861d8a249d9dabd69 +3f0ead88847d72a61175c13fa9adabb96c3ee9486b7523f36b610bcadba07020 +bcad5119e47febe5a1d2a67889d3b9470ba5f00a19e2fd437066bcd5798c606a +8dc4a8ddf2169fa77ef2ac505d0f1c0038936d7b96e0b28848e06466419e6b27 +00b54241f61bb5b6b53289d8978193acf5d5f8faa26e7f2ae1f05410b07ce15c +fcaf9227554187ad7b37788747d19e8676919956cef308537210db0d8051d412 +6e622ab9fb7e5d5b757e16406c857511c2371d43d817dde92301d74da672dc3f +3eac1279a471b3475eb40ab1c81933bc6f5af4ad05346b51677f336473eb3531 +8555bef2d9201ff50ff0af4a79c7d1009bf5c6c43d6c285a65be83fdc5e38a4f +ea7434c7fd581015380f4da3b56bd5752f5af2f3052948840b8ae48323b59fdd +1d0c0e5ffda61ac11b0525b33adb24f88e79dd89fdac5d8ed5e4ff825c08ade8 +0aa9b03c46314873bea2962a815f72d979f4b8475d4d3c2ee96baa2d553bb59e +6380338b3bf854625b410a3b4c2babb3f5959ea5828e24a4002b9cccb7199143 +ca036cefbe882f1b34818edf32dd9ac3528563d400d732cff7aa06b5dc766416 +a1e43560a501879cb2836c8b6178990dfb7c6a8c7239d9583022163367d90305 +7c0e287e1f003be4bd6a6e1a82e8bb7f6bcf34a368975540b077989889e01139 +74b3a0ae1c61de50863c231430b8f20e2f8d7a598a0cafba6d7ad7d8fb5eb41c +04d44354c124204f03c6dcf49b6f0c08e358137bf8a7b2b590fbe62c184c54d0 +28b4f14819a33f36a920d3174c5a198b0b40c2fb665095cce86e6f68f0d4c284 +7ab2c81d8c57725c6f9494c5e34f0b55813d01c6447be4ad782730b216ddcd0d +5eb15d25288903f9f1b489645f525d590b1a847fb903a128770ff341623ad005 +b3aa05e596d1407517e3fe53487810facb99d2f988b504e35f7f1e7a705eddab +3f655cc0fa697e149620118d203c3721bfe0a19b31ef3b582f9aed8d4fc32776 +86a4a5556073cd2634941a9f5237b4fa3b669b1e280fdfa2a1c5aa92904f7699 +68857c4067a844d44eb6c3bcdc78463caabe4015758723dc997835699bf82c2b +967e216b0675c319b93b65da233f5c22f04c524f7c90cfa31a7407f11aaa8b14 +6d1d7d00dc0d34c735484a84fb5976dd8f1d7318c445019c037195eacf4e19cf +d3126727e68aeba2d2db4692d5c66d7169aa0fef02a2dc4b99c6d713ca150b5b +45c77fd69fd3696485d106c8d6bc011998d44efdcc307e34893cc3a63c6a7fab +0f623681ef5bef805e0255ab3e3086f5971938352a397193b037a37b8518f272 +fe4c94088b2f05c7c63332a4ad9169b7fa144d5757e5fa4ffa02c3946f798aa0 +1866ad194bdce40429faf611f1be1e0963e34137047243248db0e914aa056684 +469fc0acfafb2ed21bfc2f597d832a2c642631690f356c434b2a8cf5faa791da +8f4389a0ac861cb0caf19d17e9f10ecf13b7a9e6befe10bd729cfb2189c88bcf +0c52c1ba460bf59dbf404b7deba55dc75043ede9010f3ed5009af6d0e2fc4be0 +604a995948ef14ea46607d8722f240254b6356c596b056bcb70d7776af0e8d72 +d12c3b3f78e84073a4522ad9476b514e7c02100bb2ed50e2c12898de889cacd7 +1ebbd17250c82ae70e1a8f3acc095ddd9fe5cff867119ea4895af57b76be8f52 +bc0a577c063bfd53c06952551f714aa6bf19f1f9e264453b352d5a04a3abf99d +ef8d687d96c72ac771862813532e5e421c0353c6f070fcbc2e508a5d8216e5b2 +304a6207913f4ce5b293c6ced7c64b4a566e078a2673db6a344db3f5e4d0d6b7 +fe6de3e559ec540ac80f06305ff707be11f8b3103c78da09500eca42595eab1d +d0b0bb3428b258d9a29fe7fbe4130aea30d8094a37789672b074fcf68ec8e4db +73b38ae7086e9c1f151174d752ab9880e37d7b1d62933e013a455d358a87435c +611131d7eb527133a34faf651df452db376419b33c716c4083b92cbd2c405ee4 +8dc0d30caa7941c6237ac8c69e5e288d72aeed1afac6fa11a089dc668965932a +3dac377ba86e5dd5658c3d5e2a81617773cf9543a713bf9595762f6e39162dc0 +6a74943106085837415ea1a37b81a24f6231851cf3d98dca49b04fac4527b85c +e60bed56b686026cc52fa715eeb1f2ecc57730c08911d5ed43a8a60d59092ac1 +2e3efbcb3b5c3373d5ded29d25fd77e16d5051c5c007c73892f8c52f1d48aea7 +c17585204462d0852b69cdeed55d2c2a16315c7acda25806f9cdebc17e71c370 +051f486f19f0b9f65193464096cc66668a79a1aff41e6a02805755f057f724cf +af6808b247fdcbda0d62b26d77c361dd75925329166da468fc035813451e3c66 +9e9615d322038b58e8c8b7dbc2f730680e7ac16fdcf3f900ee9e5ecd76bdef75 +02fbd177702a7e20f6278ff0f01b7d485c343923c504908e9fc31b784fbca153 +fad0e66aacaa507d71bc92781e22e74544221b15596bc76b75ae4faf91c92e5d +890839d48e3a6b701212259d4bc1156846b1127f5ddd82a9189ffbefda41b3c8 +898624c4dc956fb979241db136be70b84866187f6ae5344593684d1d323a8543 +a50cccc69546105f2d73961959bae1681385cb048f4c635ac0eac0a2f5d55700 +19532306276a38d67958ba6d9ae83599aa96d106996cb2c9c28376ff58dd2463 +9de2a5789a6f9e16955669262220cb43a64cc80c00b54419789d733fc380cdbb +f9972e6eb2638db7cb137d4aa2432aac91d40e9c588eb4cc79013b8941e96de3 +6a19600f1db326647b04a854066f77f3c3d3a0be6ad751605c62735fe30d6a44 +0da449c995e767b6e5a88325e50f69f9f5599477dd0bccd23c5c037dc41ff9a0 +880eb9a76b7f6457f745e24609001b735654135642b7210d50fb61f3ec6e68b0 +64699d64f6e74d2c9d551d197f4df13ed9059ad84508eb6b3c563c79eb99e023 +6c5508c5b8761b6b9a225b10ebd75364f6d3140b89f15fb93a5f67fcc7d9d3c9 +c18a70c388e4f24c4c0eff33fef41734bf632c2a7994457b5a4b8e1768172337 +036adbb1a4b469a859203dc1ae95281bf2aa7c17151246dd499eec8ac9770509 +9d6a2c273d71a302aacf706db2a6aef0d748ecf7ade9f53946393b0761a0f209 +657cef949863b9df45238367d5d68d219dddac35052a13c603f0e203c95a020a +34383357e2fd9104bd539fe29a2a434346e933d5933108c7a04b039eebef3ab6 +937d8f36e7df6de81886ec95bba4423a51d9ec716cd79f5cf5f8fc88670848c2 +ac75c3c6aff23cfc99d5af3901df6cd746600959dda2ca80efa641387aa93065 +fcb79212c7b1b0e1c1354a537187ad81006703d4485520320c1259948ab42b46 +a4138e2936571d2ecaba8c7a4bff6a742f24c7c35723b83d00daca51e725dc69 +e449d4709a39b445fcb533cb8292b691911bfb2c25886246c9825aaca05792b7 +df7c1c4f2f207d19b649aa261ac3992cf9711cca067f26720f374d443f91dc3a +0c4c4ead75bfd9bd0d63244c33e170c13fb8293bf23052b84cda50a4f0b3f7f7 +2d1c380b4b0be019019fcb64d3f9ae9977f96d55853533e2661fbd3dcde4e626 +4fa379fc8ea94675b00203fac368ed110fde103e93b38fd0b202cc1911c4382a +08e7f06e801e117d5d52fcd1f5e05d00391bea6792a4003adb34a5d6468165d1 +ffe82f86117151883f4333b035752f0135c6ec5ade3baa01520c550f26641ad1 +2f51a75acf045bfccb470d40231b5c1392f3d03c582ee9e7e572a699ea7418a0 +d0d69133ee70df5e1a09e6594f534d10526e107c484864a1d656393ddb9e5ca1 +e23624230919d15aaced43119be5f481caaea6b521759497b4a5bf81ed4af274 +2d21fa9bd6a8d3fb34ec73c4252d5e720fb32ff7046bc7322b7ae8132abcddb5 +18ac28426e5ab6c142775545db23c8ac32c826d504269d5b7f077aa9a16ac288 +b08b8022b48ed6432997a2f67d68e357892572d4fa466e3c261781ce085be384 +e5757788488f968926b8f793b59a397a405938c96fd34589007bb0272e549092 +fb36967a8e446d63493c39b77712828dc29112b15baf1b28a595eb5eaa7e7da3 +3ad57ee5b72b99fd73b9bf7627d6279799426b59a6cdc8eaad81b586f946c515 +98147f417dbc492d310472bbc9d0d8b56369027fef4d4f002036e4548f293217 +74ab1079444cc044fb7dec57b8f49e8303a62f77fb28426bcc1f6d682107579b +434799283211514fb5361fb9b101717776ce0268c2ccdec35cbb047771378974 +ff3d7fa9f13c7caf19f248fe8a77a6048fa5a96ce0f103d0b1e4d1b032f3369a +650ed0f5293bea0008b0571a93af9b07f108d534d15e9c8a07b0e9e7860e9ed3 +b76f8ab628251e8d004760223965467c1b05255c6683d764ec1d33c011203a3a +8354176efee2407583d6683fbc86722926a72f53a12c054c5223248bb8b589b4 +7c980165e047a300a536dea3e2d850107835061481867cab891fe67e2bd334d5 +d8651fa5e4a47e4df9e588f46bccd402c2f7b3c5c25bdaa9aabea80da5af35d3 +80b39c855487ca0836ed2f75b1eefadb0b29cd6ab3b3566f11fc2e93138c0589 +fd60023ed556b841b2ed6b781d769747b146cfd171c67acce08874dacb072bba +75a848f591fd17b822b11093b355d145e8e79787bec45b3e1256aad9ca659967 +23b273ee41f131786fd78b6350d1d11f3071a6486a9a2871393c9651c604402f +87cfb10351d195a94dc54996dcf91106bb03a748fa745da7c8a818960f866355 +d7d8bcc5dfa1a936ee65da9ce8dc2a62b2e2a68e7713dc3087f1b0b8557e3775 +6b90f9a6ba1715fbe6fface93b121d8c20bffd30708129cd1a73ff9cb7e82b78 +e8a9ac22663f90573fbab3c64f27170a9184ceff74f17f2b38db673919b14041 +0bd4543bca8d2a31e2e784894bdcce80ce313bebcdc5dccbfe49cb08f3f7d172 +fc5b2b6f0ef072e0c1c078ca9aabd31a98ff910a709359fcd7a15a9979e97853 +1f4d26f7e94a9ad9a9e5149c20cd69bee1b1b94bbcecf7e3cee772f0aebf1a5a +5782669b88cd4b83f45d51f9f02ea827cdfd49cf8151202da403f6c77c1ed42b +28d9aae487e12898845385399a66d1aa8bc737f7c6f52d10c00756d37446932e +ebccf7fceb06178f8264df62456d06b0dfe281139e23cd8a82b7122dac752ac8 +3c78a72f8b498442c0d0cd64ee75ba3e0292e67dcbacd6db6a266d0332ac1f8f +0005a40c13dc979c0fefde2a3e8cb6fbcb7c611c2b4ad5f22d37726d32dd0917 +6340c3bdd36019e10fb99fd6d17d769492e0f36c48354d9387473be55d640725 +b973bd143ac765b982918e8064955f3bfcc2e443a9ce96568e58bacb6fe151a0 +1286619f156b2f34752a80495132e53fd7ec100e6acd2465e3ccf56208bac2d7 +c324759bb780d09ad670ba0be7c2e656d22ab2f3e1021c75ff4d8814b38f25d2 +4ed4a5b5765281cf9bbe35b44e771a650ebeedb3c293a9608ecaba49eb999a0b +a4471cf8192954e81c9759f9d4b4f766be2dc4693d64497db761a34acdf8bb4f +b27c91c0570da6ab947839fd9569947a186774b832df7ebc6236606d23967bd6 +4b33fce309041b367cc01a879c1c62d879d04016f479ce63cef1a41a1e410876 +81fbdcbc8c6c227a13a774d1b29dea8fa58c2673dfe5e1bee8595b99ef9e27f4 +36313be4e1609649e19985b0909796efeec72d8eea4ca9a9436728c048470987 +35a76cccf5a72cdaf03a06aa89e4296ae4f95e36e35cbbde90b80483023f84a4 +0d39e3ef9c8dba8bbc9af577372506842ef56585b8c9644d594f1c9a0dd9c10d +6906ebe19cdad22112ca3e248a07081729b68b40f9a0c5ca3d839771357ac5ed +26ebd9df3d6c767ff5becccad10ed47eebf6f5430c69a56aff659d205ac10142 +10324bd184f90cfe137f8fda19e7e244234d13b4396766d31c32ebfe928f9cdb +31b8bf77e39041a578d955529493d144006bd22e6a7c271fb82357a698f21c33 +345782502bc4b6f76d30e7829c83e9a635ca423c1d81ec2590d4d71c29287f0a +5f9cfadcb4848795e6bfbe4893b22bd33087cd951123ae813a6b324d3de14167 +147b04a277123c68d22a2cc05add082910ac48edb8a3e0d86d7729d6fc5cce90 +48b1e31687469932bfee598f14755e46939aa2ed5927dc37f7ed6d94437b4812 +f6f66885631580df154e53dbaa5812c71ab12e6b6b58cc31b5ba997e050d8e1c +6f8884e415e28efecd420b9a4968ea282ba9a3f7b20d6406550bd071fa2077dd +fa2dea800722e00e76c86f69ffb824cd96e0bf0568d7d63e654b6139d684b6c5 +ad268b6f60fd50da8dfef5c91c39e6d017963eb50a113ac00c92fa37521b59ec +c6323c5913436313664bcdfba0054f4ce6b0ac0e52f5ab0af6deba40d02e1ebe +43173c2b46469ba98bb3e4bbe3845a3ba22c17b88c1dba4cbf63b5f161b4017c +81cb24e9bec038f5aa2653650e2dc9ae1c384ac98cba4985d1538faf0ba82e90 +f43e0edf7f7868d7f2ff96bdb9c96268bf3e96d04faf504211afec8c797e05fe +1651eb783eea15ec85dc067a41b3c857b33a921e0b82cf4a79a355a4592a6307 +64aff1a4fb3f609822366306bd26e291a43d943b6a361e4a274b30094da28fe0 +c7213dd3136944b9da9de2158b81fc223c359950b566caa5b850d853c548338f +70fd21895f726040e57bbbb18b0923802ea0473909c5e77c327a0e186b144237 +1062f271274f5ce41ce32a09fc81588d762e96ea254f845a6ce0cf9ea6aab6ef +ebdf0233fbeebd19603afb65afee94ee753e7db2cf654846e26a378d91e24a93 +ca8a9f39849a5543e8ca079668c70d7658e51d34ef1eaa3643c4bc6314cb5db3 +2f0bb1abe20230a3687510101996c8a44e38ce8743473a61fee83f6997d97938 +19a74e6f68ee56d5af23c3f28ea6d954c9b7ae89fb4b1f400a5d5d54e99a4bf2 +05ceb9e92e3545b183f5f3206051da4c27be51043fa8e98cbceb2bfeb830613d +520a7549474fc9d2094c9dbe04a0869621948382e33e1fb24694721b48a57725 +39d924f4bb1fd06a4fc8424c1c9043b0cc16b77711fe1a815ae3c7e14c6de660 +758ee38e38d1ad32d31f64f86a13804740f8483d1f6bded88abc7c6c8c44e470 +8773260a4fbc16f13a604c91dbaf6d09226156673b1cb0f60581713c669543d2 +c776cdc9a37c18d5490d3bd0b309986d1bf0e43eefa1b7c13b46c3bea32268b6 +3977f88dafdcf0dd212e915a8beeac2a62932693d90b8addad5c7f082befa124 +7d47f704304d7f38d48f7b63916499570be5492f9a5f5928c4f520b1c69f7a85 +dccad60c471d8e46d8a667372bdc19ee12c5ac95447eec2d1d703dccdd36ac4c +6d85d18a0237c2e47d603ccbea1f8bc41926fc3d6039eef925050fe686484231 +3f672cf548812ec35d28eb7c8c6a10bcc98ca27285aa8cd4e6560de7f02f0c10 +3309ce4f2f7d7eb5ad91a899e169d008ed57d26701f8409c247f8bdc0e91c7e7 +1b2495f70df9e593324b4c5881297c01a0e5f4f321714e7a6bbf817e4f50a7cf +b8eecbbfdcec03017904d1ce1f7185dcd93b2992bc7fd330808fd3269c7e2634 +0ec4aeb3167cb2e89391f0b7756a711c56ea104bcc35d2cdf781f7c1c9902468 +9fbea8f7827e2cb233ed7aaeab2323513f7417ba6198233cadafc03647d9e6d3 +6efbdb40b826986135cfc29d98d80db163c988180b2c02a5b34d87c5434e2a9a +0ae7657d62413507de240df68054c42edfe41efae140897388d1ff055816bf3d +b5ea27cf528c899ea58a86d1895fdfeff0da9a22868f47f832f8132880b9e4f1 +252f59eee981898083df26b9fa6631b6536bbf5dff76fcefa0422654ed1598b8 +6345c144c4ef7f6e711ea18e2b1260be2d791ac4b57a550fe0c3c7f29a50115b +d05a738d54cf85563697a0f93730518d6d55dc7039f42e1c126c18e92ef49676 +7ff69ddfb32742398d1bb2b3b9fc82566bbc59e3303b3fbf2aa1dc7476c7ef98 +7033bc947aa3b2a2d8e48a1d3891062011f00b59974a8e0902c976ed9d2e353f +4bc45534835c6bd401acf9041beda46cc1ab3464ea0388664792925dafdb6798 +ab815dfc99d0e8b08b35731e33e30524d2a1207b78fae2228ea81230aab4a8a9 +7487889fed35114ac860e7b4e74ca8a49088aa2132f05f740eec573963503f0d +39148cafa66068b50d0b7dfcc2490aaeed5d0dd90d45d424a95595d80e25c28c +a99e8814dc59c31d30070a75d94a963b3606b9f917a08849d3cae41c638fb2d5 +39a19f4c4661581b44a75e67a79e4dfe8416f2c26824ee473b8ea23a6bd4971c +11459d43d05db05e2eba4d0a27dba65355837ac643dc27a9a9fb1ea3281d38b9 +a92404361914e750db2f7ccb3a6c29039114057ff3cbcfa464b79668d1526235 +834966cf68a0e10c52ee56707f5a6d950ac3d03e8c26f0782352f5f59ed0e874 +b064e8e712cb02c1d9cdfec8557f4658fbaafac7d09bc3cce9c5f09e2bbcaf4d +432ae2e9a845a263d7f4c135944a20f0f05ccd64b98789f8b004618403eee541 +2a09886bcf0015b4b7c219b6d59710366fd6f97bca108c2c181d0e3fbfed2829 +6fd0e831ffe309fd5a1d2b36998d1b345238fe3fa8729b845ab7846b31d07ce2 +2988438dfd2c99649bdee2c4a8b89160cad501c36c8e7bedaf204f18d4f2e9c9 +92b03825e273cf0aac401d9ce9318f8dbe396a641fbd14efc854fb65d646243c +905793ec7586b6b236baccc0e9a43f52b42152214242dd0322ac51bdd53761d1 +2911bc1c7d3be0da3f301149a600cda0ee0a6bc74fcd2321c5e7e3591b795dd8 +7d8112f4cca7eda7a5be33ecf587650ce5c0a7d270730bc1f422523c7b528e33 +e3507cd44ff6266196fa4d38f1ae3640c8a2da2dc29364ded26afbe0c5097d60 +48a6d2b9d3ac9df4cd46344b19c34209a597972005c6ccfd6e9fbe10ffaad719 +dae2b34cc32ceefc0373dfa57244c9dba4d68d591ca205682698e16f39e5b34c +44d1407ba8fa3d95cbafa95e52ae89002e34e56c7ab5e4392e7a49e0d3ef79db +8041811baa60b5fdd15062f1b12dd2b0b1a23993df51a14074aee3a24b73ed07 +730916ee33a0a69be7a72fc87a89f3a3ca61533e68ab40cef796ded180d34c38 +5cb7994760a95844e2621a60e36efad5e6825519bf01f3d25caf59f099e7fb44 +950fbb229b5365023e67e0699e622ef6bed6289bb67757e7313bacc6a1340cfe +0cab67355662cd73a0095d29c5ebf1b06c0c4a498cc25db755caa0d608a4f7d1 +8be1ad96d7f1d8533f97b4ae94daacf3be21e9030dddaab06df8f27fa57b84ba +4b0e9d250ff1d8b2d91e26dc657aa07b260533ebcc75624dc965540af98c6301 +e14df363c5a4db9dd1833de4578ef8c4414b08965cbf8f4256dcbac24cfdb995 +f2ab2e4d72ccce07d1fb28d84a0d2bcc2b82babcb488c0e24e2bf275c859a09b +65d4d2df99baf84faf45b3704f027f70853facfdc88e2cbe322903093d58a531 +a7f440e0d76e729826df829de42a5bc5388c1a72211d928b90c2c2b38d59b969 +5bec48f378cafe28e9fd4b8730ceccb193f3a47031b0e8bdb29fb2aca6d6ba5b +bdc33e548f87ea6eedb11190f09c62f0d674c56b51569d6b620b321175d0f36c +61289fda42e9e5b9db5bc2c8bf97eb598fadc737870c92ba7cd20d61efb987cc +eb51e427fc0bf204a9175cf2f423aacb8fbbcf781041af8f8bedf3ec11e119ad +c871b328ac1d6ed54850c9d27120f06200df270d8bebe9558e115a7dce461791 +920d1489da563a4d56a383d31285313ef47a43742b141bd31b0b3e95a3a41d02 +8ef5cf56fc181988320f8d317efd0fb48b74c77cbea7388d99ab2f2831497d61 +2bdb82b0ff4125db8425b62066481a55fecf77ccf465220d557e8dc4dbe0109a +2fac9aad6450c56f090bf0f05d290c75a64c600f927dd24db1263c7898273585 +cf3ec9227c8b7c3fffb29ae84232ee122109a8ff4047802b26d2b18bd1ba1693 +1bb63ab68818cc417ffe6d71e9568928e5568c45d660380c1576d454682cf59c +1c15899e30b00856e6c46e8e6a9fc6c851263d4d86e69e748cdf7c1aa8d92bff +76f36d6018c6927599e08d6308798801e4e45f0f8cf5f875c130eae2dc85b282 +a442236a3e9e64a2df1206b54f9981cac88e34de0590d0c1be0b31a157124c16 +d3d379828d5a6c3ea48821c06277aa284ff0fd7d0eec828609f86a7145e305bd +60eeebc71e11c76f6821693350dc28377976b1bb4bfda41be36392c7fd6dcd50 +93f699ba4609c5f35b9ab3a3033782dad814b5b78306d9ee48af09d62470f099 +1f39e48c6fe8589b46d3501bb2f436c5a147d0a9ff6262f9c6076130c128fc3a +1a7754fc69f86e250d4515ae80ada97cf6dae4fbed33eead4e9b971b007b2044 +13e89c9cf3befa57404f3e8f91bcd25e4020cafcf1fc31887b160c2f00c843ee +d6144ab65a7c9844421bf39ef47973d91f166caba3becc725e2536c90faed571 +743173610a201954d621376c8872a5b4118fafa150b645607e1eccd6a48d4019 +3198a926e439f1e6e477a0f61d3fdff925c12d645202dd85c421d5e69c03e2c5 +ae6ddfae2b8cac61cf34ebc077e52bae082d0743e80581d8c8bc9ac62027d266 +46f2c12b8abd5f2c0f91756fbd5b96e38d5a57c53faa110abf00952261d08e9b +b58efd6b777fa3b0b87d4c74d80a19e1cd8399626061467dbf4fae1cbbe3fe4b +944e6633b8181893525f2c833799b3329882b3874070373f3b44483e0ed05a21 +c7bdb59fc6b79ff2d7defe7b9cc1e79d09747f67c315882f55c697d46197de83 +f94ab07b6e0c56c2e9e7e99f8008ed06d2caf4dcf778a7fd230ffa93288f8bff +2b730cef23b20cb8de3943a7499b088d661ef82b4f7d5368e5ea31e8aa7ad4e8 +30fa63d6894f9bfb8e4e4c0e8971d13916ce0bd998fc20376ba51784f49a2004 +05f68250273dafdd861bf76193be448db540de0ce0dbebc83fb565db666dba11 +fd7ee6e709691c8797703c306f06cfc06aeb2c77e1aa24731b97289cd5503641 +60f4c9255345c4944f4d8586396221f9dacf26953c11f88f4fbf3fd54ed9a489 +9c65f0c825c874c793e29121033f7e19bbcbb5132f0e6f591f1c7ff54612da0d +2dfdf4217cc21e3a8c8477d30cd7d7b4026100c8c2b8f2edbccb86159844a1e6 +b2b72b4ab1f0f1fc4fc13463b07efb8d15b4e795aa8cb1770055447a19b038a2 +e4c31ea2eee2f2f08090401f3fe0055ce31e1a76015d51c68ad8fe8de8d4ef72 +0867c86df201a59bc8a841e1a77e122c8474eadb8ecd041ad05fdaf075e8ce83 +5da691ceffcbbf91ff18c86c525d7a20868ab3d1f2a918e2232163835ef6f2cc +2d4bf8b4424831371bfe5a5d4b741f6e44f0bff8561447b9683120d852aac053 +5f0e732df9c62611a241e0da7c584e66c4509717edb221aeed34ad2f31d795ac +1c0a279323b014aa6af8b4baa995ef7b5bd919efbd16708f55233950e1e5856d +f5642c6a06fb392d97ecadf64d3676860ba6781a05987eb3693db64edd405ef8 +cc9857f822f7d9ec7359f3f24788c1dfc697e29182f47cfa3ebc133d1b7b38a7 +291c3177e7ff4071ae46b0a9062994d8475528e8d666148cf0a7f2ae4abdb5d8 +c4873eec655e1cafed9fbae59dae7b80884179b5a358d7e9c662656a9e6bb613 +477e876de7ace490f13a26e80c3ac7f65eb2b963802610265c33cab8f33350df +86bc97ef3eb3bee881fe7fbaf62b4de42b02cb0d21161e34e3531578695aeaa7 +850c097e97b22201cacc522447a6434b1709c34abdcd3fbc841fe167a190a963 +522290b9443eaed3470bf9e9557758faf238106d934d9df7fffa1d604bdb917a +9030dbbdbfab667a0a8d861306ccb6031508931048045387012a9370d819fb23 +ebab9b3f71afa94a72ba113b470ae6c540a1586d950534da50a0ea233f17a7a4 +2364c622ce8dfba4ba74f44fde3aab112ce6dd049b8f713f3390bd87cf52c34c +3cb78fa91adb8f03a3729e25a8b59d114989b4003c6a441b37a06cd416ac2c8d +7000ecc1d210b8467d75ae55a6e63299c0d411fd2767a6fd7f596b9ebfbeea32 +08252b0f430ab00cef570795dd189abcc7c4bed140d5ec69ef7a2c8ddf74462f +85ec8211a12363427e10c5f03eaf800164b638710b20c39a70fcd6dc07dc9305 +e8004d9e5b165e90d1a12cf0f9db8ff025f9754468fc52ec9eddb5b46fa10a04 +b1fc609398e7c4dd8d06bfc778517b4c862c0e6236953c0ea03b4cb44a534e3c +7250ac48c346a812d875f80ff82967a42b035128718be6888240ea50b0a7c579 +df0809ca9eec503071bb684b21afaf71c6ec4578c5b8f33d169b2f88b8bde779 +29b0bf0961da6b028e6a38f58782db1fcd0f53d1c2016e56e3263a7566fb0314 +8f78e5b22ea25462874a19c6c12ce8389ee3fae68f32ecbf75dd2003b1fe3650 +efeaad71fac14a196421abe225dc64155aaeb03d5d6361b6402f9ed803ad39cb +d38a87521a9f508649bef6c565a9eb3d71a324aac8b914087a68787d1ac5a353 +7a2450acd123135c61e9dcd9bab79e314fd9adcd5d915fa3d116797c52e79aa5 +a4a4cc2b21c6d8d3d7df85ece505464fd2819574780d6d86544ed7ef5577427f +730d8c95c021e0510ef03159f21be450be57dd5e885cf5e142cb02c2251cc1c5 +2d98653da1d26e916ec332ff1ac27ff9f10b8a1a52feef87da0006af35aa331b +4b32f7ec2478a700a4974ca4e6342d9e5aa41dcbffcb23ea23850f6046fad22f +425276ce8fb29655e6f792690b71faa66b548a620ce864a09878d48577fd0c8b +a008a9a9b97b2dfb641b58511ee6ed1a267a4f443ff8ecb6fde0e2e029acf2c2 +f0242a29b4da255419539f4fd3a9b77ea557f46ffb934f94d80bf41e85f660d0 +9f8fffdb1fa72a54fb9e7faeab20fe25e1fc32649e2fae2ca871ba12cd667555 +c32fc550e0d6ad1f0300f06cd3b16be68b431418b37eb9af4d7eeef073b3ded8 +fc8a72e0e363d47dae58ccda9482bb497d2f7fe43c9adbb8cb2f12dc0028e8dc +1a465475240ff762bcdf723dc70b4a4b4ae329c5f8af883c42d9aace3e166206 +b4878344eb7e8af6d7d06d939605559f7602e3d6f7a1accd2681931c52e82829 +1ad5786d0791928db6a8b64ddc6032331501497c96f89c6b4c11749a14309517 +a58d9c1674497e90e83e25f1ce66f557aeaab6f3b467946b53980d973aab583d +8ef2877a565f2c959b4e423709e00ea2c1265cd46fe822df290bdf41384e6af5 +3430d8672fed7039fffe549fbaf384c2351d3321dab0efb05bf491c0b13890e8 +5b9117478831b4a4851f0956c1af031f3c390af7c228b2196489e43d046900a5 +a23b6adbb88ce877efefbdbfb84237a9b392552c240a10894c139fbd50173753 +7686860888f30d6f970673161c1f91196cbb80685e530309926edb7d4602522b +dbb403235bbb02a4e9f7d27367ad6f05d2c86834eace7739d09ce29aae2ae88d +2847f314eaa2c2f63273281ee10421cc1c35d278f694d357b8cf8815fd5dcb17 +a1e8a08e4757228d3021e13227d3b06a0547af4b253d82a04fe45a5b26626721 +af5b22374d4d161cf6956a608285d71be2358472c9800aae88cdf1b30517698c +e287afec2a7f66965b2d8b035bd77f3ab3e5ba87a2214ff3e7d2bed155717ac7 +100161f14384bb6c6e617a5cfe02c3b6214a36ace00a5fa8a0ab3ec0ab7a572b +95292c824959f1f5ee976e39c573b9b588f693f122d298e10beb0482e2941443 +28b33863f5dfefbebaa14a30f269ef5d1d0d40a8b6dd951592972e4f479e6b49 +724c646cc5dd6277b1b4d20d5436d0bf41e79556f6fdf8bb1ace0d96637877a9 +15f60e43bb603ab0f02a6df3173eb82aff9b433e67645d7e68e913dae353a9f9 +40e082f6d18cd1ab7e92b009e65228302a22be662aa448f44a87fc50d714f42d +f5e61d03f9f61ee074aef46fe8e9023679b408ac855f6ec71a2283c90671a761 +a6cd2dc4a574a1c4329b3278473fe091e69ae0013f397cfd7e3e26308ac4cd97 +9bd5d82a1e57a0487fef1114ecae92166a99186730494b3481fdba07e1422c78 +4a8cd8e75b740e126e5d1c731b5f69eae47dc45b9df2e6e8a6d3eea6d37d02d2 +cad4d648809b646cd7ad7abb642dc9922cbe02552fd3470c5e061cc13a12312e +c5557cde2dafda64e837e76b3021d75b7b453814ec8ee0d9825bc29e38083370 +feb82a299e7e690298aa2b6b64fefc74ab1c5f6edb7ab5dda3713d834431815f +21ad70a7b18301e5f90302b58dddbfaa2772da9ba65e422795dc8878f3566be0 +d57e0a73550e8b309113cbee16b6cace1fb73ee96bfb8220c145380d987994bb +494263caa036266676a67c6da9622375a5a4668b2a3ad20640447177476b9a74 +8e7e7d0002b9080f8530a1cb28cb0e92f269412151526b8f014c17b0d8be7fd7 +d2af6afe36721d5acff86194f98aad8738c9bc2bdae2d200f716d2fe9e37ce09 +a6681d3b796086dd9eea2c80e8f26f3b4c3e1a4d9a14c45821ab9e82de4fa51c +6e21b5c31d69275a8ea0a0d8d5571dfd6e8d7cf17dd266ef5d0418fa71c19f8b +cdf8227d34a05caf439ab2479e4666167e52c7c36206024093c1214772f7dc5f +a434cc74330b4c44657c14bc8e231cabad017e7edb0f6d1681e4a5802663a470 +4599f28b7ec42c3ac7dfbeece0a0f59b22395ec8177c64cb340be82b6c543181 +15ae752ef3e2382a7f15aaab48eec87e850dadc68d7c91385e0a66263b6173c0 +fe3d7df2bc45d176b9e2defc41efb212f6911dcc4b42cc9d9aa4c67fa3efdde8 +8b55f18cdf8d1e6fc583bbfe9e0ed495fdc0b96e268725d9bc59a73b06591380 +8d1b473a2eafe23bd442b82e6a9952743e72afecb683039e38f2f9aa0c8d5ee7 +4be38f06f010c6fd84cd0c5832d7d0bbc7e6040ad456d504d8781f5a8688a7b2 +0b2fdbf1c5f8dbfb59ea377ce93fc599abc6fbcb048c9e89ecb436697d683ffe +7f39038a39674b3062e83a11a95b33d4e7d335c557ed1787819829be45122582 +0a3ce94c9516d0f0666d496fd476f11233e6c89a2c9cb0301f4de60ebf69b2ec +2c9c9d589f50b82ab54133bf4f9601b46ac25c161a40836d0bb0e9e31f912d8c +803836e8c877904aa8f1f24674b78ae719729a90fcb83f1f065adf30487bca5c +dd019b805193942c726ed03edea956d6dd25668197822921400e0faf972f84e7 +f10a72fdc85a8f61b939eddd6c32b2b7d0d9f77a0b801876dbb672e40366fdb3 +41c3fef7d668e24cf618a59d19c1e4e691e0fabe8f35ff4fc02596e9295bdcee +936e78030d50b6dc24d6ea6f5ac4c84eee0306c1bb9a1505e7a68022d18ac57d +18c3135c19569171d93fd23df7fed981ac272dc7881af0976eed1cc906cfbb1c +50d699777306939a0967aa2adc6c59adb635c61a7a737e6207120f41e5c3912e +5efdb87a9986b43b41580654c55ec51d80d35d1e8868ce05676dd881b6c33abd +d2010ec27030198227d7c0d4dc6e87d942bdcd605f2160bf7eef09f2dac45ad0 +c7b05d1128d842fc0a501eff955fbdea2a232220c1fcfef65eb3ab96e1e0056f +642f0f3c44194df0bba45b69c40971bb6ecf436a9d0a6f3c2e7e47a7eddaf1b9 +96c8bfa153c722141ac0d49f4cdf2e6339b67ef84c564b5c6b98debea1960ab3 +d71c6b9c43ca43b2703f44d4037ee91e6c96eca8620beb0992a80eddbc55bee0 +406fcdd77b28368e6d251e1fb53c9614691863676172b305c853e27375d5f40e +5807c0ed401a2f069793037b973e8554bbc8cb139322b5d6358cb0459f8f0ebc +c263e7bfef41fbea068c2a2658c66ded4acb58844a1b37acd2dfe1d87abdf758 +5e323cc2be9e0e22ed555c8aa26cc77d3c83486f95c0a4075b37f21269ff167d +25764797fccca6f5ade7dce601370bd6f1c043ceba64bd9da10499fbb0d73371 +6c2ea9a5899ca18de5f0c5c2ba11c96be71035108b84e13ed8e4e973f159b0a4 +32401b4a5d4514a375a618fba7a519b59241c777197f18199cbe1d0b96d87625 +6f025e72f5ab3a39a4be7bdcef94d3548e3389fc6e8ada11611082d98395ca1b +4b4ebc9041be6e14b49d4a353ec8e346f17b0e410e81c9a833a61b3aba375202 +ceb225ee8cbc81d2e81090304e77a8adcdd09ca883521daf798aac80ce6a2c8b +2d250290d1367621bdcfc8e973e0767c9de49f239657a7758c378d734990773a +a1c8274d65649d730c171da91f7a54c6d257a6c5799e1a297c4732cd27d55cee +393a2abb568078c6a2d9f9dcaaea8b3e0df724b14e01586129f911df887af546 +841fcae2aa7ec18e08070bd45a6dd87e40f561869f2be6b1e725a29435c47739 +d4e9081c2390b2a69b931ed8b353f5fd9bb68b9381cf93b2f6d4b2d1d4c2a41f +404563f678c30cae4a17a842203f1fe7c7031342e08d52111c85a53346ef6ab1 +f9d24c9d37cc6685387c6c78933ec328353b796980f7a243a772904fda380855 +d2e4c4a891da7302531eed65f0d8674a86bf925f24ee4b99ed4ff863e5f65745 +f6dc30f70ea32a9d3504551f8e3da0e3362405ba2cfc09474e81208be6d9e6b3 +b80900509ccb468164f125bc752f5fd850c5df226a5f20b513e9d4800d13131a +f1b2bbae1cf4a62e46699bc568ec489add8788dc01b2a5ba68bf7da5d6f8f30e +ae41cd9af7b3945552d1175c7f6eeb7554b8d8b4a861726415cab4eeb15fa2a9 +cfd33959fb93e2fee8441a17e4dbbab3767d9794eb92fff40d77d1223c4b8150 +7f4aa8fdcfff55b44a6d8669b561e2f7cc6ba6839227b9f4d3077ff8f015291e +df61cf18bf1f817d144bc807d6951346e8078d50b7a0b541342bfcbab7e5727c +c4af4c42975ee364c6bc957b93a98aac2e33f710aed3dc71e8c5fc0141b562c1 +263a4a6cbc0af90d36c7c0fbf223314f53efd58719ba66f198e3a72e8c19b774 +b7a441e79bc0de1017275252cd375f1c57b5d3ad2f62d403aa2fbc3093e44771 +2930280511c2e21cc28c4c363e191400da878a558703f3209fe6d75adfde0b2a +17ecf960a978811b8538bb38b63a63c0561668aeffdc1c1c345b169f42ba5920 +728f2258afe49b3821a910a2ce79a1c5c859178cea7409bb029cafe80ab26362 +df9902e9c8762387c5780c522b938f321bc984f45890541a65734f327710a075 +1a41992eec6ba8be7148925cab89c8d0c61ad452f24a060a1b1165f53a7271db +89ca2c45f21b5633eb6726804eb14a6b667d3366242252e6aa67716213c11346 +1473dda20704c4d264aa838e9d60768c2c9a8fe30c92b9f4a32ef376201b6365 +d9ab56bfc24cef49a81eb896294cc55218f4809dc40bb833790f0faf7a261ea5 +0255dacfd4cf30e0306e77ea3ca5e25ca68febf121206ddf9396b1a5206ba65d +824dd13a09655c86c3df0c67c7241f467399e5eeed1ca27280b815628a58ad8f +8632d5f29c62757bf90408aac16bfbe022d61cbb674642f5dc2f607d44de5678 +a952f52338c29d521e83ae1aaaedc1be05cb8fcafa80779b91daffe808e79f5f +d121a7a947997de5b17ac03fc7076dda842e685833d1562fe3cb11e603e2ef77 +bff0852b9083cd3ffddf10d7f3e20bf0647910a51090d25c87332311c4fc3d5f +5afdeeee3cd12fe187331f10f9e395cefcfabfcf716e9c9c57a38a1e42432607 +4c4ae6796374d1a76947dc891712a6a5081dd7a4099267d95660811d4764ff93 +17d30b0f0902530c433f477447aeda2a8dd36492493af84b0cd87a609edf9dbd +9872b51159b373d2e8f25759b5b4870786813fbbc8e507f1150aff0352ee5ec7 +fbcc9960664c857df7fa8e8f6bb0429bc42bd17fc7fe23ed9cf8f8dbd4bb74f7 +60fdfca8b30101ba224399672c7daee247999dc2413a1f487c544f8da7c01389 +e4eff1b6e857f915272537cc097382934ad3d9175f362dd3544b7d23d1ac5a45 +cdda68f6527ca2ac078cd1e62cb4bdce1a9ff6bcf873bea225d9dc9f91e714ac +1ea4dfca3248182d8d99f08e22320eaa29c2b94db9d0e7e6ae401236ddda56c0 +4e45f609812e86c03f2880ccf5a73fca48a5a826ad970f354b6655f71eeddbfe +17bc1a10b847e93c65dae5e0badf06f81064025738f9b2539320776f9fa3b546 +7e152193ad9e49c5a817208333e67abbd4480135230f3dc5bd7c888d7fbbd1c7 +acb1d54624491429cc49a825b80637f2fe49c6dfb08b2fcb1a759005bc88ee3e +7bc4014f52f6c8806427bb8ad5e41e2c87d3d08d70fce02267f2fd86f51e6c70 +cef728ffbc7dd081641b53b8797aac5a93614bb03698924da7f143e5ddd270ee +f7bc1f24e2a8233b62db77c7a90eda7aa9f9d54b94afcb74d0b7ffc99a5f61d5 +ae57afdd73c28eb9bde9def91fee3c33b110e8cfde4a30245c83076f9e894d67 +a98785bee70ad1a8b893514901ced5d393cfa543298a9be40493e9fec4d1f157 +3864ffead06212eb62ed646617926c52184cdb41e9b7538f8d055335d0291b58 +c9131b247d35be0bb6193d9829826afb2b655003d0488ac05369bf310842ae69 +f9748c2ee816da397fe175ae69d3dfe6b675bc106fcf8d6d0cbf031014c8e08c +18f898f3918c4a7bde5221c385d046eab7cf85a65b679a5feb86a074bc68d85f +5f16d455509329e64543a78675da4f1653fa374df2d953ad53cd64e420ab4c64 +7d86294dba69696714bb338994d94352b92ec4523ffd12fbab6406603dad4567 +f5ed6f56cfdec32caf6fe1b875161e4f901541686b97dfce459398f4239a1d13 +374adb6826e7690f7c75d18db171b19daa70da8037032241839a04cab93f7eb8 +17694c32b437655486b4f4237108db5f472c05de465ba60e5ebe5cc51851a7a7 +0efb3b383ebec9ad55f2b26c216ae5a8e1b00cf16ea374e0867565c188032a96 +1fec9c4947d1cc97c84f2562eba46a5b89a962aadbc5f05e4e228425fd96b8ba +c58ea8513d114ff3853bce95637687cd0697304fd4b5feeb9a907aa5feb3db7c +ac5fe2c0f5dc5e3762d4e384120bafe9a56bee98b8ff3a3b243d547e8475c249 +db8255dcb9e45ddf8a48a2dd8b3c319296e6a5d56b512d3c01091230141241e8 +a2e8faa9d369b04acd406c096909743b650ef8e1ba5bd9c537e601f4ced9ac44 +c3c91873825b0ee34308729b033b2d1f2754486c0e97fdf9b2089b258690e05a +b1d534c798ff965c39818b278823e5d597e038d04b0a1d3c8c1557ee52a163e5 +e01ea021f9b15612cc8a2d495de2444d4fa02928ef22df70fd4ad0a7dbc447dc +42562ec9749b12e0ad7f09a68f34e4bae33c26cd540c2842b3650ab19d4c7b8d +b6bf7b31f980eb44cb8b2deec8ccf3881b5e5b1b0be0663a8cfc3e13f912c7c8 +aed946c844f9259a41ccb2c83bdca9e9c62db86246e5595e55b9c0aa9bce3240 +6ff7d372acf9ab8d5dd5bfb5b06617a751e47d7ad63ed1c3a6708f5ef83de00a +3c87006c491c96a7a44392d6f4c33851f2ee02c5932402416ed437b2919cc51d +467d26d55fa42cb67048356301cec31bf53d34a62f0b249626578381c82f2ce7 +31ceaa5ac3bcfec4dba2f73266f544d9595ee977fd037be840576731469d2722 +fe7d030f059e5137642affcffd5b6ee62d75b6c28939107e348fba02da4eea6f +a237810c205262628d4ea44f202af610f6a68cd339aa06eab6fdbf46196d743f +630145fa6af636ec96191a98cd4d7e5b2e90f31cf55f174bbbf0eda2df65f2cf +36cbc94242bd43eda9aaffb1db8db484b729a99485bc77486b6a0458bd714236 +50b0d210be6a55167d80c3eec9d63f05f8002c3209316f371f0f3881e243f111 +79e905a66bbc352e20b11e915512a4372027d0d864ea83f5a4da4acbe520d17c +1ec01e30d74b55f65f5cd4c8f428482232698c5aba66395a53340d514fe34335 +6ee8cd9a2861e9bce4df25fe747170fac6c928ad4b3df0e061954da97979a9a6 +1dca780984f91a7e3696e23d9afb06925be827d0284ac736d01241ce3be5b544 +6e3d766694ab68967e06cec4b5517d4ad400755c0bb6994b8c5b41947b3deabe +98ec38109ee1e866fb22b3c3433b0a26967d79dcfdf1adabe132961ad3b7da5f +e0a5a49ac61dbe55c18dc083386684d153128a2c7a3411fde3a7ada935566f7e +80ece8f00e69b773e836709783071578fa46214fa370516f78355f454853eadc +d7d6d9e6894032cc5fa21c56d04013572a06e4d1a28d3adca2d3f2697eda1937 +1d6ae6e3452eb0dd76179f7920c16f52e76208f5a1887c3217d2a0b4152f91df +cfa2d6a03a3cbd249337222466e8bd3ef59a470285cc7aee8ef186f3292f3e31 +6fae70b229f2a0b4d2e07e5f1d6cdfe77a8c00c7f88ecd676e0c6338f2bc28ea +1eedc4cef226069d94cc6d830f13329d366cb657c09cd402df4283ccffdfa6fc +8fcbeb1fc2c9aad5274d29ac26f22563b780e4eaa566e9d0f255105262b05582 +57badf9705b8be717a5a2ba71410b74234fcaa14b646e94b88f89834c1f396fe +8485d47960c8c0d5bf825b3b5363ce6a8d2cba10e16863c692aecf57496e63d6 +e38de3dc067cafebc631f170d8087e808893f3dce89da70288979e67065672c2 +ca4c571c8c99c1e9e604853cb81a6bd7b35dae9fcb0b048cd708f760431f91af +ab8b12bb0e13b2b63db855ad27573430f59393beb402234cd479c37d3ad89063 +64ebeaf6f8e14bebc36c3c115a644a39f4493e7c31f18c9bb1a40c8e0258074b +2b2cd83730d1b431fbac0d68e46204e957c1f5289d296ab19d39fa3509c17989 +844ed1ad984e4b412e1b94f3d7bd14850a793bf292650356174766ba1bbbdbb1 +444f953499d996d21e78f9602285ae3807f4d4daae8215abe081d076ca5ab35c +b533413491eb2328705e32dbc95042d898f856fca4d239cbac209b93b1d7ea8b +a0ed7915688b010b28cb1ac2aa9c3d2691ba9e3a7047e1559c32ca642c3014ac +8d45247b6df03a53abb33e902a49bc65615cff30e664c873a6fbb547341a8b5b +3c7beec7e16428f9aa3ba33d30a72d7723338181f360c3811bb506f1749143d7 +6cbfb9a8986e63756b867e191d6322dab0154905b3f6b7956f7b43fbd421b9ce +b3c823ba09e3dc4fa87d19dc103ef7ecbebfdb3b73f02124ed338cb75f96b841 +995e2727ecf224ab23382e16ddf59a6265f7e1b74d7b49e7aff40f0b3ed61c26 +80534c0576d30d2ef0697d3e16d452877f12b9f1b89e13de86b66f258a34b4ae +908431ac990f42b30a8530a48b4cd60bdf62e4cbe8b2e10e04f96b5cab29cd27 +40c10f42546e3a9d9ce1717b43688adee29380b4a08c31f6118a6c492bc55b6e +6b4df1dc1443f1c176d85522cbddb376fa4643040c6245089bf8a18ee687c8fc +ecf8eb5a206b5990d54dfac5f9c28396d9d712cb49297e265c0f951260d03c16 +5730916583b96b0f1027131b4621f44b29fb877fddcdb8f414ad1e4b856d2b27 +b28b5a5e979f8f5f98f79c1c0b12a134a6b4ef8371545b79c1b8393b4ab20f41 +78895726b350ad42374092f3b4fcb2485cc1bf91f2ba6b1c089cf3ba4417e467 +17974f3e1def68417db462ff5b29e7756c866badd3da8f5c31aa0a5ed6af45ac +cb97f96f4314c66025e181d42825d621a051a09a8cceaea11e9204790a0b68ca +e2f791941c1edcaea10ad4e91b4bd9816a1141a1d892b5689359b147c2de6eda +af230b3c2b028aff906f8fc0fa422e60006941b0ca231d551b7ee686cf313a40 +f338527bbe8e4a7688d1ed2024978a9812a7ff6698ff30d14113948badfaac4b +b1d2a127a79ce14a315b93d87987ddd8d034c2fe34298ba78f82e317ba3d50df +896841fb9a8fc60dea7ce0126fbba745cb026f5e4eee50d4a27015ebe686893a +729ffa3fdbb747236e433963c8abafe0051708de307c116884ffc0e95424a354 +2c5418f277fab801714e0e971da982d5a63a133be791a4cec0e9e4e830b3ff1a +bbbed9a893a6b131ea4a5c79abfeab59a199acab5b3e309217e467243d3c4922 +4ce041cce226e189641d4f5a8d19eb0fe85473ef462dccd25a8a16c7f4b9a59e +f726a9df3c64ba785e693da388236c2b0aab83ddd865b2fb5707e019d469e6ac +d73d302bfba6f00dd678cb2e1dba273be38d88eeb463c87d63c8a9d416704562 +af09dd8e07097d5b08a3285edc24986febd6afd85fc7578575ebba9a37279358 +b284aef9b686d6ed83367e2cba64e844d2fdb60af539028d914cff56afe9b7ca +122870914a4ab0c0f5108bff657bee1713fb6b8b2cde34dc4bae24a8c5cbd3eb +1df0734d421ab2ee19705ca4e21be1a48056a41053e2c48012ca294c2089dce6 +596fa0c3cdb03d7ddb18986340df434ced473eb82ef60eb5f3f3ab242438a9ce +e08de8613df88868540587221c2f3ee9800ffc9d5b4a15b5d0ca75f929ba6438 +83e924ec2d85787893af934b87e7e871397e080ac70b4e10d210124de5459632 +f097eba88a9bfdbcf81a246add6568e51838ba43053346b4092ab1c9baa90856 +4f7212f1bbee37a5151039f5d006b39bc306d374fc68cfd651f537e040cd1592 +d52217d72d22eeeb5cfabf2f23b9dab0eed0baffbe8d073b961d3c18ec8b7e2b +41a9d7ea8baef072b55767d70a157e4eac855739c95fe6123665960f016f4113 +98ee15f00a768fb6e0d895b4468ea97556579a0c6ea2658f52fdc9091fb57c02 +61c0aa3fbe5d6383c8b3af0e9083795f6652c9397b100eeeb8364ccc463b1108 +67fb43a3a4f9993cab9eead11dcc121a1cea28f22558ae32e58313ee38c4db71 +0193d9d3e01d228114552552b28c882c60bff05776b34eb86a61fd5b93c95c92 +3c820db5c1deafa40fe3af822fafa8aa41b0fee856b1c3d88ed33661103ed523 +244236dda4bca1f013389f7f37a8a5689d29f5c2bea0b4898404bbec1e879f44 +65139866da653e4eb67fcd27e004ca009c977ff3e8773e283ff208af3670e8ff +d8e538107db895c75b884071b6e2ff139ae6aa73903814537fff7bcf73185a4b +f1f489183ac4edb91d205f825a0b431099df342dc99da45fc7539dceaaca1b96 +fb947992b8a88c48cd50eb4a19c3d2e21369d343a1196ffcbb3ce99d49a702f3 +26e4400395c7546f6120e3bbf0e52f26c40754ff4812bbc4f3d9f826544a1ba3 +ae3ee2f8b091a90ffe3fc465298d66bf75aac9b035dadbbfbbc909dfc98f9d97 +6241a405d582ceb635911c9d104f3ff28fb8e62c908ccfab0f0bdc01dc10f1c6 +5bd25427f1bddd0e2962e78969cb81acaa99318f93cae48b3efa3176435e1ec6 +ecd8d47d4a86b3ab4749af97f7f8ac7735835cdd4b4ddee7bf227f6aa9aba95e +2da946cc2f1b6d1297110989c2c47d3b60900f34cbf579468f5d1e0a5845ba22 +fc704f4e518ad70ebb2f469002dfd9c2b066754c3ef9838ff2ac462e2c65dd74 +155673d0e79648e900e05d958163d6c8e4713328607cd844f5e224fd8d0b921c +e2298f8ed0b618156bc48ad3edbf2153c47981288358c5c98fde717b66ed05d1 +fae62afee7d2956866461167b53896334d322720c727b1d01a46dd2e7a1da511 +773eba12cc084d813390e339a455cd2fc6145311be0113e5ad2f2b83548a267d +759108c2ebae9f3b8e8f28fa1b00b1375642c52e861134a19b04f2ebfad17be2 +83796d72e51c318caf71e0f6339b809ef4d6849bc5cad5a3458e733ce441f987 +ca3b50aeaa88b82f3b899aa5b4e325daa477ede82f12be7bdc77100ed85b2d32 +f57b679fe4e99d55d2ef905983a8cd3bc6305a41ddad0585b3fb27239db3b60b +4137b2216abde105080e3866f2ecd44b1d89718799fc40b0be0883ac1358856a +4014e796f55484c19c643ac6f8c8c5660f27c6ffc42398f7a83aadeef5bc922f +c7a720871971c0b951f95f492f182d362f992f4f78fb3d57337035edce6a7370 +935a67bb2d679c539c8f62d1ac873bc9d36fc1ed8078b1ec7a84fd3c3c90408f +99292f31d3e1ac1767a3531f694962d0269a2f3972078a434db6544404ef0838 +8ab007a67963d16a96eb729452b64ab386a7a01a03eb9c50562102867ba6ba3b +25a4940c4009d40294d0328585d696c7ad1e5daccc60dcfed733d70f42c896ca +8864e00ad6b32b15d5d326f7fdfe648c974198f3504fe3b7cb2f637d575c380a +8ca9ffb703966b09de1d7dfa9217b3debb1af520958d7c27f3f00875bd295c56 +5e5f9dc7850ba6b1484e70b74fef5054cf3825029db6428bce2268c2212620df +d5f77bcecaf56af6079b7cc26f7d8ed68289fafcba20e3ab80067bb20a04fc87 +509ccbecf89dc2d9abb8f39be6399127c2249ebb75dd2e3520ecee2574659e9e +febad6710a6484ff854054e9036a119b819c3cb758d45b43c33dcf46959ec6f7 +9c33cf6fa00bcd5e7a704d912362da2fefe7a3764272aa9caa26185de955b23e +c0e4527152c9684f3300bb2a2943f5952f6a4edee948d63b0bc9f33d73b34ed0 +34f377b59afc6b8552f3a562eef94356bbed3fbf5ad1a97262b4c8e032341f75 +b93d16c56874030ad56e86358518e94ef1500c5ba08b3865aa963f2365ec1c77 +c39f97950df0d5bf3d8800495b83b5415f871545492a162244693068104259f1 +a47b245af8bd2ff0357c5a2a097cd3a3e5732f7751ba03fdaabd515bab401f39 +c032b8aaf17f8667262b88a3042165875ae3ee0f48686a7070e23bacd1de74ae +95884a46a28a30fdcad4bd9e79104cbc7a0adcab31dfb4426ee60ca67e25ce4d +1970bd722117ec1235b40c2b914abcadecea10099a2c56833b80d40bd4a8637b +69ab7e8b7d4514f3e96adfd8be4bb416237d4fda3f4e466d81d43074b34da7ba +bb01402569731120bb67e21d75cc482ef40204412b4f2d92865fec254c95cfda +eab813716e93748dfa93a1d1c75cc29da45c199995b693324cb1091c0cea229e +7b2a9d66aa44b64cdbe1e6216e7d6ee0327c1f1a7bd81b7f7859fd3a970d8b38 +d5e845dbbc710663a0044fcb7c399b2b0c08970ef208236ef1c6fa2630aa018e +ba2d6810562daa730acc4317745d87add10ed0fd8e24123bd96200bd602c167e +f6c3f4c0a1006a7778b07d6be5032827bf734989b33cbf971c32b7485674f2a6 +a2a04159fa47bf9a1d858677bc950e8b5cc8c358b4e438a8de679afe557cb4fb +672b144502d02079772b320debe9abed1aac8b813e87b25f4bae9d6743f37612 +fa61e7ea33eb3ff638ef49e06068001403613895c30dbe40f9ca73a3e711196d +36c980a6ece78720e13e31be387e24a731db8aa728109c63bd5a379a016c66bc +1f6ec30bfb2713dfd636fa1fc6ff1adf8152d2cd642e6a14da775abd8b27c542 +8029b48318637dcd0cd1382ccf9f9b9c96b7198ff33d7d1c6e83cd4d7cc5beb8 +a9e765a49ad4de011e12d0ebad3aeeaf57bba6424ca47167532651d9910736db +f750e4bab06a88f69dd1ab6ea8a343208ccc1ef85d92dd70cae9799458b996bc +26fe984a79ca9518f772933bc1701cdd07f5b30f0a55ffd25df81b65e1f5823d +f45d1d0f4085821c48916646b86396ea7994c1224cd86509dec60d65d91b67ec +24fbce2b68e6915b476fabb96e31571c3f845693674489068a5ae08b579dc969 +6446a6474fa4b12b47cb457a796d34bc3e888eb75879c7bb9577a0d7dcab9035 +c2f9ee358953af01c22f0716718ca954c2c6f513fb859b0d196c03e57fcb9c5a +56528bf8d40b8f0629ed7770aea42f2eecaf6a9dfdf0b7c507119348237edd87 +26df3fd125337cd2fdb139b890190392ddcbc1c6dae94e48212ea1aaacce43bd +fa570c6db5547fb1051d717b40b0ce7f052fe02801f659bbf64187b624977984 +938823c8a116142cf10e19dc776b95930dd9f9a04380bd98c6b6557232b2f3c6 +d1b47d0adb6ab6f20f65d0397e07cd931683b78a675c716acd83c758e173f652 +113695adc0f062b6d97a79c164dd664cc0468b34b4ce71c14b7c1fbe5adfa549 +edec26ea51b04a07dbef16af4c26ab09c1aba276d45190db288774be8fba3f1b +00f5d3c0a7b745d40803a9192803e9dfdbbe4022584ee3d6bef937640543000d +822d5c0d345503da543d01e3239904272fdee8663fe46c4411e0037d111d9282 +8fcec636dda640df8940d712dff441389efab1a2804ad277ab23e58fa4f2a9ce +78b1ff265d82008090921c740b409ca574ac1ce5be3ee1d17b2a5f131776a68c +2eddd8631aca78d82f60bf352212d357f607b400ee3bc112ee18409cd77edfaa +ea7468079b1f58f0fa83603ef2846418103789620846a3ed84dad7f2e20c25d6 +4877a96ccda78ccc267727955156068b8f48cc96e7e8acb039a50baf541a9b6e +491ff14ddf7da33ba39c250b8785ea20bb8b1c810598b5e40d75f23b81884599 +7d11b1190775089ddec0d650561568358e2884f5d9f1d01f5f96e4c284334e21 +6dac242c7a2e42cf5e68e93ac67e71150409d9468c2a36a557c981eb1ff02f5e +db8943174622eb77b11239055de2c7bdda66717323397af8f64ba1c788e3b3f8 +cd48034de1c0efa834dfdc8a4d144726c948a0f5abb060f39fb0fb56b1e57b2c +985beb3140a5b83d1b092e3df2674c33437a67d814b0f188ebeab87991b28402 +a982bcb59817548fe8439232dd76d8862a3f08e1a58639025321acd86f0467a8 +acf0ddc099e9e5dd5b8773b0fe3358061996c39f084875a52b6c9671a0a186f4 +aa5968ccc71b574eafb206766ff9986a238ce7d4a1e0744f8551b1789bfa1926 +2c40131f71cbfa5c6d8c3bfcb412010850d3197daf7964f78b9965746e3156d4 +0a1adeea78e42896bfbd2e6dd04f43408041962c7d73899fd91899d41473b664 +58483b43e3d965cab85a2adabaa76385d7086362327053ee5d6b642f0772ce53 +dbf6cc3bba8a839127ae5ac71dfb76b89ba76bbc70684cbcf7d29b54299ad823 +6ddde65d92e36c6ffedf8a6e2605315ea732e286fb66d328df01275cc868eeb1 +15e2967263b05d9924b7e7ca498e7204eddf0773327b69e3996c25e56d86f99e +8650e28064535d30b6db6f4f4b42c88f9ec2789452112dcbeba70857aff3fb53 +16be9d8f97f0eb4c7dd716da89684c021ca71492f9bf7172673a416f6a16deef +7a60e5b98ce264fa70675bce0a353703314d32ed2c34841f6a8b77cf9f0e67dc +5f4358ff027981714e820e545a44bde7721e6ed60cde8d3b7b5191a0343c499f +6932c789f74adf5b45c516236d3e32c9408f498dd9710026c99d825ba01821ae +90b4dd5c75bf68bf37943480363df3a82c873027f2cd236f78203ab4d59f7a5a +40c6eecfa5b52e9d0e7904c18a00983ba33586910b19531996a39bdc2a3a2557 +b23d83315b795b39100d360655068f28185976767ef4dc8f6b056a613a66394a +c631a80ff30b4400f7fd0f6120bdfe3c9d1c75268a0b8009a61b777a8715b41f +4183cdbab0a6ae018d446d7d8d15852aad39005d2ea90beb50754e6666e9ecce +a710faeea83b7878eef6f727cd8b3991b621aae92bd57f69cce753cc1b77fef5 +0e8808f7ae45649095eb9ec27359ca408c28e7e065bd70ea20d7e0a36b6d0a25 +9eebb1b51dc465380ee2d2d0e7ca0a63542b1c0f367aad15b06e2ee1a7247af7 +635ad9de06437928ab8d2a89aae63e600fca4107bb50f4ef23a0abaf0a8e6303 +689d75d822477adfe63e73e278c6bd72b028a5a196095c0d08e8a76341f97f6d +050f6670a8ab0d3cbfbf0163635fa780cb5c8284d3d927265e30aaf678667430 +73f2e155d4be7d94668dad9bea21b5238253155392982b00523c57a944daeb94 +c740a13f0762d915123472fa3c7bc1c1074aaebee81ed86fb484fc66a40b0c91 +eb44940805d4aeae6b1dc88213ee7b78aa55a7cc912be27cf2f7e1672b34488b +898837cc11561a09396a4bea1795cb73541416f8f84f089fbcaa889017f56bac +636785196a5aab553766386b4c79b207e97609fa6fe60acff02e851b59177a88 +80224001eae7a85e0caae8ab6f5d9c187a9fffee4d9f1124d70049fb851e4561 +9009b9ad3ab45f2a9db87fb0bb216f84dcc696bb352f6a1e780236e8d7e221aa +84b8d303b04a95595a78300d3cc3ae57a4784ec0e211c9d573e7c98e3d337bc6 +75d0e0d992c2341eef06835f0e3f7e6db16c87a90498f465d2ac40af4d8d339a +2abf49109fd5232b9c0f43689c679534de14b778a7dc42e7eb5443a143b9b822 +aef7567714d6476a147d9aa614429050e8fd4f863e2f4e0548fd31ae321f00be +21bdaaeb071074bcc7293df1363e6fd8ba482a55705983458a1becfdebc57430 +4cf0907b77b5489c4653bdb91b1be4ac0045226c34c5362fe0a6bf92cc42c4e8 +a38d28c2ce0ec083600fc16b7d9c68fc77c1c85ac376f68bb0e90f6ba8e7cd24 +858237a854d004983aaac4717165ebc1e1d352bf5af3c7bdcefef2eb6c52835a +c92c6ef35f49f5a67e9e4b8471d47dab565441ee9a9566befba9f394a5c402a9 +ffa9ae67fdfe2ed8cf009c55266a88bf4678d719045ee1ced4a149f9c4fdde42 +1eaa6d4f8eb935fcb8229b349c6e16082aadf10a56e341e2200001b548eb5a79 +2979cb296488ee25e36dd32715750655d0ba72d6f783444e51e6c40b236689a7 +fcd8426419363fcab5e0f5e0a138594feefbd3609e77e5bd06f816b0e65b87be +02fba0f12f192a7c12e9c96b41c36ed7b6492cee8ce1b081389fc30d8ca64b92 +5c634feb7b8b640dec88680f1db616059b223d7a18fa0740e5f93e36fb72acfc +d4ab046894b89408f51103a6359d809581c2b6b01461dffdb712870c18060be9 +3c1c092d8573b355bba5f644cf7f4da120beb1d04f8f4f9d0d51f9fac744f88d +bbc7de944dafc06ed0e21f67eb44c80a028e759d0f20756bcdb38dc016b0a1cb +d5a56e7d97da139dd5e9016c297fbefb6072055fa07d017c1ad9d479a2a2043e +149364a78d5ebf54baedbc79f5032f2bb1bfc738902dd79e105027dfdfb5742e +9d2adc669d61fe33de3580a5cb93008104b33e3dfdf7c696d27a96a3114c1d23 +ea48ec2a351ed4cce803b63ab9ff1a686a230613689e3afc9d850247d86b0105 +63fbc23abffa3d0d065bb45102d63d44e92cfa2c020f0e3d585be3d5d0e09b09 +a425c75b8680aa702900b2b58f05c60318e75bd7d123fd8dacdd1200b21135c9 +9a7214afc1fc5fc4c79b835007d86003ba45721ce465145fedc5e103b2e67eac +a9bee2fa3da5a6ea88a1c45e61fd311e776bec8c16aec7636b82541ee412b1be +697c6000f55a023afa3cfb4c25b5f703d570336f8cf93d99c66ad525e1860346 +87e4aa6cb4779b4edff5383590947749f5dc014543d1358ea20fadf219f7f35b +472cc131ea159f2667856c6d893f1b55ed83d1290e65f6b7ae12c06b80e28a7d +f59851862674f46fc1bd322304051239728689c0d0f9b1ec4cc7335896a1fece +98536bb066878fb2e0f11675a9b0f437dd7d3466fbef03b3d3deff89e78a03ad +288841e39e72ab90a48b8294f0bab1f1be5ed582f7fd68b4fef5a3344b6ae8f8 +0a4d6d7dece3c8e37b841c69c3ab531d1ade5db4466ca6b66c6dbd2fec1665fe +237dd55a44bc2fc60b249a5a3c51ec17319e842044a945176320e9ea68804000 +c387dd8b33ad8b5dff7df8e57a6d3318c13a1847c193ec3e4e4d8ff4aa23d320 +9d1b8cdd77dcaabf158503198ce4875a8b061e82c3ed84f0e33ceed33d043fdb +512e896fa759fa4f7a9029d4add3f86145c2fe638b6972be3d17f06fb5e40d61 +6f21f4ec146c9ea1c61c79799a9abc6817265ea926d92f78222613395ee216ac +e437de533023307e2b7ce617049ecd33dc010fa78fec5d3135aa94b2e920bb23 +5e953116140bd5d68e4981e0dd8e36dcf3a7ce9b683f2ab1bed63b0d0fec6130 +300215e4dc13abd3c89539df2069a2f9d44687cb4ed6fdc5284471615d70610d +2e40630c74cfccc3414ae89cbc3724cc70c33fd8e7faa4f08628c01597e85429 +ab22d3d1e2dbb89092e8cee43e3243356250529c5cda0a5867085231ebeefc4b +093d262b583e64119d0417e46ee082f32fb03804db95fa3ccaf7e5b514a6f1cf +8f0cca166ae2e08d3765ec5d7f933d89c7bbde4da67b30b09d1e8e8f9a96c7f0 +8833a1d22d4cfbad894d0501bfdbbcbcf7e27325d103a1b3b21e086994656c04 +d0d0d7cbd3ac9858298d662c3d663e26b8b6260286ec13a661e9a8353cc8baaa +5c460647772d828ac1a90476a394544be5aa1d56e3da801c9f6b5396370a83c0 +812d27d4871f25bab3141403d9e84ecab7b96787adbceb0f7dfe28bc3d2eba91 +0a24b65fece130e328c9105c09e4f88c8e302cb4e499582958b73dc0ad8c2a36 +2fa6283fafc5bc4d4eb9fefe8a3d00189f95b1e33fe0993de9dced36f0aadc66 +d009af18f893f2d32826ee2d52bca329ea6dcbd99d8fb7c57cfde44a9e6f64df +317a617860ab2c5dc4225c73243fd673e589a6af58c24b5b91fd64c5140af65a +e052e0ca7ee6fd25ae353e62cb35fda9e51fd5c1928f2d31e9768fcb0ae0e934 +ab43a065c428a9b960764c26573c63cff502a06e43d40826e712b38cbee6373e +957b1b0dd2f6a9d6cab313ffeb00ed900c7b3a12d5cf9ebcdb9b0f91fe035ac1 +b60e69dcf289783d1328400a7a3c2330b359ea9571cfe954ba86b62b6be707d7 +1048e6a6b19c75019ad3ba3215d65c303593e3c19763ddc8d4c45d8b31a3d748 +07f98055668c6c03ed4491c8c24c09ba3ac69ef33bf3946482c0fca1c4fd0c5f +b856d95f4a557943a6c7d2cc419e4b978eb0f6c1eef01b280e9ed7bf993c5c41 +a025fa8b0dc62fba846460967b7aff16af64de14ec13af63db57fab382ce07df +473c8082fe40c5643ce74c460ebd0a35766d2ca6206be7bee92d1ad6e726aee0 +c44677bf0c8ea8b5cc4f1a81d5ccfadaa171ef8ab6d2b7ce1f6b3b0c8f2b430e +e4fb7839d9c2509786ab0d589915b0787c8c24d6569d25e0abb5dd10b28eadef +bdc413d28ca3f7119e284579c93f91ede8687871d534a9beb91c933af57dd764 +efa055578a2262cadde630af54b1560bc9b6396e911c479d63cdd4d25a07d34f +4743adc5634d0a15ede46bfd0edce4f56f58b4d1834ac01ddd1a4d6a7aa8fdca +4d2fc633832a5c20ad09d54097211c1b72cb5bc721d183600ac470ff2b567fb4 +270708cac8fb4e043005d09fdb8f469042a60c83b499bbc50d06d37abe98b971 +83d5c2d3cb4f90a4f8d3d5db364ce66ec0d712075a1f9dbba0accc33ad3501b5 +5d23539e148e436481cd2b0be2f0238c4dc7be5d50b6f498f38e893f3c595967 +e8720b75f61f5db8b81965f18216c544994af2f2171ba8ca298a15338d9c744c +825357a0a66bc8177436608a1241b26fa9a11939394c21f6c72e24ce1ef36c7f +6994697db9709df138a305a94c5c27126027138cd4f869e8079ab31c3b05aa23 +014cfa920e4197655c179f83ea7b0eb45c5a0481dfb83e1b8f26d72c239a37b0 +b8da7bcb081defbd93de4f85fb803ba44fb9651e7d39d634710611a205b6e9b9 +404c85d8a66d67fa0bf99ce54d7cc0076f112f7ceed0cbaa7655b05fa66e41ff +535eceb361eb858939c246fbcdf0d6debbd33935462325ae7f4fda907bd43b10 +1b62afb60b3b3f136eaa004bb20a3f6969008282ee0dd3d9035ba624555138f2 +66c025da762462775471c3185759a052c78ee2d83f7685ae21a91edc39531245 +f796cbdeb1dc2c388a9aea31525a6f60e3727b14bad341870db43c12b25fce8b +26960927f999bd6889e49369448174013aca87c80f14c38d9b4662fb4a4c7cd5 +37d42344231cd4c93dd057eaa53ac1ddb1d50d7d83efd45a79ece009e5da4459 +36dc88f5d47df4f131da64888139092371a2095ccd7232add5728ada53f1698d +f18dd7088cce05174d5f29dbe7a923fd12fc0c7e2eaa04bb70f890fd64f06b35 +b2a5fea4e432f5b14351daa317765e9db918764872020847077b0f3fb8bcf374 +e7025c41c7ca79301ed51875842e5c96c849c2e8f0a59835d6bdc8236f2f5853 +01aad8c748e49e8ec15056f21e11c6c1db46a7f692ef748fe509b7636dc6a119 +74f588e73ca522c72906acf0dd99c44b22f6a1d1c7850e5efadc36eef60e54fe +676f854d28a54a5a980983026385be03ebb4c343c9c9c53eed2954c41cb0455d +d3392c1eb00ccf4450c7bbd9d9ee78a945363efd5193565d6e91c3aef9f7fe4f +b1ac4ff89f4e3cca076e55fbeeb1b35d993165f79a2b05acaf8df0add494c5f5 +ecd4888bc9ebf041bd94f6b662c9eeaa5922ec1d1af3f61ce73c3bf6439b154e +4b2c87ff1cfb67c4b14909e06f8a9ee273e67451cae590c22838ce4e133a6c15 +2d317349b6033d6c9c08c3f59c307335a83b28ed16f052d0d8300c3e220886e3 +7fa791ab50621cd916d74bbd9cc85006b259533e5c7e5f0f25c896f34d7eda3b +ec1f6b6cfa1c39ae40b50fe3e95fa1599902454f503c60641a49024b41f8b16d +2b438153ecbc5149937329a6cac12a6b3b0db235e73694b9b97f5a0fecff39de +d69e60bb9eeb07276d3d3faf476efa094e109f69a179785fe03b7d2c5bab6271 +49ba205b810c1db677716111025b8af371098b80714b8e43e9958a954e27485e +11e955cf052d577178d72b7569e1934f88db4262f0acbc44d2098e4d3dfb99f8 +86c58e2de1015b7f6ef5266807c9706419c63fa8165831b0f76d07eb0b0f77c3 +1ff945832b962ae8b5794c00f6ac596afee7de66af2f90858a5d699834f5cad3 +5df6f5a2a84cc4f44c444967a75803e0b3f25453c831de6b69af840dca6d08c2 +06573674b3829316a3477c1eb4def43f8fad1d926ef62919700ca2be4d947582 +74b5bcc372919251d8e231707b9096a07b79e346b6d6b0331714270be4f59630 +204333ec92e85bea95a04ab905155b435ec2048b575d9750269a4034eea5ccb6 +366a560fc78020c5eb51e2d7afe326f020e3f4d181b9533a23f2e22bd653eeaa +dbbeca364a25335cd335c4f3a4daaa4ed5443b460e3dea6400c17756530bbde2 +0d38266eb16eec5f2fe1ef53e1d58d5661ffbaba4718c049414a32af7c0aaaa2 +93e8930ea102127580737ca6573f19d172182a5ec6c1e2340e098aee45b65ae4 +d044a45d0b434dd537fd51cf01ddad6a3e9184d8e847561a7ca542a0ec9e5ef4 +d60857db5bbadc1cd286d59308a20093a2c1dd66d7fa47ee34e8c12290f809b0 +b4aaf3bb97afe0dbfcf16d5c123f4b935aca265194f26bf2ad22dcb6f0d9242f +b9bbe067e3d85747b93c8abcdb721303148b81294486818e469bf6d86b050eb3 +3cde6609073c6b846277bd7670651d49324656ad16191fd9da3a637e6ae8387d +8501f3a67718d2aafd6f0ca9bb980326c3c5241e3901ccec70f14b294c747bcb +16a8253fcaf4cf7f32ae5b7f8bf233057355c5188aca5713e7052934b0f00024 +8c178ce555a0b45da8319794728565c927986828bb0c1871d8b38bd676f06938 +e7215e25a25c17f8810d80ab2339b6e402d94be1e32f02bdded83ebb51fddd97 +deef5501cfb5d35e21318d471832a6deaa502907599ef2b655d033ac8487b2cb +e75f4b1261a2a2b0ede91c318e51128693791793777dfd018eec8e60e50ffe2b +dc9d136af596ad8729ec77e3fc498f4ed1c55f99130d54247620426c9c21fa72 +e949cf48d156c09fa79b99cde3792e00e0f13079ff1af0601075909327e8a8f4 +f29cbc7e69b21f4eb33bacfeba650c8bf6ac3c5275876dec1a08772a5b0a8505 +3cb4c45cb0de6c71812589b4be3f456358e347f50e2408fad056b9f8f7e98437 +baa5b72b4c69d0c68e9f93f4ee41a1a8aaed97955633cef9c4a1e449c7489cab +1eb6e640a5d927069985b107ba19bb59cee9d28b167955bd07954b32a2dcc619 +54371b909c07c82dbe78ffa3e2f5170188eb1505b87c3b84951dc021aee8a738 +676a3c8c61750bc2a737d2026b974e5e44fc2b83ebee61195fd86200860c63e8 +700f41d6067125f5bcc38c42a22dc560f7324c630d8985f87f0e9bd8c6d3ff32 +a64c8e9c2e59ac84f28a0b02a2cf9256878982c4cef66fba3e25f1d865e81051 +2313739f043ff1d1ee87bd0171f27d6fa16625368819ca9b18af604e4c145054 +84879fd94399bbbaf06784549b9f89981ef15706ae657dee9d050140fd8c72df +49bd0480f91fe9a7acdb93ecc712aa0da01eddda4a3338b0416bcec418331316 +a9ee71e1e6e74319e91615871161ca85ec83e3a49f8092a574f849c079d8591e +20f61d9c33f2eb4082f0a53a9a87962f588d40b5f403d754d8b1a4b771a6648b +82d41b452d49af019bca29a2bd3a1eadf3eab3ea39e709b8bf798232dea23972 +0897e863e77e5fa3c74a739da4ad612c3c3ba039774940bfeefa651996f8c905 +6e5586c4b09bc297b2d328975f7606ec5ceb4ae7146b4ea9590c9ae5adc74eef +81bfa3d3b1fdb5b5b7c74ba34f3e5102ecb049d13e064e474cd3a62b7ee333da +1022857d0c05fe8b8d7dbd3ee14046eea89a2784898b4532f1318a1304ad59a4 +1d4a99810dd4bdcb8775f9fddce730eba7a86f020fbbc60f68f5b4fae61978d4 +30a288d3438c2180d437c686e27b051f5fb0e64839c7786e09478af1e2b6613a +dbb8b012db4589140d5fc264278f47bfbfcb94178a470a5fc8a75ff81c3c8f5a +7e3b8204156f12c0bd25cff3bd2338d31262d9f8ffc8ecf2d38d55288cca3f94 +c31e146b7412681228f61949b7922055e4574fbd2a27962605476fa25061fe16 +d8c016fb04f5026c660608c49d4f8e44e7f92b39bfb409c05c01105001a18f9f +1a156dc4f256d2fa5180d1eaa428079a9bcd1691f5d4c1fcbf15f8762c36a9c5 +7cb3690a7c06410d1bbf92465e3d6f5ef0a37a063bfaf2ec3ab08a6fe1c3a2da +becf96c30e95fdddd98dff621961ecb481dc37fdbe951910f1ad0557ce116417 +d380946ff11efbbf3ab47a715bcfbcdab0a971d63b9fdc70ea6359d77b370035 +56801f196671d3f554c7ca58093e1d5649b3c05181955c321db534b090d9dae0 +039e39109feefb9b83a428ac4ce32ee5cef2546137414e4ea5babf80a7d3d921 +2e0326cdbb573c76f82c18911453de3fd3599460be0814747f350583bb2f485c +010d178217a4519ceebf22ec09868d6e6ac4290262d88df060ed21f27311de87 +567d381ee48ba1f4aad915635e39593bbaaad0ef8d6130684b112cc40311323e +8a42bfb1b02a892eac4efe02cf832c7a9902046249063020ffe6d43deb9a7d0c +498102ad6577a30a1124a7b0cdcb4cbdf16ff9c9c34cfd7cdc48a4506281effd +63fc28dad905b7eb7c5f3745607a584ba775b880402e3712ccb7fbabb3ff872d +5c3d92734c69345adfc38526a088dcdf9647e364ea7ad9f757c9d58cf0f58f9a +265a1f1a602fcea09c842569606dcf9890829b4394a84278fb18b018c319f482 +493e8dd6aa7f9abc8be45ad9faccfeea0d4b7d19ea8e14cefb0ce9d3f1fa19f3 +2253e438b902fa2523b2c5754db6bd6980735429d57a327b39884d0f82b8a84b +d33b3b60b4d8c5a6699bff1dc92d3a14765044917d6314b3e355a58e1542ceb3 +9f73cf14e47caf18acb20f94f660624129c78cf1267026fa6dc70a52405760d1 +f63c3422e8fd79265ecf5fe6f5d847b331b00ea4e2718968571f801928717501 +cb14a2082930cfdc776b4ff758dd1d1665ebbf785bec0431edbd89a3bec87887 +6d6774e4cbc6df6dc556fc7973f7c29f8ce009e510de7bceb6b624a5cd91b682 +3c35a64b8287002741cfa2ae1a9041ce089d1a8e3e6ae823456384256e25d52d +c93d3e62da8e61a5fa2f00e9dcf2ecd394c70abc3dd3d3de26918aa2041956cd +c2bbcc6ecc7cf9f53b14369a59f9c13b2513b3699b44eef167f763fb558c52ba +10c8ac0fae2783602a651fe5c69e67c8ba621147dba4c798a428850986c807ba +81965d6d84fbb229ffee69a948db34301b54b123757027cdb693b4055e97dde4 +36e3d6dc254523e8cc119b13ba130394aa540c05f640215c2b4928b6ba857e23 +c4e528792370757b9c806980d5ca8840f155d2f5761871bafae9597e407be80d +3de70b9244d17d8235f32158ff2421c6813273c67c5aaec7fca550f1e5f698e3 +177578662fa55f30c7f083d51bb0a35eb44b37f2a9f0d62383a8e9c31155117e +d8fecae9e14bb0770b938e1aba6a660065ff5ac2bc9535af3ad446a6f8722098 +4dbf2451c67c0d5a68b1ee03b3c23cca48a13098dff27d91cf619af265cc0c3a +009d1c8692426414da5a7190a3c6673d4f31aba726c98ea112dcdb607262ebea +72357c1017ccd89ae3d5e1f3f6c8d2c2cdd358ee3a6983b2e958b6d124719caa +1db57215cebd3f2243ecc5c318459e7c2ed09ebea145aee337cc7a1edbf6076c +42dfe2d72108e328bd6d8ffd8b925699a2226d796361ca031122fc69e46618ab +ef9c06c29f20eaac7b1710445607570cfad90beaf6e024f41e282b464cfcce2d +6f55b5617e555e4b534d072ed2b726dc2a62f76665171be382948bab3b69eeba +0f23320bf561201f9009a9082e532abf75609e731cc774399401d22e85b2b173 +888cfe2fd14a49294d8117cbe7a39d2ec1e62a1bbeeca5fe4698063eedef5f9b +542aa961289271fd38a1dc1e8ec8466ea871b223c93d8b7c41a20f23e286df04 +ef704005b300c6d1db2430b4f0cdc66e42d1bdd81ef54839ea7a9621a2220662 +3275b2ba663b0b2751726ad54749ec93843978d2b35f1b4d43c4270bf768b975 +8574d8143fce7d4d37cc854c0746b79a840ceac7069a13a42ed57c44f48f9833 +5d6a31b6008a9792ff7474dd7a72e196c573f1c4e68c5866d228a39606352e28 +8fff5277338abc5e1514e3ad3c5196c49f911c34e0f4ca4fe6e2a5f2aa880f54 +c5cd9af491f683f44a2430e88564b726d846f98da73baf01015b153ab005f35f +df36b5ddc792cd9ddfe7635dadab00d9d2182929505606219445494be00fbae3 +76675564f731d7e946ffefbbb7ceb6e061580602c0b26f74443842993a0ddbcc +e27630c2c7b9f34259ae35d10f2cad0175e71de4730e8eaa57613c24f77bd737 +7b3851bd5c0c1859c78c692b96a164f901ca5231d85c7408eba7c48e7e2324e3 +de9c5085d6fd8e6fb25900711542b2fe0183308b04c1a507d784012db8d0ad82 +de6bdd9775141bb5e193fc3f2cb4f44966037ac9bcec042174e5513507dadc73 +4bc375281e00a40fa0c0d6aaf51ae959a9d2631f49dea2bac6b42190107cf0d7 +4b448636482964efbfa533114d75634cadcef997fd1c0a87476a1f267ec9a49c +9f467919fdb2363d4324f68c5cc2ea0be24157cce3d0bb5d9d3b4d3e515aa304 +6f41d94ccda52d53c6b7f3c51175ebc927d18a53b06ea6dd60539434fb598445 +b779a22ae76a71593b4940f26a8668a4938bd09983ec45cbb723b1518e00f988 +80a2aa45f60afc389d52322a5a0e5ef9a9ffdb8b6fe1bf1d40edf2407cef4174 +358431db7a5f7620f8e064f6fc560d746446a5a7540b18d5b80e68412a167f61 +b0d3d0460e46a17b41c7e7c520e2d661409c99930a4536fbda89af27452034e5 +ea67c6dcee46f6e7bb66c37ae129696c55fbc9aa0546c4f9f07905a2a7a5e4c3 +8091091cedc745f47176084c7a05b0e074dd9e061fe2f399abe1d995a6e7d5be +ab5994dc522f7c95730326e365db18b363dc650e72f1e44775fb5a596d846991 +edee2486caa8e256aee1cc0b8f8820f407317da7b91cfe3aa6897e64fb73f87b +995c7e06c88ecab690f859d3acbbc8bde2b707479f4bbd4ad787e3b06abbec59 +753a82816d1b10ccddc8ac24f122734f6e6d22d742a78aa4cf7773d36ac217e0 +da057ac7615b56b2906c19973c70dd3d219b71829ad9fd191cf90a4fd17d0579 +29ba66d4d023dbffd204866400ed10e2a2565a6dd4b59141694a59f1ec9f27b2 +534bebce733441fb4842b27f4169d66c4fbd36fbad585aaba8b2d726be5570d7 +9b7c1457bd46836964b27e83c8340cdb730304df8349e4572b29357f912592d7 +46b1c6f57cc7eb07bbad71b5b510948ee177ae3a6a7ebabceb62fa2ca6390b75 +ce9d24518874ec8318bd77b03c87cd964491a26be262724402ca25d870decc61 +93acb42f11b0e58b2aa947b2d5303511fa5dbf7d38f8bc66aac0ae6aeb7386bd +35609b9d6939fde1c3b6e4108658a9c043a89204bf33a10113eeecdc8b244ae2 +5555bbd49b6da6967887781a57c02eeaa216109099072e0a86631bf795f52f54 +32303eae32925f3346d0b388cbd91942b5bbc0541e7a37ca15981ef1e061449e +c2e483ce508e28c0ef43069e6392869032ca6215e12523c65e8706da35c9563e +1af60ac552bcc306df77952b55bdcd89e0026b04354b6ebadfc56fd0e81e927d +ab382274c4bb618bc65e5ce1855eb55c2e05072e6fd44d239062007a8fe98fa7 +40481080c42fd29d8d3ec023f9dc3ee067d66d462b8d58bdd97938f885d2de4f +ca92da8d034451de04ad940948b93a78fb9d0a221dcb94294fa4f814a217ef5a +4a674f0cbed9572c2e9e6775c440968f08279a00e2796ef0fb8182ecb2a59d26 +9a20e54e9b8e833f6a2b43530d0d5475252cbf5adc8e67097d0a73cc47ff7e12 +bbcb568d97130d2d9f02c2d19fdd5671f46bcdb49dc16391620f313a68606638 +5e498a6f313b767d7618011857194357178af0c1734451f3c97509ca39751209 +61486de09f7e3cd30e3f6e9e941be46aa3afe9ffff47f2f873664cb3f50e4a20 +44d62ef0aafdf6dc560ccd5cefa78e965a57a6e39b3af00b05cbad681ea9d17e +320618138758da1248d2d9a1188463b78df4f08a93d8a3eb77c5845427434880 +ef2c7f1970123ca1ddd4fef14620f40b0675b8dd76aebea3b0354f5fe961a19f +b0b8f4b8bfcaad72f4ba440a96bb932de85d8daca71f56a7ecfaca5e83eff100 +5eff98ae7bb1ab536700e508f8af049ff1f1bdfd1c3e514693ce877720009ed3 +28cae2ab8fd475c9e05f9ef8ad8ae7bda51bee92744e872a161c01295aff155f +20350ff7cc65ae7b434ea596b606602889faa08581d023077469052e93c1da8e +2af618ce3de1bb9c281bf8f605e0f1691b8094fee310ff659e886effcda69ad5 +9d029e28fda7cad5a62e10c4f1476497329f8e6ab0f2be86d5c5dc5498055ecf +8523e72e27e3ec4a18e81fc2a1cf445214480193bf41c979d7317ba7743ddfb4 +2c423d7dd018316ad1176d00914d6fe55d1d754b0aa9685c4431d9befc7ce9a2 +d29ad5ef935b9fc284bc144f0f8bb4fdc97aa2c8edf93e74c7af19979baa5c49 +db732a7a70a44c82c31a47464c996a9f2f4386f89b5744f96eadc78944fc3550 +dd2047bede4a0d393b8dc6c0f8b802c9ac7f8d41a1a1c96ba98e98c59dfb26d9 +1bc94527448cc2510a27e820ad82dd5855ed36a114fc53f5a9d417285b42c8fc +bef9fdca26cb68e59eda8ae0d49e5fc6c1bf83919058900197e9736054e7df92 +9d419214d9b5f435255b44155a141f46b1db18b3d62a4abd609e9ca609d2bf8b +05954be9e9d9086989965432cfec72c604a3ab634bd4f7ee3a15c3b10c5e9b97 +5ce06e3f2c611fa56c0ee3916157c00bf96e3252bdc35ed99eb1d004f6b03618 +a5c0ed5a91bca97750d6dd7eec7e3ec2b38135317c367a924907654d8339cc62 +689da9e53b6bf0d4bb5a7b98bc91b61bc7164d0411a4ebf6dc17482708f87a59 +044ef127c406fd1bcea75a09e4e8d0505c4a9eac7dd6459385d9f694a21add43 +62ef5be73e3a6228a55ddc5952d31453d57ca3cfdc8a87a1cf96a740dfbac224 +e4e73d2608fa905a9425036aa142d19d1ec119104762efb66e7bc704e9932a8f +a2763e091a3dfafc1d7791b7f804bd44800b7c7ca608261fa9e385afb19d59c2 +e5d101b16a9e973bfeddb5b0199e42b50a0f8d6faa410c88a2ca8a7ae456c288 +0a802e74487a556190e45d915ee6339e3a3fc6c1da064a3a37decb48efe86371 +1527e8953435bcbec67a80a360830f4bf2bc5a664cb25b609b5aa3077be65a07 +d3c176276af7a57e82dcb7b0f0502e39a44e6710a9d9a1c34fad670b6cee738a +2163cab24cfe9350ccfa07f3641adc1d9b174256384a5b6358ae5eb0197a22da +53020bcb484d6d58c15d4b8db7fee62ae9cc8bce6537211f719607e04271e864 +3c08392893af7535758273f0fcf21eab3fc26987dc237366891df1f9f2e8a439 +f47976f72520cb7b384c56c8011494c7ed024a19a0b91309ece52376ea65febd +0b561d78683f382ac24c5f967925f6d53417774fd11f33dfea8e51dd91d516a3 +6baea10b5009ee0f223dc528e67f71efdfd415e42a5c9cd5b6579675c048860e +233d7fa50371bac14f99a13724407b3957a454422c122ee9ef54a7abeb65d6ed +5f266229f3e873c1a4d48b798171f8e9709660934e95ba313a7c56298f0206fc +b650880ddf3912a9bca45bdcafadcc084c5bb8ad24682971092d1517780a1913 +9006fabb2bac5eda1e631f0d96c4aa31be68f4d2521175f9d0f533c691367b11 +b67c8a63ac675995da3ba54b41b8fa60d8e9dbbbc445a6bcf50226a5474ed741 +60d006da46ae80545c7c987c3282d310c171e3cdd2c926cbd49d661737a5e0c6 +dccdf5f5d6103fff030674eba6cc99cb8b632b9c56976de398a4da6528da64e1 +6a14bd834bf33340ff42278cf375eb0135debd1862683d4d23a67c6274ab06a9 +26568b87525249496b54021f27e73390c815579d3458e082cc376727bb4870e5 +df945bb18eecc286e2378d95f44a511d75a475e1c871dcfa13e51ed52f858f14 +7a861b5971c499e4746090c9fd194c2142b050752579794e8ee3c8c26c2f80ef +ae9c10d7d49bd27cd08a12aec1e45b35fc068d5fd8bdda08470f125f4d2b0f0c +2773560b6e9fe2d633d51358849e58de17c8d451a6005accf4e91229c25c4baf +94ec1d1481d471c41c5db74975b752154a0400494e9286557a7fb3201a73b3fe +276d83ec355d36ebdd834222f6d372638c0be6905908d51013a191097a83f905 +ed1855ab82d878fff5b93bb893328b5a728cfe25341218ccbf4db35f15bb6941 +da20e81917f2a5ec3deb2d2a0f1d885677b825066881fe979d9a9e200a664f92 +4749d2944b76b933503d34c03351ffd08bbb311f515d781b01679eb4993c4a2d +c550e2ab0d147833227ef743f59d4b4fa8efa410287737684247d94b114a61b0 +d20550a41beda8aba71434cfbd940dcbc3f51de08de070569f010ebb0fc5a149 +e141b21797acbe7de44a2e9110f72b852c7709e090121b28b67b26c2d96dcebf +e63103bfb4662383a444047b71cce42a16e2b8995bd17950fc2fa3739e133178 +bd91b294a1a04384013ab2c17709bc5f669b6a14a89694131cb39442e56b5537 +b7573dc0c9b79180d53ad4dd81fd5ef54d666cb44dad251e51e4092b9d99e0e5 +ef0814bce7cf5063b3d932b64d6781b7effb6bb87dff02dd864885fe34b35160 +9002f4444d9f4ffaf0338dabdf43a02e79f1db4214c224650bc2c468b600f75b +b596c00b172afb8543d73ecdb50e94dc90bf269d0ede8da925d98eae64a38bfd +1811ef480810242e5b496fee44a91490ba5a1c1560ea36b772cab8a749e114ed +a29288453c2780ca7d911768f8c44d05941600318dab6579584eea2f3575b706 +ad36136e0c62a899afa390f90791e58a93c78242054a1430c2c870db02776162 +b438720665e62ba90d057ee0577a881c4343b2d1fe43dcc91036f3a9143b5222 +aee2781e322a9e2aefd5050c68d98e94effe9ea1b1efd3ca7708206324fafd13 +a4709dd8228f350a1d96805fcbd104757212fbc367e33a62cab790118ca431ef +dbef7d7737280f7283ee30d555c962ff8ce550c64cb84ed4b127756d328381c3 +ee650a62add434167ae8c524a2d5d3fba347506ba09780339fe8c13a57d941c5 +0ca87fdb230c52906eb009f55e6770e12de06dd8cbfc37a9d9cecafabddd8ae6 +c874ab1c7249a4415b4ed174274a4beb948362fa6e2f4c2e6f52ce50df0512c8 +39b2a1e12b7b60632cf696d7bc4da94283ee4a23914000df370e2b91c181c77b +a6560d6825496ea5644076796068132158773adca417fe6c01d39c791ad5b3f6 +d1200db2c7d5667077a1b35d0e9840fe991da03091b659bcd4fd5220bf4b4d80 +f35dda0dd9d8cfd7262e89182f8f8388e9e2e9855ded621ffd4d818b473e7967 +bc0bcd5d16398b97bc81bd03235086e53247ce1d11f991a303ce34382f7bdfe2 +89d27fee0fa357c8564cb25b04b96d2f0b97213bfe61334b8413d204f835321c +237a223f68c95e534834aa0e3bf5b3b53c800678a2732583a7dc3944dff627fa +b5c1561b9ad7e6edc487b256f9a5e0393066e337300013cc66be1445a6485b38 +62bd600925953f666af489aa11b50fcaa9a9c983693d7c676d88fe9b9d5aa3de +e1d4a415d80ac371e1cf5bf026443122b1094b29de97196ddf59d1ddacacd709 +92ca6ba312c45140412a1f4be6dea58e43793740fa934a9e6ef7af908b70d932 +b2b0f0e466a7a4452c9a26577381aa595b90ec8a1f81915b6d9a6dafae1fea14 +d53b45805b43e148cc66f06b31615fcf04175898046bff28f69b0b1abad5cd23 +06f583da300127c1094825f8b6c89a8673f6e3d9b43028aab7c8205b2d526dcc +f0ec16b96a91566003f23e3d58caa19201b32383acab669a954cfdd9a69ea2bb +9bc1da45ca469bae470fe8cd5389fa7b8f9b15b994711ddacfe7079313452b7d +3bc974490f5e502da1450e19fa46d3ff121cc664f2fd45063ef3e11ea22cad09 +0bbfaea516819419875a1ab7b18d166008c86739e48bb463f9ae735559de85b5 +d03fea34b716eee525c5648bf97e882816aa5c7a4080dac05e791cb9a88575e1 +9c8aa289ca1ba50f2b604a31b00a45229cc5ca22f321df6b2979ca5de6998a05 +d115393d4314dd1760fde49bc252904efc8f790b3d4016471228803fae62ac2f +a9198fe72298906daac912d77240e68a36e414c6c8a2064e6b50f2977085135a +8180ad674ae930399e4c61d9a69f05583cf72f97a2f68951a5bc92b80c2d88f3 +10ac7e923bd29b7137074f868a0ea178feb864f20cb5e5d2dae16e5c7cb2e287 +0b954e6b0b4741fb79039a13ff91c1a23035af7aa79d3e0715c99ac4502153db +08187d1e091d2d23e03ab3bf4055d9fc847befbae71345be32fd62ef06626287 +16b7d5639acd00c7c28f008265b31f902816ef8d49e3d99b74565650d5994c4d +f51c96284dee01c8953d0db55783757e0a8793e065703ec0960a8164c9dd794e +a86a978d25e07570128c91e19626fb8c28c8d401e34a24efccdaca46b1c91970 +fa1c6f1398c9e81f2bf75921b1a85ca1c83fd13962cfd9b45a44dc3465d40c42 +83171ef8f4bafb2e16d5024d1821d9c9aa92f3ab3da9d7056d9d3e715ebb7bfa +a5441ceb839ada044c05836843ed528cfffdb9c5c3a9f1d892362269aa75818f +866077ad65c855658674373ddc5f7fdf6cba8d746d05c385a1177986e3b38303 +d4b4e1a4e929d8cc39e43bf2e882bf8cba2547f7ba02d67c3c51cd8a55a0a72c +69c09c1ac9f2d832c3ec66cea9cfd7e29c3210e4a7b4ac6665fcea08b5ffce2b +4afcd4cf4815dd2108e7378f732c4c3853587ece16718cfe9b25eac0ddcb8b4e +14dd75896e8ca3f25b9e9c4e507e4f0cb4192c9ca4e7e2d70c92a4ef185cfa47 +c5c507033d02d4e878892e5a7d41c07c13e1bf474f9c9d23a750589929aca4b7 +86915875856becf4ca39894f3e0ebdb25b85c8077e4e79f22b4550d0f74e3843 +f82fdcdca67d1724b60d4d7b248bf42934a23838f015999e9032f8597cbf7c1b +a7e2f38155665d4814577b667680bc9495cf2acd9df0fe8aba63a8248caaaac7 +dd341dcfcd62c5296c8b3741dd3ddc37614093bd0239d84820ba9d12259bb2cf +fd90748d866ff5fb214556ce1d07d1cc97b3a77e9cbd9d3536f466632330b29a +b953254f814154a8cfb8f2e4735e2226db6d77c4d5c4927cfff636219ce57d26 +6a0555c5c4fa4062064052ea5eaf20fad1609d34e60abe846e2aa86ce05575e2 +b11b646206c31da3658c23e0f52c77c05dbdbdea8e25bce6abdd6ec9d01a714a +d2fc778ea7d30df1702b4f8ec5046402e1d032f5e705b4bee94a86e160f9372e +39225aaa4d188217d1dec3a85fb03791a6aacca11a753af1a08df6ad891d6834 +31688faa77f3e0865815288d5d21d90c33a551190c2476caf9aa61471c2917c0 +992ad2b2b63e4c8c611ba86d7c7d377f21391c2a0e0c11d9ef9bcf5df4a3026e +ba7773266e6492a5cfb9f5764ba1e9b7c728acee8393a7dd481582cf6b4ecd6e +b9d521ec9cf8367019d41a3f03528547a431cc18931d36fdfadd79e936feff95 +dc7b9b45456dd6a2ed9e0dca0be842b4a1e441b6facb26fd69c04074103d7e80 +180a03329007e28ae038cbfe46f3930f2dcf230000c540570da939652c8af801 +358f59afe271bb756994a1c19a6169461509cab55873682760c004ec6a0abe52 +dd4cfce4bc482bbf8f3762b690227b623395a83ca8953873a24777ea7973eead +a49012255ad10a1aee3cb8611fa1261233c09ee3281c3e547c258ba647dcbbbd +608c21a86e597b8a05bee6f7c17613dffda03fd10f779a70f53854c129a66d3c +625179f2e8b50582606ae7336da310a62d7428364a31225ec0df080f5202a82b +3fd738632009fc1bcf8c774f88df971d777f6f4bba6ac01a6c2be2cf52936930 +be2de0e1bb19a8419367cfd81558b491d730d0b2e8e51e52457c952e9de4e9e5 +755d262ecbc62c590160fa6c32cf903cdb5220a9073c66d53485e4c3599618e7 +17febb789189a2cce3d020489db0042d73243e08afdb625f0d054498c72b7896 +f00f9b8c2b3179b5b832f7cf38edd1d8ff28f348d69992b76f1df159ce510486 +22913985d8a6432ceb740cf5282ef1952c808c95ebf0942bf106e83a8e1625ad +eea2aab8a585e32484af6aa2419167ff0cfc9504d2721b952e8530c315758f86 +62c65fb415243371f986212628d749fcec44dbedf5218ba44402335d0cebb372 +eebb888614bde39c84e9df477f050842f4526cad97659c32b71124f80f3d07d7 +399d9ba88993d2e9798e4b7257f37b83a21f278c1e7a5c5ff788f735713d52c1 +8cdf324af7cf97c314ca174ed627c4868a467115d9796cc6c8ec5940f33f05c5 +f1e6c9696555f81e783d752d1d63d287f215ca60e7e41acacdbba4c05430f945 +c26de66254a395c60ddbd5e442b9372a87c14371f9d584f5fe69f7981b8559ad +74f97de9678da92ca6b4537510a2d1f49361a8995df0e4aaf814478907cd87c0 +c14c1339527f5193362879391c4e57622853aebfde4d85b2ef8f0a88bbba7c4b +54ac50cf5d43db4617fa5f55db5242b6cbd6be8d83b6698c7173e6f3d1508a5e +8ba2d5a0062bf3f2fa8ea28b93a37beb20c49c298298ad7918200a1d53fc9646 +5498da0d017cec20240135949070aa607bddf0826cb0db04f70466dd2d038d18 +c32fbf98cdf5e945c353155892f7e214c12e3df283122617e3fd9f21e8a31d14 +7172c3f5758affd8a99dc83e50a5ec72ba89a9aa10e3df45e98111d133ff6150 +1ed9cfeb730366b38deb0b872dd0591d1b6bda702929f3e1bb5defde2aeff4a8 +1bd03490296a554d39d368a2105bf4989af4fbbbe4b3671db45e852104e1bfb3 +f5eacafd269abee60d512f9fb1088ddc41139eda953c508f73e3f35e6121e939 +2865fa5bc10e2e85b50af08d8921dfc38006c65c7ae4eab886b01edeee765f6e +8043e24697f7da6e6d4c31f251d254e5478f393aab415ab050221dc0813dc931 +12aeedf952f3f809b6e2edc63398a50b0a9167fe94857c218fbc6ed5f99942a1 +33676d0774077a3e3e4590f5a2fc54dd92f1a16a129fac698b2f4c4106e5eb6b +f91809d7c340bbe2147ec7ae51c1b7eed38063a04390d4d115981f1f310d0968 +f1bac54be8453b95dc0fcc1df524d21a53aa86b1dafa18ff45c220bd4b635c8d +5686c9f186f32a61343e4a660688650bb3724e4da92984e39b8a61e580044ce3 +5e21bf1576f5c5bffaeeb044dfe9197096e2cb207d69a72a3cb572814dfde518 +bc7981a16bcc88f94528e51b0f224766914e155a3bd8e0e5f7855217ffd0f419 +89819e63c3e6e600b7893ddbb0c469a8c06301bec3728a0092e898bae2e171cb +0367513f08144fc4ec485fb5568826e9a40be341060bc2b7e83112d74982fed6 +40d4d39b9be6643473d2ee30e29205d8d26681af495f18eba2955eba339eb441 +365ceb539a4e208061ccb52a3d5b34ff9f9da15e0e55a21b15a999cb2553d37d +3e7311a81ecd6892f1c62538eff1ac6a0e19b59611b800f820b91165892bef3a +c7a7fb0115032d8b352d1c5429246d9fbb67e12357237995af582f0aa4b8b663 +a1a70bf3d17784437035aaa5a6c269d230e6c0725a10bd16f1cc3a09186eb0d0 +f4db0066de0093f575102cfede1bf38e1c576f85081c001e20f792150d38dec9 +aada81703ae37db0799c2f38bf36b4acb6eaa683cc8beecda7b07ac5096a930d +627ccb06a74c7d36b6c3f6a036210eb5251d19f6b633e9488a95e565777c51bc +7813f766a087571333945270a1d3b1d01521fe8756ca1770112c40e8326653b9 +1db7fa132cbeb93d23815a59ad1a6802a363bffcc13e83a5847d498a8a8af882 +91b5c25e954f3f6e78493df7b97481d3c84ff717bb66bfe0c0a6fd7175bed997 +8dca989d9a560aeb3345178423b8b047e62167fa8baf0ac527e0896e58997257 +6a2781bb8f2893065e7cf65746773fdde51fef49fd320ceaf471bc10029447ee +9b6c6df311b7b92c4cea8f5d52cc1fb70788a6417ae69586b194a79eefb37bca +41fda969ba3bcbe63e789630e9750c673682726def7032e594389fb944aaad91 +21eb6e6d02d9b6b25ef70269ffa7ffba5e7712e1e69c5463c59ab03db1399200 +849485a6e28ae4b4fb2472b0ee19370f40ada407ce3b8bae0fb1939e8c73b04d +cb93dfa1d732d98ed6739f909b2bbb5b114ca3dd8d7f2e09d82086f6ff8c0084 +77f482ddc354fe2c57c0a8475e34ef14b50d90a6a63d7b84f120e889760bada9 +b1bca274b3d495311190b4c62a14c748df28fad7df5ee257487c147f520a5e41 +f46aa44b231691adfb2b902780b562528ad7a48acc9cd85ec632fd1461a8bcc3 +a42da2f3076e356a1d48d1b5d56644f55557334a7006aa9825586fef28d06d70 +15a568e553f94aa764e855dc774cb61b18cbbc7c295e82326fe04ff3d7dd3447 +291a669c35432a8e9e72c84a3f4b598783ae09829e5053f0853392a7deeee5dd +89805dd1fec5a2fd0ea3e090c47a981cc50a6f2836cbcb4178cc109f70d4df57 +72d1cee9378f676eba9356a064e5e55b80403e2f1952ef32dd38b3d4211e8b1b +b91e3c78be6ca01cead8f2b23acfc30e7daab3da1f3ea4bdf05666529b8ca25c +b8c415c351ef6714c9943ce609726f98d09dcbd055760772c2777b574f2e9af9 +104f80213e88f6dd04d78411e5b51024287197323c7a12bb21d38c9eb65e49b1 +0efd78c041adb385b3b0ffc3c7416cd06c146d7486da9759b3d5f55658828443 +8beac53177c2e794c73e080404ec847026b09d307893c10f0f049218e9cc9853 +d5a0be5ea18bb24086360b2ea1ed7c807dc9d21f6b9f59b30d773c71d19726c7 +f4c01048743d4c23d27e8e94df2bc1d2d1e0c2c05b9ad9d75b52fc94c04028f9 +9d7412bbe74cf7bf6e23fb0225868851e23efe42b50ed3be3fcfb0afdee2b8d0 +0a49f2b2d26c57262974a9edd7c573614d3b8c2c033507caeaf1b8f050b0dc5b +9bbb70156b74aac7af75e8310c85ee1ed6b0522bcab249cf3af435d75e5f319e +55774109337b4b29270c23422b394447f3a1f2804d66c47e1d6aeb51b720a7f7 +bf8b913098bf41d9c70883f3a77b1686564f35b71c31007e8e41ac927af2e523 +ceebbd6d8bf7cb23cad7d1dc6ae9f182d09bf3a4f718924b29e444e2818aa865 +71045c403f7c0bfe9759aa783f6f891072867c7ee6624351e981364d2a5a9b39 +0352bab48f5f324c40bf7276a32f4c33619cf578c0ba41c725cc5ff99b862ed2 +ead016ea8728863003abcb8ba36379301af4a3d3332115cfb40fa43ef58bbfca +76722bd7d266873e04b1f124278272a99865a4de795887acc04d992396f1987d +ec8f5229c88780425ce68ce178bc5581faeeb6f80f3dac7ce18be700bc0b7f99 +6e59d9d5284b3bcebbe70c3ce20c0c4bbb89dd644a1a16ec438d72b063cf7baf +8d4513e4dcb2851dd778a6d9bb9c2cf0819878999aad6603bfac80f1a328779a +46417273a522a8e71fb9a3eaf02a415de70f984f4d85870481368fa614fdb0fe +cbd088b1d5e745e0564633ad16bc61d275b1ef2ebdc80b7e2bd351472c3ce590 +959bff9f22352774b9ea7aba9731cecaeb87a7b538abaeb9bbb8a76b6453c77c +879d053b9ea4130ee31ca7af864caf2dfee73e672888765fdede29f1bc00ce9c +6f2980d10b174e7c1e7de9999f011ba315f9a48c9cce435a178406f3e34f4cfe +7b4dd68ff5d8a015cda9ace7c989d3431f6b493bea77de3a3979ba4a43054d00 +d820aa7de68e19e7b5ad0a634478a75c2f3f3c38aee4293f82590105eaacbc9b +d9505315abb9e0f62d0d1f8b49dd7804f2227da5ca6e7db1831088a9b348a637 +5bca7b8ca23af736e4830fc9c4517f6f6d9166d87745e764e630d3acf82beb85 +86a6393a769a3a9816d683e3471bb32a366c95f049df9e32a6300f99b7d9bd2e +944c16b080bc5d4955dddd588cb273ce0227cfe977505f5d86229b2cc8d45266 +f0993f4b951b04201e4cbd4c5815ee31b0fdd034b0881d75b9c2f5788c248e51 +7e4aa08c08abf5eb8028864ef2d4edd7a40837d2361b2a93f1b960f7fc9c5364 +f935ede1765df49f665e5db0aecc8cd0209e377bdc63b74750c9156f59673390 +8981d8ff1af32256babaab427311a0b8604eca2ffdccdd9c85156b5368e0e2af +fe80737eee65d8dfd488b464bb60fc58fff33da09f341edf1e80dae6478330e5 +119001c8d89ef250b279d3a1b4c601624532cc125865cce02cb052d0afe1f990 +4a7f2a154355390e7cf07f1cb714ebe3b8c229c266f96c48e3438aba6c64bd11 +0a549fe9faf2c4f0c0d1c649d28959207a2060fa7ffdb3a3fbca8fe24687489a +91bb63034115aa80d55c31621397d455c03c7028b94b66e0ee1d459d6a0579da +ffe75a8e180834ba364a5c719647b8a27429468b055558397c6d7fb0cc9ff70c +c4ebddaf9df4d228d1cafc76dce8d058ca16f91ff9a7984f37b02dad7405d7c3 +be23d3e612762881fe2bed38929dadf870b33c851bf234b2e491f22380266358 +36b940ce2585d8a4e76c96ebcda0fa7e2d9bb61d3138c57c1609cb3e6b9e2a10 +aca854cc88576012bcf943ae815b02ffebe50367577cd3c01e0f3b197f1e7990 +b3910acb155dddedc73b6b97189c9b2000e77dfc96fa99410d0743236927bbf5 +f312974f65eb0adc2e7ec1639b5928c046708933ea5c3b9ab2ea673fc6db6870 +511426cf32bbe7458117ec14bf8d43525921d68612bb2b28a3093c38de8ffdc2 +48474b58e1aa01074008f66611cbd4aa5aec655d9f8246e04ce7674555be0e1c +055e8b704bd021dc022ad0d3efec6a98e87c321e633707b9a798dd76f25cc69e +75fc660f2017cf5cccb1fb37cf32c247ed0c91eef9e1bd16f1a766439f01864c +d8fca033316a48316f3a6c0cff11c1fafa28f4d3bb8d9955c9c5d0df8b5cb010 +d7e0cc12b4f3a7ca11910c491f212d461e4e894e7298d55481cd41119044872c +ad76bf56d86d045e38ae8be8c62db7d86b1590c7aad39eb93256095bdd278512 +9fff8a6c06d2572eee000c3bdd15d35d37325ba9b426d9abccab594b9e3a9bfa +8363308f724b7c0e4fcf5200a87c899f0aa1d1d5310b5701516fee97d08d1b43 +0d60172cad60e7ec9bc54bc4d368d79f0e2ab718756aa5ab7430132749b21766 +5380830a514f38ccdf1c2d7a1673d29ddb37d95fa0aa2638b4d471b1b7474c1b +eab86e87f7558cdc9ac6719103dd021cce6a9849bb4a06b360e93a229be7da41 +604630cc1522db3f56d40c904321f8ab85497d146cdf8a200264bfdc5a003cbf +86dc6b0b73c0150e7eddf523e0dc4df07b93154a0df9b68bfeae38d549b16c07 +717757d52e5be3287b6128649f3061ab66dc88768feec499256fda2ffe6b22e8 +b34ad2d1b841292761f27ca3fa61af255e531f2ad12ea36fe928e33a757fca1d +b38f5819a92f6980235388c7acdc8f1eb872c16153baacb9bdb483d8a6c9e6d9 +72cbf0cc89e4ac2900e7f24a3dfd860357d88ff51eb4b41ff717591b903afd8e +0ec2dc0c3af6a61fbc07a6b26a3679ed3670f34338d0ad933fcb44e477d90f24 +6b5c9aa2270810a51b7e82faba00f7ee5711a03e6617ef82127f07b2052b5f9c +1502aee112001fd0c0ae6c2e4724a7ad1761ff14457ac9b4102e035f6684656d +9e5de7c815b685e932c9b825d92992dc494d3815a9f2e63079a06f642ae85e8a +797c34c1662520d5dc2fa563115b445a437e232bf3192f188e70dfaa3a081853 +3c6e17994ff85e50c41254f37581ca82add0d33bf71fe110a97320f4d6ac49de +50690e88cb1e9cabc424417de4def7fa3fad116a3004a5b07af957872ed21fd7 +9676fadd554d2c97db75fbe57cebf29f91dd5aeaee8f9f15df7383f3cb8ca918 +24c5be41d9a782829a377e5fa8f86baa8e42e01105684053b9ab400f91cca869 +b55c65103be1a0f0e6f6c2f614a9fe2f529c994815a1e67180e649f468abf14b +8a131c72081d4f894485694a176ff04ae288fd9115c6c80208a255dddf01e6cf +9807ed10925a45197dddac3aaa72084ce23c30147a2a2e94590a5223f1db742a +78c500cd1ddc98d5c92d879059bd9db2d775f99f0a1427c98b3f0e8f7e47af0e +ad944f57b568a165095b47a4b0de8e1eb36faa0c06049861ccbf6448c9e56128 +a4fa618aa9984751220701dbc5f82e9766f8e0d60f8722619b3ce8bde8fa0a7b +174a0f99ee7a0553ce4105019fa9927d835e13dbaa8c893633456f6cb275db8f +c7c7750ec49acde7ebece64d1039ee7556e2112a76423bf4a6cb560948456dac +ece4aa93328c7559e11724deae262450a2f6a70ab95953bdc5c8e36a30511c2f +64fda4d28541b548fa3da2aaa2f548626a630b69ce6a679c09cdf898cf392b12 +bb83a925ba248c942014a440c624de93fdecf4f8fee13467b054fe1d242a9ce1 +cb68a67d40ac6260adda26105d44d223b9561fdd357cb2f0fcde3e8f4b92c6db +8f478ddffd7a55e7aaa5d6d272cdab81cbe630cf2446cdd3768053068fbbd469 +0766b521d5ae3164259057e95357c83599d83d072521722318dab73720eb76c1 +dd34f61d360f13b2895b799a37a60b9931753a0fdd7596e89768296c5f5625d6 +16d78c6495f76af0d215d165d08532fc49047442ebc2e6394ef201e591f6339e +e0f608ec9761b70fa104b8d5baa1b1b226328d210dec326d0541f0e55fd72c4b +61ecf20a8d448a02a6c65bbe7fbba84386ab4380f6f23705fbc37cf2b937a67b +1d495cb68c82614bf070fdc49610252fd648985d7f3fec07a47cb03498e619cb +57d7058b53df011d53b7e31c5818628f88edba0374768ba4981ae35ff711126d +149db30ef90dbfc2588a2c0e05d4bf5a4ffe6e3fadbed3ad7aff003182a41034 +85f0d87518aac7792400ab1854e1c4b4c224ed755767569918a2dee3c8626c27 +ccc2ab993e173383220347441c387d1a9152206f79fe84b4c4589e447c547b65 +df6c758503057d938ef26c0eb781c226092b6439e15318899a630bedc6b2d153 +5ccf41da18fe934dd8afef310f759ddeaf7c55e8c152a46640f81b9d414037a6 +b0cede31cb2ad4d94779033f9268db5af6f5f626e134df2e9df60a54f8ca14cf +d4976ddafc466b68a070f32b23fa0d2c72f00f1a6620cf8f22ea687845504a5d +7580857cd7916b1aabcb16c18c658b023be463aa9aaffe4135eabd3ed59999b2 +44b629d82c685827e82fc625f49310dd321d1aa44ee1d24e68219005cff53acf +3846b7d87e9dfd1dc05cc5dc2ae755b616d98b9ee5550c5b9fea9ca7a3e241da +d613297788ece392e33c43cb4dcfa351703abc54fefa18c5c6dee5abf56f7623 +06a660e804cca4d753976946046ef29a47b44dd2fb553808a9e21d3ab4660160 +ec3e63b12df38ee83d5c7bcefc193cfae7209efc89e907ea43743528510da42f +8747135ea2f05b01bab87d40ec0cce624b1f682f2814e53098ce0ff73967c96e +03d3e8d48d9faf6a9249880fc568bb40fbaf82ad064a5150e375164d4e9590bb +8c8a3cc0743bd366b24f6aa2c2025245a6c2905f33fb7207fa64a20456719f6e +53034f66f8be4d18e86251092f86c83781fbb012bc02a55dc9bea7bbad715849 +1ac83f8e611fe99136c621e9b0953182f8f5a216cbd541282cc96b6ea4e69e8b +76aa9bb42c28e171c347ac808b3b9165ed28fdc617800f7c4bdaf3ebc497b577 +7e4f09569b2e3dd19b0547fcc46acc7f5caa362e3b6010daad0eaf559750d9b5 +50f85def98267345b04eedd05b19e8c5759b15371a3a2810ac92a0bac884889f +a0d86f1f38410911fb83177f3a58ef2225433f9d5fc48d70b429320f7d03516a +3be0a23e9e01aa8dd444995455f4e3ceae4bcff44f398e4ee1e1e694871ef2de +5b7384eecadb7b62257f6f363510dbdffe1545d311a10a99256e5afe1b5f4696 +3ec685f6575a4ed1e8cebb263fa6f0896b3740215a71ddfc01625a948f1fb358 +4af4a598a9a241a788e0b7eb2a8e396f536bcf53d0f95f986acc6a9df7ca604c +6c1337c849134655ccf44a0dce3bb31229146bd1b1282e69faae0ea6a2f3127d +b2190f4b05c10144650cce31cfa3794ff272cfada118196aecce767c893007a6 +f54f5be1299b6be348eb9fd393dec569f8507679fedd5166ce897191ddf5025f +8736bd3d298b70478c87831094174c8bcb684b7b8bacffeef7d820f4d684bf02 +8ec12233481231d9ec66d0b13b75890233c345ce858993055672bbfe748070da +a18c924c7128278110e125a5a385f98aaf2f7f6c221da430b0b987859f11f332 +0efbb88041b7d5df689a826dceeef24402c63dbd605de67c40530b48b1ad7431 +46146ce529cc1e9296aab331019dd1f7292a9987c71dc82939843adb3e610f49 +f83f6abe745115eac1c23a8ff7fef562080983951c46c980362fae7dc53d17b5 +e84ce709f796fbfa1629304cfdbd76f5e4b1a9f2bd7ea8d41d8ae4e0b59b1eb2 +b564d15c9d180dc5598b6be86cc47e7374e6af0093505af15748d6e1f737e5a9 +af9fbb6023aa648c9aae5be72869b258e22005c5b525978e58f159e8d3382e2c +e8b56fcfbd383dfd759a8f02a85eb38f292659f5a8718e5d4c22d2dcb3bc3e4f +df858ee6818bf96c91e12ecce553fc4aad6e5675fbc2feb8e3cfcb220283aca5 +4374a163e5a56ba61a5e9100f31a55b71de9fba010a1f5bd5b1072e1c0b0bbe9 +8479ae79ac9a3fa4745dc52ac815a7281bc6ca73dcab24e2e29d87b1270fbf2d +42abcf064dba75bd736d1dec657574032501a8c4631454714fa4cae894effb41 +9881b49a6ad5605d1bd6246551bb6fb08b60f57fa343a0ec65f6ec2efb224b5a +bd3791b371e4a434a6ad33d224aaf0526ef3b2b1776872afb40899e0e6c282ea +c8cb89ef30a9a756b4d86b501f76bc20f5cc940ae8d6d6fc6d171defe61dd23a +bd7139915002ff285477f5149f02d50e65349e40ed9c41bd3bb495ab60147642 +345f8e3e5d572eeb6888a986dcad9c3b2bffbf9a5cc903be56b6ee566aeb7792 +9f7ba727c47542afe5f7c4af62c7fe745e3e34112d21d87775292a3af4bb0130 +8286c1fb0e4d2e262ab6373715d627a70ba99a9177ad87b281a0fb516e7d60d7 +c5c1389eb9258a5c0390673be7022bc03ca20be85c97c25a8e238aae078b5329 +4af065f11422ba662e9908b3eaa1afdf272297920d3c0b0b1c1c298fe4a9b9a9 +1f20a411b6423406679fbd1b8b7fec8b28014aa9d5fa51078ab0f4664fd206ee +57fb3cd63d839012815925bdbeb08fa72f687d0bfa51ebd7792f98d5f40c2b4f +07259411e8b366bb51ff0efc3698634b4c7ff516f7d57563d4add850fc0d7732 +cf10acb7c5931c60e0a044afb61a9e1a898e2b543b170eed46acbf6cdf4341cf +6d24479fd7bfd7e5fd36573d0c2e3a8e0ea5d1bc44baee3f46f768bd8965c06a +6a8ac7c9473ea8398a7de053c8ecefd246256ca53fdc6de3865f76c24c516389 +55c95f0d753e32b09a7cd9971e75aaecd28a3065199603615444f00fc2d8a66e +34a1c054bf054971949c5976373620a3f50b43b480b4fe63abc158860f583ee8 +95e85215a978f8e34be45ff8e98d831e452344ce36d487840905ae45e28d7c5b +999274b36145a37614d80598be055b8eea7add4b4291d1160a0bb193028b96c5 +8bbf4425ca6b2948a3f464272d079e8790500d1b682e10b00e85985395574814 +1b416dd227a281b0c4efefaa00c62645fccfbe956ac8b721f88fa95a0ffdb37a +efdd93f29a78113360c31ce76571d115ffeefdcaa7239ac609718f2dbffbd776 +0058cf03fea70b6cbc2f42ee949afa75340a497545cf438833edbd95950187f1 +d9c1cd4e4772030c3155d67eadd3cf779c0a8139a1364d8dc36738818cd2cf85 +f16203ed2ea9246505a11f23536052574772b07598d54310e47aa92710d94d59 +9500db0a0745951481000a7c9c994789392f87eb46e60b33a0ba6e32168e6111 +bcaf032f5fa5d6c0c64f7681b372145a7ae3d12512cc8cd432118a50d8138de9 +15426690715ba4371046f568586997468f103bc3635af54a8d373dc01a7998e8 +c3b0f0bdb2b609f21b61ad8ed23794af6ea5715fb3a1fd24d0d7f7014a17d07d +6973e8ebb9c6e797deb8507d8190046582c3a51194b90d8e370108e10c09748e +e192d6a21134e4d4300f9f6bb200acea935c93548af0a8629bb5c31c47ce35f3 +cf270415b195caae79ff1d99ffb27435ef8c5f7a17eed6bbf92e3a484e4fc983 +6515a0ca7781bd560fcf2a87ed7c1f448bc4d88de190cd3879693cce010a4dcb +8dd3650a12e17810650ef8fe482141b96e3f539d4619dfc6c034e62b0d93f73e +000ce2ce899386f33e230cd9d89047b05a2fea1c2a1b0154f2d9f6cc9a180ac7 +6f0facaf1ed65a3914ae6b38e93da9c5deeb623cadf86e86cdabf326dc377aac +4b550b05787eddbe406f68915eafd9526c765271f89b9ffe12017dcbec80e969 +34f08c03699386a4638b685caa69bb2cc2bccc3f677b40e498401f4b75e05291 +668f04dfb1fccc94bcbe8252e53d434969bc680f53b61643cd4730b28df95646 +dcf0197fffaf8d763a006bcaf406b9f969bf28d61a7576b7dde32e950f87bb42 +0dcd53070c44224d32b81f1ea7b00f89aa6e15135a3b22090b313ec5b53e9a2a +b049cd9005f9d497959eae0a8ae246eca1a579fe7b09148aaf1188fc19d4f9ac +60788828027a1a171dc6b1ec2235c165c723d57b054f3d89c913d22983bbec10 +61b514695b41a7e63fde1e93c2ac9010f3e3ca69b540aeed9f5829bdf017d8f1 +54a1283420f001fa59ea6ea2433654c815b48e9c75cb11e7022cd0872278549c +3372f7bcc1c5a379ff45829c628dc687b9e053e636e7f0f0ffd45971a319d672 +0094111afc2c94fb58026cf7b98abb8e2deca55e639cdcfaf8470533fcf89761 +2d9d341d21a430cab3296292c2c438b005fd0527d06beb35142af8fa5afa62a8 +a2cc451a3167e706b7b672ae96eef681ca529f4674b0e8774a1fd19e4ef16174 +b6dbe7c1edb7b1d94db60ebb7b277900dea15f1e73a697fdef3bc1fc6a9389e4 +83ccb0679e601166834d06c613874e459c803cca7d4112776fc8d5096a33ea36 +f907c5a68f4cc6ee955bfa1658ed9fbe6b259a4b9b1341488268c582701f7913 +28a15d7cf5a733ac3f1623e7baf3333abd9fc59c783eaf06f5f413976d63d3ff +e0ed4f77bb8d6fe26822f5293df9cf288f8f5ea31bc50ed1c1017b4f0d2db1fe +1502ff1e3f1d1b5f73b913b6d32113fcfc8b59dc3eb51e1e5aac0bd10c11f0da +ea731c6132899474d29312ae56f27a1a6c5a1c39d255c0c5b678723eb425c9fb +e092f581b370c7aa019ac3dd7025b843ee8a5917ecc0a7db5c7e2dd7bed5b202 +d3306daf68b0ae7b6b8ae3bb20199fcea7bd83f0b0a656af6cc34bc9761be3e1 +628fbcfad0b06093c62ecb97993eb5b69ee7bff4df19d26c53d359f9b31b3029 +df38660314a01847b06b718c26aef09f4adbfc0282143d1cb6f5a19c8ca8593f +9ad45ddb9870873158f4700152d62eb4bff98b1f2ba2c34fc906d90d7d36acb0 +89e43220400549aa7da9ac75c5c44481e2e78c043d673d0e814bf3963d9b8504 +16da9c112946ae5ab6098cde486b1bda82788631ead0c4f18f24c53d9e55c07a +bb8e58e49bf3f51c01148fdba88f99b4e6234e8cf1d5632a532f6f4b41b6ea7b +20ef1b6b32c196bcbfdc4b4c5b2be252b61f3962eb9662662b459e272fcbf87d +fefbdba3da52dbb9afed6417da6974cfb0546ac052716d23b845d9568d1b5b7d +74cf1f167d5bf5b9a589ca8ff0c924da9e5be145a80301195a6ffd4fd0317e62 +332ce6b8c411b193096d7cd167366fc6c33e03b59b7a38d13082ba82f8de6c77 +0eb41d52f88afac8399b7c6bb7a232100c8f7ae785ead2003cff0f35c5b25261 +f6fa6d700847d9bbc7703d8e4bdd52e76be395354a4c2612e64965222ec12c7d +98053f17f70670f25e508fabf2f4cee376482cf288d259d1c6a3892f2f173fcc +68e49d71d008cde165205a8cab573ccefab87e4bb6872a235c3a676e8e44f716 +bbf17d6217ea1e866570a2a03d5b605ba0e1970421eeba6307864eab2fc515b4 +cd2fbcdbe12f42b8ef7f7688fcc97be3e7f2b177c71b050a7494049b63e2041b +197487fea7a3eb27ba7c489f94de14e8e34ad56f7c3b2c73f46a3e438005be9e +bba499780bf51e4b137a1dba4e9a092b3e29abd8d015e85fc6ccc00abf22cd01 +1fdbe437c59dfe92c4886f750d401df37994c09e82de0476f464f7efe1c678eb +cfdbed68e7fac1feb39b9882bd81c8065002af508497e025e63e698fe47f636d +22df9abe863b993a343a033a6d94291445553d62d0c87259872feffd473682ea +5b29577977c9947c89db2b814ae6eeeef245169adf1a678980938df631913390 +2d1aabc1abacdf3c3f719d1b298d6c4de5c1350d22fb39cddb21186995b8a87e +9ae38144adca05e55a5b6ccb96c38b3bf8882f0dd7bdc57bf2fce46446602da2 +76bd14bc3cfc1c35bf914f1935d0d0833f268bc3afa46eac1458b59b6483c677 +77eb03ec8a63a5ffe3a22286f775a7b6ffea15279b816adba2291372c13e351a +018faa603f3f3ee83c5461ec997ce4b25a10afe11619ed50869239ed6557e2a9 +fe6772cabbfeabaff2438d381329a8b04588001883e6d873f3be6086e5fa7271 +7e89ce72af0cb1d3604d475fb367546bed87befbcb8a9c6d292d78413b1a8146 +e27aad101c88b19e1c644b9df11b6108938fae938dcdd430618e8e0243434383 +6721b293bcf5984346049c19108b51b9cccce688ed039e24ad5bfae4e0b6d701 +29cba1632c797df1d63e6c9374c816c6bad1a152bf99769e77b2a60b19ba85e9 +d91ba302f125840f88a6f5ec3cbb761a97c79182060c3c61d9b0a4dd3578236d +911694dd5652a55bf525a993e106ed6f5589e0a90eb43dd8fe91f76328af5bb9 +f4cf934ae153a7d1026e0b9c871fce0e88278fd25ce7ff8e5d9f4ef677c9f125 +c4ceab7875467598cd6647f83bd631a95d061263deba4c03997473aeb77f788b +9813227126b0e2dfa4db6d6676d56aafa7fd16e07506557d12474cf73a4fc4f1 +059268c1c69254f435afc8730cec1026a5c3775e2e43c68d495df9cf4322442d +c26ce5aec8356fa5332e7e3c71ee67061631f7dbcdc61d16c3d8850989323163 +e96f1cd8db8add2a4d7690171d02e9239eab7d4a67821f9eaf7b63fe91bcf392 +4f259f42ed19d47390ad7ff3b8bdfa99e62a6ecce482ddd103fa2daf86d70ca7 +bcaa14b83ea81de791a5d32ae99268127edea5e0629c6d53ade8f10bb7fede77 +5ce415a80ab883e81f676924f6b13fa41ce29ba1da741f4ec00b5edbed7398a2 +6139bc6a34084f6ff65fb62b31c43b93e2c8c5eb0582c3c3cd542bfd903ab719 +6b738f7c3d2833a293050710404c5993c72ed918add3eadfe13f35b772402f6c +3877896b842b56bd283b277d5dc20dd176be2c5db87a73a2f13941a67721bb1c +1278c8d6d8c27fdbda055e95420085a3c0c81f5334c537c3c5fb2106ded393f2 +b6d72039c7568a75b4d17f7e4f583fb3763c4703fbaa4164da6f3b6d10d0f7bb +51328474b09cf2c8ddbedb10b38294b18421503978e82d3c937b85bdceda8bfc +467a0a9074b82ec125d91c53c9d22217cc81bc1f9045db15e2e0c975c9e86dc6 +a6939b2ded0905296db1b66ed70eb048e1659c2bec5b45deb52eacc7fdea16d9 +5bdc7d6f82b0475a5d86673e10d3e13a26eeecf7b6a18eb0872df54052efe3aa +1796bce534d4ed4d2fd37b4b02efede823416ea41454a29248fff676d15b5966 +398a52e98524e26c4dcd4fb5003bd63b775b10fe90f42e6c9084d0fbdb1766af +328d61347c48db49cfc604d6bcf421a65a9fe3858aa2690c1ae3b9f6fd2d641c +85a8d479ef862bbc151505e4ea76befa8509c85c0a67bf9c692dc4dee37e9e65 +f60e796ef0cdf7f8e7074e58d731f71b245e73a557d05bd513ccbe8461dcf40b +3beeb6097d636c9b4acfa2e88688facd26f631c11116460c7030ee1a3dd3563a +bf6c8248c630c9ee58d0a34099d2e210698b3a26e1ad4c95249968f7006fd285 +4a425cdf22d4c1861daedfe30f072921fcb6f5ee099102edc085cdb2284888d5 +d71e5021fa0387886ee815e3a958c5d43ee9fcee36e0b571a1f102e7d68c1ca1 +675c2a12575191924b6e6a117014c003d29c7c3c1b0498278cc69249a4c8ae5e +7291432448b34f883fae585cbf3a83dabfd524e1775d26e0c92fb368078fa218 +a2334667896ec1e5b186b68899fe941ab345045c33e1fea470da1e9f616ac04e +93cb6026e4ab0214a8f478dcdb654624c40c2f36bfe2f104dd0a3032f9f182e5 +a0e2d0b3db00dad1091652a3f82ad5cdaad2e84656ac49bef7fcd5b812f853ae +16cadf6a17b1773db1baad9a4806b1c509bd2a921c759858e8f11a704ebbfae3 +605a3b9f5a6ed93d45bae98366ee6eed2ed45fee81fb79c738cb2833f5d18334 +dcc44bd03b3057d8fd32543597171942bd5a918011e1cefb7cdb9c170410fcf2 +6d5e09b99b331ba3ef026067f604a80d5f38051de9dd0d3bd090f6916890da14 +bccbb700b39920d66f6867dc9e61416e59e02c18fe9c6de484a57a6baa601085 +466f8b0d0dd2ef97196043104361bfb70226550a508fd15da939b002460ea2bd +b9a341f7bc279bd7822eeaf0b43d8a3fe0a1d54b937024726a950d12cc5a0b5b +1fab476d314ec7a3bd91988a22070adaeabcc431b89cb04ae233fda2545b39c5 +1aabcb917bc7d68ec270d0db776d5857fbe93402189dc5bd56c0e4820685566f +7b37c14527bd262f258e223630513f45e54d258617b63eb272bf8d6c14c3202b +a1de234bfb8408e108cdcd43371335ac18b2ab2b3879a29f3255923b40f0c95c +b0e35ae2112b4b4601a22c7ce2262249838169393b5f29d9007182d404a5f675 +82fa9f3594f5e71b9e52a1be074f9ce284da1fe33e4d005353091ae25b43c04d +2223b5b39baf9078d65ada0d7c40ec36c2a84e893202fd665c33fb3f4edf3179 +bfb3664a43b2e41db403c9c47b70aa04edd3e205b9d53e5393034a9744400a5c +d59b14cce5fdbe9c723ec7d7b1e5075d8ef5e0ace9b491a23018ffd3c1bfaa9e +b4b1bad89dcf1b760312f2a682733532d1c3330168992c9370c15353be8513b8 +bd916bdfbcc70ce974ed12abf219397c5801b04814bd78cbc61bc2df07d0465a +892151e6446de2c2d7007174256cdb2bdf6cd7c3ac982d023091839100567dbd +5301cfeb0847089b1d05d1860d93e34e0460e214f97ed6a4b7514339e6f72125 +ee7328bb386bbe4349eb8f1b2953798533ce86ec5aa68b42bfa282291406365b +05d1fd1901df2d67d7717c3e4a937bb188b811b42386cf3cf67accb0ef08c76d +748c0363a5f5313948523a85ed11f2ff32e20f50f8ccb947c37834be4028eb26 +935dde5e92605c22ebb6968bdb090bc89be457584e62b51104eba9c9b1c2c6e5 +acc62db8511d555c46353efe032e6f548ebb29ffeae1fbd15fa1704c61d723c3 +5bec95de9949669a20de7d87b658004270be8468f2900f00a56a2a5a81c3ebe1 +ae11c14695ee29cf9147a8e3d6a48f9736fe0a6502a1824b5bf58257796e9bd3 +db0757932c52f5a075570156aacfb0048fdee2d6efbae3b15f9153ea135adee3 +a58edb333cbcfbbb54ef73737d26908a52a3669f8c315c0f62bc7c919bd39578 +e586a2848f7cb6f9fdb821dc94151b57535b95d438d7bb34d4775f0b77aa93cf +d39f21f45461ca9e43a18d091c269574a84e6470eec93f0c270b60ffc66cbdf5 +a7c6c0179abf7a8bb4b92efd4fa00a78a800dc58acfcb580942380038510aff5 +00916c050aa5af382dccd8c820287e8bc1eedbf5ed07e0d35b99306fd361a253 +137fa81ba613066d7e9d46150fb7c214be6d473387e186db51e24c3a7b4ee6b3 +ea14273b32f45a4bc9f096e8e20a549098fe6955dc503d7de889c1b87deac13c +b03a97f842c48043b66de5812598d53824dcfb33059052ade8f8a915b497803b +6063b73fc4334717060e49bd8ad7d0706248e490e5465c33a5c3430a1a227318 +e5f55835ec8a502ec8a532ef9933eaa2879c910a8c1b2fe0959bb41a1d4c739a +585d48ffa66edf21e72edfc52bdb2df29aa4fcf344078a82c776cec29eff44d7 +2034c13ef7dc6b9f89a95fe8d407a216c3e2a47181579f68bc0f84eeb55bbe2a +cf1a5851db762fa8c54512119af207925b9661fe03c1edc0abb335c9fbe57a24 +2cbd842f58019f9d0cd7eb96e292c37ff5adb85f47393713d2763019f4febbea +70781edcf9c69fde39b3f7a8c684abc25e30214704368412de11d2b3c390eeaa +2b797a9fb4b621b906f09a17c1d875f3dd12054e6ab8a87e8ea23feb3b8e8a5e +2b14117d54e49db5d454c3460d3027bd083be0c1a5abe155e1e503bca6ff8fa8 +cfc835758c7a7f68e114d2a4e76d6eb677e46c258b3c95856430253101e9d62f +fc2489a89faec0beea2d16c6b2bb231bcc1ba381c11ccc0a54735d4f4879cfee +3a1032c1660b99a1a67f35080f7cddc3dd5185ade738b797e21f238f5d0a3a8a +61c16b08c6f5fc1531e1e9465ac1a731f6176c7097bc672bb883cd562da6bb53 +c34d2e6c866fc7d477589554a5038c725a4ff46642bdd3e6dca187b3fb66b369 +00e7aaaac32a45afb9e96013f21b0c72986a7a4b2a28a2ffa2a18e16581cc413 +25802c4f01e655e6af0f4b3be30cf18b2947c76eeed22ed820873e84173e7494 +8a7c1eb37ebaec41a880d6eb358079ee1e7d96065f0b883a31b1832a66025fbf +cc413971d8032f99447dd4a8ea3745ccc7c5cd4851ec34794d5890f957c92a56 +7d80f230701fe2f3861650bf17304eb733987b444b780d572f7137bd0434f804 +b93b75f333db7f1229730d69ffeb87d1c4d47de73afe32215aefb47b03adead8 +064691fe42c85e75e992360ff44c5bbe94930fbabe6bab08f4cd418f96bde807 +e578fd4908c658de8ff3d120aff85a17b4004f39ee10bd3f99cba39c1f00f2ec +6dd37c1160b5e6bc911eaadc470e280330533872501af80115a49a39edf094b7 +fe2f855b301071ca79f639ecbdbced92ddf367bd4539110790ca541cc2779496 +9173d23a43979da1bffc33a9e73e2e9e2965a78da3b91b9ccf28c0323ae4c9d7 +f5ab54c104b28a0768d08b8acea97e5cd4f82fbc9c17a6ce81edc9ca0207033c +b459dc95044a532af95c47699f8aa4927d1565e353020a929c664c668465b8c7 +4882ff6d3788c2e46b8bf939b1dc7f7d81277dbcf2c3aa10402fd77b3f1f39a2 +824571d23d100e48e8829e2d1af511c46fef1e2caa4bbef93fa68ed47bab742c +f421bf33aefffb9d0b73723b3ee4d13af8cd92a88a3c02db148030cf043147bc +3092a955d4054e2279a070535802ba54c02876e08d24fffeee86b37895556086 +38623bec61837ca3eb4aa6d32d7320373ce8f774714d7518d27bbcdf5917f6e7 +36b6c7b9a19fbde8e10e8e65c62e718ad30b0140f2d32ecb2d2b831d50fbdbce +17442171fd7adc60537ecdb5dc85d321150c6707786128d2151eb22e0d5dd077 +0fb51b6149529f8f2c709c1e7b002dd5e98297babace0cb4846d459d7a8efea6 +f09f44fb27bc1d04e29e274b4533a0d4eee55513889825f92fd6000acc970f41 +e22e17f8db7e4e8ac588e9205362e3ced4e1466bcf8256127d7bea67fba1b667 +009526808b9088fc8fb8152c5124318acf1e52958767d0e7e6044c94fc1d9bb9 +09e74b9a4fb1d6bfd21c7b039b35f6bea27c7d73463ee08fbb7f6f960b8ae556 +116cf7ea9ca86ac76befeab403244c88249290863e23e0f88f9c1387ece42691 +71a0114143ac91d41951fecd5a379c2626eaec0d560b2c991ff150e518713348 +d040824fd7210f1fb431d95f7c2cc6c19845f939b1b56fad2689929ea524d9e8 +0e311e61568ec1f74032ba61b07055caf5d8d658b285c0df80ba95223ab75de7 +b1aa7a2be04b0d50fb5bc5bc3e9e7a6ed9cc18ed95d32b72266ee146ab3379ff +2593fc2000678df3f07c5ba0eaf0fb6f305a2d72316acac8aa70a4e262efdd8e +8ad547138e3e0444611c5166e80f049fd5e7964db82d7281610068944b363825 +3d2b9aad5ce6abf40051718845abc3c65459f29d574822b43082c4a373a57dc1 +efa9778f047bccdf6da0de055d94f693272521cdec9b1987a305f40b16b79ff4 +8d442064ef18929c1987b7e0b35682c5d06d77f0ac9f4cac92c862f222081edc +668725fc76a77ed58bd4876a98cf6eac09cce40646e6917139209bc2f36f7b83 +ba00b0dd6274ebbdf90ceb30f05a668e962ac9e8d81c018a3dfb2d6f4ed0b0ee +1bbc50de6f71e97307d9b4d24fb1486f0f7a1d41105dced8f18a2917eea9c30a +ceae1d9b384890c5471f6cbb512a3cc13d144435574bd1ac79feef5e4bf44634 +a7de0bf65fda8d87cf788bc006cca98bfba3977951d28cf596d77c0fa72b35a0 +6e4bfc996c25c3aaf238a3955fed848f83d2fbf6f9fa5600a163112d95a45fba +8d8961ee677bb78814ccf434cc900025bbaa3e79f185708c09d56436c0d41b94 +b04511aad73e2beee76bddbde97dd714bb9e439f3e3eb6994303abf7a4a4ee79 +ab8769d6e4e43e08ab4f906eda71b6c63ebe9ac5e25aa450e206f8e058cbca74 +9db6a03b45dfe42baf33604a66aa0f25093998c2fb5f76664f072cc739e4bdb8 +20f31308acb142c9028aeea833f8cc08a9ba83dc6d67b69abeb85174db76185a +1ad81d5582cb814c7940b48676c218f6760c7dd0a5758739c75e3299958641e6 +76c085403745fe8d2211b6ff3e01054746fe1557e5a57e8ace8a3d928fac0392 +02141d7617ab5bb3568a7ec2f9e3aa36a837290ae9471c745d5759381d8df20b +e8ef8b98c44dda1b495a74b9b94fe693ae982ba3e7aae2a3d0cbe37529cf3048 +e469b53f515b76b54e5a7a32f121b80f0ae863789141a333a60e76d0f15db608 +03c029011be160bd34817c515d366d822c0b07c593f189607dc578a92e141403 +542e8f663b7284506ebf1e87788f3044acf0355d8317a9a79c6f4db562c83ca2 +9a30e70c847276ac094d7283fb60f72a54447ffe935a17be169f8e7e8af220e6 +fcc55a4a0bdd5e59f5e311f9774967bc27865fcb39760c9b6be3a78687756963 +165f910c5d11db0f194f75db2900b78a1081a9e2d680bf6693405c6632805c3f +804747e9b762e589e091385e3c37c11ca98d5daf177ccb38e7b40e7ed2189b32 +3d6de622e668b9600bd8064e06433898826fe01e726730bbd384b05176ec83e1 +b6e3e559fdf38313f2f78eb74ff7d41f705fd6060eefd3e0cd54db641017108e +65a2cfcfbd176b433db3bd7e808c65a9a31aa9d2f60240b78d3b402d29616fdf +9574d529ecab674d5b3b94d3b9be2101e75051a296f60255e161688d32f72773 +caa1695fd560cc6d6f4a3508e2d6be76ad6096b65b6314807ec78bead2dad888 +49fd64174c01286510c0472a27b9b908f37f0a9d3b0ac5f81e4f566688bace42 +55c3f9b73cb4883457db27118b399347bd822beb8dc2d44e2c5036af2c3f9511 +b7b73e1913bf4789703e09790649b9936fe592356b647bacfebd106e676595f5 +4299038d1c58b58ee2343624d02bfb10265295349638a78a9cee322c7813a619 +9af277e24a8f07455a2e1760e6cf9966301f39d789c7015f10125795a5cae2e8 +68eb37850b52aa1ddcef68e5b399f2a729247cbacfbf1570c16fbc1fc76091c9 +f294acd358f212a2f28426798a52862cee4fa74389fa8a78f774b960f452d7a3 +247012fc6daffc88bfdb99b616f4a68e60018b8101ee94f72a811c05f8e3e888 +baeadcb782c892f453ffc97e0506cc373eb4ef03f649e6963f715d351a575f17 +ae78d2a7dc5244184412b8b25ded29cec708493e573a222858f492785e6a8271 +f5005a8b5836137c643cc8f7ed3123fe37d7cccdd2eae4d3d2e34f496448eb07 +ca967410fbabfd955643abfe84cf73b45cd85b94e8dcfd85a6237090fbe19aa6 +8961aa52816e0742fd2060f3113056333f3c2ade4c165a6c9c51506e47dfcc00 +effc2e7e519872af0aaebcbf76d218f9987110eb964161fc50f5f744cf756c54 +7da86b7afbcba24eb121c81a1b3234585c52e3dfa923599f43d9eded7e80b37b +3e7476732c8f5c8b4cfd0dd02f9f5d01e9f4c670cde8436b140ab2f2d10fc6b5 +73bcc3f7c513b0a953a663cef0c3bab9b062fe15e8ed4bb1f90bca4f13351545 +9c5db1aa6de80e0d312e60688526134773857acae1ba92fb5a82d58dd8612af0 +d0e140498ba6ac73e43e7363ab6f13919944132383271b3cbd12316ab0b5b2ac +0103e0202f203ad1c198cc6dd1431719a61ab8f8b8caeba8e20800f5d6179c9f +0ac8a8e627df2184f3f96d6d2d377542653f0688f0fe395021d16d3dd8921a58 +bb0f981de584536ec1e9521435d0e251cb9de8c7b605a43d76f14b81bb141b8a +3b3fe96725563fc0cd5856e83c9c493ff183f73929cbc99c43308deb15a170b8 +ac72dc7ec11b441832be8ef0d04b4e1b7822f59057a290ea17c52427797a232d +8564f991c2293aba8bdedbb100969571cd8591ce6c8b3f54da3a562c473fb450 +3d095c4c2799736b443079a51642b28f4f86995b35a87809390a5cdb85fe5a7f +2910a66e4c59d488d95f44a95f20514a9dde8ea1b3b029879e43bbf2be7e658e +2098bb2658631e9ac547dd73f91a2a731f02657c264d31a680213827b507590a +4c4ccaa8145ed67bb254858229b4867f35c517481ebdfc2ac080c08c322d9d02 +0307aadfc1f511080f3184f41cdaa3d8e501f7f708c1b9dbb95a81ec445e7a93 +0f5d80b2565c741d28af78fae21a1483dc6b82e0ff4b5457e347f53bf646ad91 +b0263765e07479ba1f433ed21d9d55dc085eb1a5fd3daa2888c637708117f1eb +6581e8057453c02d40cf7a3effbbe51a61d7865f3939f354ad207effbab5b7b1 +a6018f7ea701197afc4753edea58bf1249b9a36c3a4b518b99c9102e7767d86e +4883f96c7d86539855e03a93d431af1279e29956d1eae441b868fd61cef4174d +c5e7d8985e24697f11bdb64bf2632d97e5160fadac11a186ea1b287119fc91cc +df4448fbcb4711b47dece9dfdae89c3a4e4202928ab1ced768f7469e0c8e870e +33fe7a78ab85fa6b9cbe9baf292ed55889d2ba0fffa928927c094d3f2fecaad6 +540954e20861517ea0d6b8be88c88876ee892da6e1e0d60009578159277338ad +0e3bac538ad22463d066d247cecb2988284e64f35b5e4e452ec034fa4503ab4e +407dcb4416ee86dd051432bd6b69ed526680cf100bd20821ca0f441e9a811613 +dd13eb0e5917da06c54db3fd165c4be0ba4335ecfb3e8ebd74389a63c9c83742 +fe6cd5dffb99aab2efec1cad7b045a3e5d0cdf14c90738791aa4f87a7b580df6 +ba9730eb047ca697a08df1865a7b3299dc867a9c823ab60b7756a321212bad9b +2a8f8a961d910b636acb4f33991a362cc3f9d73fbcdfee1687cb9e1bbf951b8f +99e7040238c954902dbe1a52ff050e4ac272eef23af376b0f2586a811fd7fa3f +61841ef087d7786a375b65e6138fa790db6333265c3531f1a3874eb725d84d99 +2d067f80c321936e27fbdbda5da1a94a4d8cb102254185e23f409e8d1ad9af69 +a4925d03abf9f38beae078559df04c9d94a25f418e83351cae67c8c38bd6bd65 +c7a65dc51f23832d6e7fe872d3f329382838d95b7463288f60ab997be36d82ca +52e3001a38240d6a6f4919400e6405675160049a22ae9b7d5ab843bad7e583d9 +de2693e53d6eab14653443247e0c5ebfef8fb1f88ddf71139d4a74d00912996c +d52b8123279964dae5390c92cc31ace86269b671c07e3661129b8cad4170c0fe +e829986a18796c6507f0fcee7cc86a98944c2d861691063fab7b724963b1551f +f14fc976a7c45a2c83b2b25a4b39ad7945a88325b7a13ebcdec6aa4fd50ab928 +43ee56317a81b3fe2f721f0aa3909292e09c73d8cb6d04755d8357ea16b2c680 +b8eeb8869e88b4591b733d5d5ff6e042098dc8ce9c6adef069e02c95baffa85f +140e799ed694ce9492234c44c3506aab1c2b091ebbc6f7c754966e8056d0082e +9db04d456b9b1b7561050584113fcd19954844115590be6b2e4f01f4f67c7b14 +0d77cdeba87369e12c34b28ad846cef922e76730c7c3d66a1b1378cd96ea55f4 +f9f040f6f0b3f5a852b61d1b3061d5c59f4d22c31873c4153760ea4fc21e99bd +c1cde27233690defec58a0393135126d15c7e993a3e4e5f64519a8ad2ee25e0f +d71687a7caffa74d771d8b9ad09f5fe66a8d15b2b49cdd3e202652cce1c61db7 +3f131f256d8f392a1cf189d83fe55a0068c8915df89430031584150ec142f203 +01c5df898599e8be1885b3121f071791cce7cef0ed34cf0da3f4f77b9d124b99 +7f461aafcd9571b0c236023c562f0e24ffe67879caf5fe28abb56c8a243325d6 +ad208cfa8a8b6b857161815f9e63f230d7e81abd575e1c90daa0fbe8b7241490 +6eaa7499de525bc7d71ee26248bf30706c75c6aa2573d18af8172ec96e12f40b +565ab22b7a45e2fe82d372307513e82b6bbd25edeea3673af3551063a6922935 +6177eda04587949dcf6e4de5733ec4bbee94415fcbba7f613b142ee51fcd2f1b +77999006bb8165a80b1a5334ebd9de72adb95933de88d11e9daaf70efbc1df5f +1a8d222c738742d95431a018c60fc0f073e7c7ccd59ccb5e2c965406e5a41500 +e156d52ba0ba1f1d46cbfd9172b5a03ea4ee97ce4f7dd20e3e5d79b66c1434a8 +65b740195289bcdf081cfeb542a74d4ff3d89c5677b9e61eea83e5d68c2cf4d5 +4bdc72978ee68b51ee7bec94a68d01282cebb872d5253a12a1290297cf312d23 +d94cbdabd83957b990a705c1b2496a6011d9811a1781e81403df7a5f28780f25 +a49f70e46cd5bc154fa128375dea7ce5ae0dc07bbf6b1c75e73f62f0a0767164 +c76290285308d91984eafb35fecaa451219dda382d5751ddabb06e1d0f05e688 +8fcc0293b666b34ee861bd52940d71dedc53121f846325ac14f79761b70d3ffb +1dc5f85df6bbfa7c7d5b963dce83c3434138e725924abb90a6b34ab101346a9d +ed8d8769063c2705576f17c12358697f0e80715c009632b4501f230a5cd6e5ad +0b0a385efb1a69330334546a6c10acb350b4079fa3777c2e1ef4a578292999f1 +b5f9cecd8725f71175a73e3974c74d2dd5133c101caf91a8d501b34e5cee5e9b +fd97ee1844032e1cfbc19a56c8dbc73bb05b36b0014f6c125d81b33012b7e795 +3df8d1b36c80830b1779948708ce2fea82e51d696a66077d6a10a6138a5dbc8a +f67ed108f1a6a17676bd0e0d84b3bf624408f263a8f64eb261f779629a312b8c +1f6df6b60359cebda09116a64b81215dc117a616a96f10b446c3f93f45d4494e +579c8f71c35635fcbdd82c884e071b8e4e2e039ea4f2dbd90f33ee0bdeda76d3 +f9152f194092efd586adafab6d2295749569f5fb0acc81ae13beb8541aba07ed +716ad4053929f643492ab59924f7fe0cb9e703699b31eafceb3dca20969fdcb9 +5d984569acb887c827ecdf774b22c19b65cef3b1a6b37f0b22de0490424c15f8 +aad646e442155a2c2f66a08049507213c2216fc8b2ba5db3d467ea0159fed3c0 +5ff88e7ec282f16a2649405c5cc3087f8dc5c7841f43f9728bdf5995d5bb9972 +babde6ba53e13bf07955e3901a8f3d5e7ec0b864da084430205222a9b77daa84 +80e4282b8702c1d8f30483aa49c69c8a48ea6b8f2e632b986f8abd235d97e4dc +998582c28250bcf2fbb89e3490e27b89d91c5be03dada3f23e6b02f000bab2d1 +8677eb845fc722de91e7d79b704af4be547ccce347a4953f1cf80ca9cff0bf67 +d8b7eabf501524eb055c9933d1d279f404b711b28721a4e047d8f038a9649e67 +163fb2a66c509c2831c2b58bd9a907506c5577d4e791aad6afe5462f4f8ffb5b +515fdabaaefa0edbd0b70d4b60494159a8e17a5f04f2ab15b96e6f0f520de84f +fd542d6c3376707bd0fb6215e1e1f5e8e3b60291f950955e6d9fb44f72c5a188 +07a93a0d652500b2bbca2e57620ddf502d3302f29dc5e7d0a6ec140edf6c6768 +b2924b7fe0ca692ef5177ae8a4ed31961578578eb68e6e8757668e44c90ba2b3 +e01ed19803bd578ba03878ec24cea41f0017ef940c495060a94d28c7ec9ae4d7 +380de1ddf5496aa9ae612972833da12269fc75e99e4250e9ac84dc9020fbfc00 +ca0af8000556b76f9f7134ddfd7f366ec7aae60f1ceb56ad09cc2f3cbb360844 +0df489f8f4fc495269af12f79aa497439b7fd236682e906995720d9d3d5f4a43 +b49f67d4be3c8651c008474cbf5a2f7a62dc82e5d8613f73d7f0525d3abbd9bd +97a386080b378f348122735119dcf19338cf98cfa313a05054886484cf228cd0 +5d6e6cc66f7d8784e1a8f33dbf9ca18520db2f5f219421d9873302a5af7bd7cc +25a8a15f21c4ca62ffe24651e8d88bc4aaf712ce160d6ef5fd4235fdf2122da7 +41ba152423bf114009336f6b6a7253eb1af170e2cd75a3503fa2bafa8bfb72cf +8d525a973fcf738d828195df90d65dd17a6808736ff8db5b1ab8501162599e23 +e754d7e75f394e83eea74f82bcffa4255913f336298837d59f262e030fae68f2 +c8f4fa2e027b439f9636197eaf38a9cb1bf61d526c803c5dc91318ad8220c4a6 +bb9dc80344c09b7db6cdbfe0fcd387ba35f7af2f63f2da01f1aebad604e5d9ae +f29f6e015b8f3fda24094a34bb52f6b9f193ea64c5e85f1467faedd963584afb +534c19aa1a6fc03bac867f04da0a8a551cb457d12bc94fc70736c68851f478cb +731b816cf8fd4ed0457edd3fb67588b706bbd116ad2245ce8448afacdeaed838 +02801f2d7b307e10992aaaf4c022c608331fdb297cb6c08852f1913b8cacda53 +a9e27a2d4372681474b1338b80ae53b42fe7e9884e1453c932877d680c3c1eb9 +574e4ab0804ca34bd9eb6decf527c11fe004a65787d3f61b4b2a177f08d11d19 +cd534f756a9d2c4074e68dd39be0fb92d76a1000a11c7657655171c078c9d8fd +fe6bf11d342952d3e6f0d34f6355a18fe7446870e68c240334e6a6cc8590e173 +d3e2959f7b7d0ddcd88cab241885a6e4d14ac39d4186f6069c5b7d36c28af766 +ae76a156d97239e5249fead7e7c8758d43080a9856b80f4cef4949958769b4a8 +41fa54a715cc8a02b5dda6c5c88ce80fc75d8d593dd205f0ce12cf5facaa5de3 +0bf76bf35db6bf4de19db61c82a66fa7c5736cfecf3be4e55905b432d816fca3 +017fe50a3c96f20cfe180012e30a641e8f482e05883e53d7fdf7cbb5a596ae08 +c5ecbd1c2ca792d74ce7a9633445c2e4aca2e552bb1b9aa7cb9474ed18ec7140 +dad5c5538088d873f23192f591679eacd34e1633f1f6d75235fea408d56a0e0b +b59dbd349f87b17d5faab39680afa4710e214d76db9b8d68011f980931c1fe97 +d32775093bbb48cf084420756be8eacd55eb9f874198a22ea3da8a7ef0896086 +b5c5b095687042d6b4b51c81039105a15c3a65af2d3ba241b44537154dd5a4c3 +02280b4a8fcb8058e344747be6d3fcff93bc4e3419d37eda8cb9538deb7c8cec +ea5fdcf42658be89367a2b59bab95630d77eaccb2013c3af5a2da6234e927cea +0cbc68b09f48432a571e53cb6e16203a6b7c5183abb72e695ab1fe46a6493432 +9f8ef0d4fcfd6ef5026d23e4ddc94dba85bde49152d9f7e994490c699a9532d1 +7bffd0207b970774c90a1bc1d0213745fc8dc09b0ec03536dbb64d4d181e3599 +bae8d2bfba291917479622808ad26d53a9493e8aeff916856b638f08a8cdb4c7 +a7bf2835cb60558e71addc3b104bdc3831e98349c3199c55fd9763394ad72c5a +50b3959583596593ed4a83e14c8acfc860c3ac72ebb45326665ebaa445e985dc +15c51412d92cf6df4516cf64a7210c2a987390bf74ec339c26705b94b7e463ac +dd1bc4b17cf36b48d19f80190f8a4e87e6c4aa55cfbd1154a34f9570c2456b12 +382c5994b37331817f6c77a5cb6611bc009b152f30c200991210d1897a4aa73b +822c553f1d0b2cc450156af08424f567063446929dcc212d26fbb6f988a48fa9 +2bcabb2eb3ff671d2caafb590be03b5ded35db926265bb9cd19fce3b2757921a +c77c10766a3a83c71ca7733beea05b3b34cf29382247a4cb55ea6f5c587e3e82 +01935f72aba4967648ef2a9d34ca866993845c6b10f1f70b4087c13baeeb265a +628f7a0ab737c7dc69c209e9fdba89a136d032bcd01124186126ed343b6dbd55 +230a79056f24936bffd6391bc8e17fe406b5db1c511eee2cf89df8f5afc52daa +06ce8fc180c8e57a87e7e6660aa509d32414f4ffaaa486874f43f57539fad43c +54133b8cf29efe0b1f8e34efe6461b702b770b21f023658f3fa9e8c3061b58df +0780e549666a0b4ed6ea03c28e213fe47c225a9bd1c4e15c029884b2e4bb0678 +c6a95faab976966decd704b0289107341f9f60787b9e0be16090964ad5c9f024 +9fd08678addbd9a57acc6c3665b85d968ea1f0635c1d6c2de4cfa939d768e8ab +f350ce6ddcef8dd1c903fd6a6b6483c69410f55f19bfdf24cd9cc11dc2141d5a +317a60ed5488ad013591edde90c8f46a5bfbde490abe48a71b7fbcbe49ebaea7 +9a8ea99ab455a36432199a0e6595f9b1b656801f9cb98d2be7f5313a3d731a39 +6e42f35837520791efd35ee094990b9d8ca8cfa9fd511f890788cecf0161e65c +212862dd88485b4611548167534287649d88be19fbb2fc785483650da91ef335 +872c60807b0054f32cbdf44a217bcd0f434d175d31c32d1f17f6c81dfd935b21 +4c3ec4416ab36e3b19c63b78b1abb83d2c23b7894e2dc49031bbe966ae9eba53 +2796e8d87927ed2dc36cfe9b4b886ec499b014f664e23a589d74dd0404950654 +d60f5e48df99a94e1488ad4f776ad674be63ad8eef59b4c7a240313ce0ce8e3a +5656399827215b1de0e0ab6059f6976771d2f3f135adfc496cd34350aaf149de +350c9e77b9934cc2d718a33ff9c2c41cbf95ab0240348e86176b3d1ec4d2a524 +d0115e1aad7ae1f1192a087045b12528b4af5daa1e290d8b5f3c26ebf0677355 +c84b2da7ea661fae98cfd4b7afbd4031478b0fe35878934af4bcc50a5fca36cc +bbaf18ab265e956e83c12605ef968fa24eb6427c06124e3a2bca06ffe860d77c +68b92eb2b243bc96a5562e63f7bab18442b381d54ac470f69f3f727d3af54d7d +a5b20a1d29f0d64d37feb5f5f51e689e588c21950e548228b451f9e91c58bec9 +f9fb4f746db17fd045a7399bf53ea3da4ed859250f417b7e81ef579b0c299c02 +de9631f549d381aaf50b418259e42980271d6c4eed2b988410fb27cffca10cad +5d839d4593549150976383f379a79c47090e7d61c957888a1995832efbfa4ac4 +e10f916ae6e78dee7337ce39c12f28bdafe61af4c806b125462b98f4afbf2ad6 +6a8bbdaeb5b314c7050d9ea6212135a831dfc1b9fe1a39050a2b2533e125875d +68aa1d58b18ea350aa30c30c97238158f8cbff6bcffc9f9897dfe876ed647229 +acffd8afad91f29b5305582029e3ff8869ac7841f5ba4b9d7bb3f70246f3a7d7 +55697fa4cdc731714a3916c50711fb5c71810b3bf0c09430e306ba70d0cca039 +82a33e27d71df4d10a14851a7098d71d982120d06c4b0c6525c76e92115fe76a +e1922735b67dfa0653bafa2eeadf48cc57348622c666078553298fe7258021b5 +76adeccfa8cbcfcf3555455a17d0b18b9af54d46dcb43413600b40d9d1f363cf +a8e7d6c2d73f1dd76b50cbf0f04483c7fc5c4e1e4d8ab717cf4f98876542c0fa +f6256cbc2070aa4fa57259ea728e7c0513500aebec282c1247e8cbefb3f5d0ab +ff94420bc3f87681fc2fdb621e73d41cbda41ec05f755dcfbf3ff83aa58595b3 +d09b3911d547448d281b96e71610f984889c01b7e938ef06ec71f41ef42eedd0 +ccb29079bc0578cf60d99eb7fc32e485dec83e67ae0b2023df2245d8e907fc60 +b55e20ec67f4e39f65ff0c5170a1fb6ac3ea8655b00b661456b36fa9e796b20b +c9a11a81034a4b13e28c856eace5f8a85cdf42205c65ff26f4486cf51061b99c +70452d4cb07d8fff7bb504a678a25b51500255b6b46df85886a6976344b285bf +6f97bfa774c3988c1f05311a377b19ebf10f5aaa291c57218ef6307e07666cca +4d4a11cc9d0060f3f60fae209b276ef0da7f8f1d1709c88647b713f17c56ca85 +73a5847f2eee2bf81717e8f543b7f83ce5abf55457294f79cae86810d32c3a25 +f4a01e775cb02d1f10475f9d4269dc755a6494e412d34201f33504ca4f31a4a4 +42f0c35c648493c64261ed1cbe82523d0b8f1eefd6fc21ca2edb041e8b543cc9 +a4c0fc424f8328429c4df071f3c31e6d20f4da5cc1feb509ea566525b79bd468 +132a1f1bc9b6d1ddb7316d69cc0e9c36980f134e5bfb422614109dd2b5249f48 +0b501c1075fb8a0f4179a9a8a7b23a12ef567ded6ee573e009d243255c3f05d7 +c7744dcabc82238d484ea758850c94c1f3d3e7ae0227576af3937ae831758238 +a977ffa4614a5836b873b5bc881d3fa641adafbc5ee628766c66e03f6b998927 +98fec4f3b43367d3684dd544b72f44688480776ac858a8dea106c85a5834a4a7 +1dd9545f864a4b8b7878b28052b22afe844c58aaa7cd50b384e1e0e859cb471b +d98d7a81b5f3b22706702837eff3a63894c9aa48d18e3e9c56efe4bb1f82e421 +5ab0aba6c03c867a54b0f24039a6f82561f6e7d5d4e3bd800019fd7fe3e64184 +00b0be16eb1df9a9ace75bff8049e70ff138f735d94be00cf67e66cb225e23c4 +7d1d5003ad9b2f43ce0fc0219f7d5cb54844e8a199ed64cf82064bdcbacac34d +9acd47970471fc627a68fc9adfe667d3dfbae97c26b29ad3fa283c964dc28ac1 +e950ebd4b1f6e19e9dcf2c753dfe2a02253438cb329ba54919da0c7eadbe82cb +2b8f87f7e6eb987220245be95ecb792c03b4997724cef63e1062914f44c6526a +4f0925a08c1b627b4b2e01b3750befe34dda36f9dd406265d56f53dbace67d93 +a22416906fdd77905720fb92304378923e7d19038f8774b0424d679003ea84f5 +767f8147b873ff3a029f81a30e62070c862ed261f7dc96c30d051c19e9d3bd7a +b63c5c04e98582adcaa502aa52c3ae77ff6138b69ce07e9748d3c84441093f28 +564af19ebdd5caaed2097c66e29165e4860a26eece27e1578823817b422f9d89 +a48b8815cbeb6d6f4939b0c317e042e0def3fede8b052af6d5396ed8b4b0cfd7 +05856aa132ffcd17484861c5b02181dc472ea93facaa286382002902a1e6df7a +6dc836b7d7d1d3cf6932cf58d118071844d570f9809edf8460f8e14cd30eb624 +85d2817371aa928018f3ef88b1dff04972b79c3f4d2b6b176d589183bae0c230 +4021739a63722a173f818fc7842444c4faebccbd8e4a1565e97f1f20641503d2 +156f6a28eecaee16c25564c68e634c11d7d387fd0a43409e83a4aeabebaa5201 +4c23d75346321743b08e231b0d0a1a1230cffc89adf2cc92caf035499b84afad +484f552d565af1bfcc1482c217e5ceaf63532f7a136fd617633b096575c32e10 +5731c45ec282f784bda559a55f52d464314ba989e03611a68273a4d8d876fe8f +3e79ec3ec7bca77984abbb005a8974c9ff62453b47047330118a816e77496cac +f20635579b6df8e4a54377f2ff62f392facd75d77eacd9458d24687b08b15b73 +f3c9e4c9f6ce1015a18d9316ec031583fab044075b73b823757d8a36a7f9b6a3 +4ea71e3b65098b9a2142fb052e88995a0810ba0a261717fdb7996cd08b3668f4 +466c289492ea7944020e1e16d241f0c0e5399a49e680287dccd4b738d2e0e8a9 +62f7b44729e716f495aa1df41565b4cbf8a386daca6f4daa75faa81d37aba9cf +2d3de8e955bd7a8d601cfb9c638338c16bb558d8f9f5a524eafb60ad083e25f5 +67f3bab516fd29544e99c1d1647d45571ed1665704a1d3006540795ce728699a +e9794f7e7bee74b14c8d2b88de994fa390b6f85b48ad0284ed7266633a11b42b +c69d81c1497bad6aa84d266bc871229e5f003f09a448ed2ac94af43c262966ee +c25937eb425729b9c28558419aa1b26edc81784d64ca498c72775393146ddbfa +d4eb7a8eed35ca530cc1e41c4c03af33923d94d22f33f1559e0818bad7b16b9a +3a3bad67716ec9593e13078badc8448a3643f6a4edc22647c8cd82e2fef0c965 +58f044ed8b068ea537030e840164f60a0dd7216a977e9665af433a3229ddb44d +f58ac98573a68fa7f11fbb3fbba283c85211a191cf6c93387f0d3643bc9d9558 +dd56b0a0dc4783afee6c554a769bc7849a2ae7231cf97b79874ad088293e3ab5 +fc67b15826e6b184ea1ea4b3b11430b3d70eabbe464d5559d0bbcc0ac8452c97 +e076a15cac09bfdc36888303760508d63b3ae2b3aab80e629cf25fa23c378915 +d2675e8b8415263645ced570dfc491467f7ff616afa7ee45f84732a687ec7dc9 +7555f2e5b89f3b09e9a9c96d59b730b2c4939be2bad5c8b03f3e459b1e5a8b65 +f67f00b8def9c8e4ed8813b87ca182291d61273d889c362aa11bf55e26e9f3e5 +bd0565ec510ac3d63e913936116e608d95a87bda268e6e3b220e188b7769ef52 +a1e3af73cfc53ba2fa172dd48e68814fe3c5da31fbbc0eaad418dc49bf07cc7a +3e0ae632c9a4c430b9745bd7ab989288893b37a9e9cd31ddc005e288192782a2 +f0c825cda10dbecd0929e2f19051afcdbc96fa1137954ddd3e151b8944f817b9 +c270e3d851585800c8b42e858c7ee41e6bb09cbcd9368ad90d65a0b582dc9194 +c575586fa6e7f616eb5424b18fb713c80709a47dcfd84a5cae4151a8bbf2e523 +cb1a36f133d98296f8645de366aefb195d03c9520b38d139e597d63c72e309a7 +57947edb8e9b19bb94424b2d0362463d06ff41e8aaed6f4e61b7df50550b3514 +3804d4f7351822ed557c49c1927813021a23c72f9b1ae9dc1eabdbbdd7c0f810 +9ac6957d06e2448f3349ff98f970a6f551d6f3cb2b8511fcbf17c4203cb8221b +99d8988a08e76af7140063357960988843ad0d984d383cd3b87a4f2e97699acd +d8b78a0dc90e183665a6cde6c0ffe35943aa258a8b4b122a7696885205d176c6 +89614686d5787e6b7b9bb1b3d04c87ef4c943ac5d0e578d4450b9527c0340d0a +d6436ffc38a7ddfb088e3921eed7cb81fb5dedc5e9118c901dc304475af1b3f2 +ed03294ad96523b1a4656012959bde585dba67de534bcc5668c1cd72624140f5 +49c65027acf43b8ea88ee63397550676455aa8ad331eb90bfdbf8c5806173639 +3f6935e7c52e10c0cd7ca9ef501266f9fb8e0d8586e8bf9bf5aa52121b799605 +abd27c86a510000cadb503276524023926e16b927c4d830795784950ae8a30cf +e2d0bd25197c1994a05b9896279830f6e7a7917fdc02a6e5e42a4eac50703f6d +74695dfe7f217457697e426ab4d82c05ff5764228066e561d2d30fcc45c123d0 +e41d849ba2eebc17e82847b3c5a2f34ffbd99263148564e45ca3eba9358ecc7d +15e22fa397babcd3af0b0be16f9384d477375922757e8d3fd84e1b4ea14a91ac +9fa1aa702eea91ecfb72b0b74d35a3b8b4d6d8054cd304242594710c981fadc7 +c60b16ed9ad38713721ce06df0fe615367ba98517504bd094e6f950604176dac +a7e63955201d14b230923444ead68b75fef171a1189a2b13f5f806d26e815910 +059def467adfd8482f8ffcf47648246ab97462391905ad1332e4f9a18da18a7b +00e0bcfc546672288ec667923f85b807fe03232596dabff094567bb515ec6fc2 +a0a660f8d1ae878e192b9c5e02cdf6e0b50b6407cd767fd7e18e6ea2afa70f52 +2633626f5ef2a77ffb4e507515f5ebe7212d766a65dbccb289302b4d96a52ea5 +1b3290987467f31be190d608514985e2e7679aa4a2ec0249e879f9376855eec2 +e5a6e6011e1225ccdb6a03a13d89418752c73222fbe4daae7dfabeb751e11cb6 +6b49c4c320642c3609b092770acc0bd1f61289fd6b2a68ecd27122f43303db1d +d0fc9ba0765bf487fd8a80437f685ddab486064b2183371a8141b72ae878fc98 +c5d35177db05140ae90315f9f3efbea5d7ca1faefa0f692650a448249fa53e6c +5c9d8526a889f0d89c90bb26d32932407dbd46bb1005f16ae6e9ca7cf02d19bb +2a78a6c4da0fbf6ebd9223e33678c5544df671654224e5345e686283faa34864 +63bf1576e4fecde5e545ccc6bbe5311ac0a7811fc4a46e9cbb36ec49cf04d59e +a1bf8b9150caabf8fa192715206af91403b8a6ae422b66159b27301b1ebc580f +813b0f1301ac65f1e9cbd72652663293d65ba8d80cf5226ed1ce49aa27b291fd +2a99fcf8a9e7f8120e9f8bd32c0b7279824d3fb14c70cd33ee2bf624db361f91 +3a308ffc179d424b3563e039284a8e056640d733c76e36b26c2d2d55e9bae252 +915301f1aa2db4d2ecd00a2002b9f743d1b6329051b368967d445e3936d7dd2c +f9680a29ea6ffc353bad34c90f9bbfbb11ad9a9143e58eabca2be684a2e51d01 +6d1340a0a65015d5fd32654e5b570dbf1a9944d694e1829c4c74708ac9e584a3 +fe90e116823f180a7d8cac689c8d22e61eb3c5c206fbf58d498947417577a0ac +71c04eb34338f0fe3460f651fb51da630266f24f4e48dcadca36019d6354ff97 +542bba4fac51673f9f89508c208a74ae16d660837e4eba341cd5174ac58b694a +2a9e1b32ce7fd4cd141956b55123f50962649c4c9bd4d757546d5747ec818e97 +476092a57f03194e7c28bc51ff66273962b6208142aa30478b78e60e4c8c08c7 +4940442869cca4f97ffa94d43f7425fdd50e198524fb32addd8ef8af79448598 +eea51d756dc6dd1c4c9c0bd82cb8a36049dc0319fa0e057bbaac264fbd39c23a +f79e945e950ca60b2efc5d830d9c2a136d7f3e5867c28324e02b3e8a1f26e9da +d8de77a7b00e941c416f61a7d19788054a005bcb6c77ce03d82ffbee58fdc4bc +1d17ed03053c0b246c6eeb2a1080e0f9ecf2c55f85b8d05275ec6142943e43dc +fe2b3aa50563360b4569ea626a7693735441c64a4827b7140916a7e4b5a7599a +ae0ff84a55a3aed4b22829c00f1297759044f4b86a935ccae19b589509b67d21 +d3abdf792c57902b9770e5d3f5859901e00581a05157465e7c844e63f05bfff5 +5bbaebaa1c20df24c78b4f2a7af2b6b34b4f2ae4d95911186205a482e57f9cc3 +9386bc71330064eb7d30af5785942da9a2baea9653898d788b4cba5721b15417 +78991b3e97fbb8291bc0d8f2e2163f748c919b2ab90339206a2cef48744d2a2d +1e4ddb3bad0850a5e724327c6ae16a830ccfbc152b7614b584bc185645449565 +94d5d2dc5082966c8d92afec25ad365923e7cf8669377227e546d25f4c99a685 +ef3355401196082868c2cfb6930e3890b9479953e427da6a4bccbb8b945e6ef3 +254a21ea98d4561f127259a615a1c19dfa20725d1e6bc7cfd4c83c4c862eae97 +634d1d571e9db724cea4392d9327bc41f4ecf98519019c3de4e43378d57e04aa +e71e9648e70189831f7d0d6b8fde37e27f6297c6ff2244a035d9f48a40a901dd +02d34b20ee14180d5548ddc6b43778e6223311bcd429c91db6821ca13772be24 +64f2ac71f6a3e3080d63bc0ceff1d5a25d1a78a90c08d3c7938fb398121f4ed5 +4a6a3b3234d76e5b43174a2596f6afda93566a3b493ef297a88a3cccaa5c7c19 +038567aa905f3322cd9bb662684976900e294a7c71c47b518ddeabc91ef0677b +395e98d34ebc21ca73f2e7904d1ede25e57a2128a162a54947e4143d839cb43d +9e0eec0fa1713ad105ff66d6a50a38140d5847c406f5fdaae2f25562eea044b1 +f4c8ca9071b7f8b4e6965d8d38bac65ecc9d38afebb440035d5736232db2d7dd +1496fe6fd2ee75300a20ed59c954363819603fe424a789353c95e8c4dbe15126 +8ea5004cf9cb204425698fdd3de7ae476ac8e22308704108f31ea55b33f4f8db +7b4c86fc0ec1a82c23fc275ed5785ab7579eedfc9a21ba1aceb54fe857d39137 +5d8d37cfaa4e53a4f285f65d34144cb7038730a442471f930119a78c17b43b86 +06b9255d9e8c131eadc57adc1743102a6c7a6ebd1d52d4e53128245ac43f6731 +649d02cde593bc7febd60d241a42df8c6eda65e8191d90702f3e3262c01d0899 +9524357ea36d3d47a3c0902d23e3b4c1ce42fe5c0439f20571273588f64cba02 +6f139c5205e9851bf7f9f309c75ebaff9265aeefa5402d0a6386ffa003f200c7 +07a81fca5cf936dbb8f9d551fa3050e675bacdcbe4c641952962b93be7a76112 +c638a2883de75ed5559cad104ff5f167c543fb331de25afed196279851a57f3a +be3245dc2adadbe1e9cad6cc81b065a3d98a81220d0b70cc40af7ba06ac7229e +140992422a7c8be37e8ba7a5e2600ea97e53cd6e0d3b425574435f19f001f245 +3ad5a54147bdbfcc6439bbef583235e6ad73b16ad61d37ba9524a94a9f8744f1 +88a931514df4151f14eb45d591f8f1d52af3dae43d55194bcfe1ed726cf47908 +d14f42ca81258420225413d087b2aece89dd0dc06beeeb1506eee45100a9f13c +0ffa2746d07fabca00908b7bd95ada05288d27332d04519750eb5fe4783f9f03 +736cf332af1f8b8f10ea49796ca13129b9fd46e20ba7bff2b3b94997babc2f99 +45ea322c7af64f27fa25f198af60181303e45ab172c208433932a8a6b347d7bd +b4ad6d3cb67e6c721e668d7746626f9c2f899ac6264ca398de999da9fa55e8a5 +cb3a3ef4cef5a9dfdb4eed257aebc944f4dbd13e8eb32c37991be96f5f2e6687 +dea61adc1a2d15a4ee4edca267ccea458100f3052712be75e3031ce3d1765f3c +5fdac22e2efd3bdddd37e387e4089531e2ab7d4b91769c9e4fd1dc9ef25ba0e7 +0b99540ea6bfc55fdcd6ad71dbb9fb2b3a285dae74bb15463ea3faf0134d2625 +14df5fa260f1b85f852a99b3d74bac6428e3dcac0c2975003ae327eb600c2965 +501ed8c4c6c3eb112af07a8aee4ca97c3020f27cad6128328f10be7a0ed095d1 +1fe6de1196027c394935d1bda034197f014dc6d1aabe3d97332d6176f6e93667 +5ed07d415754837312e2ca4a8b7e231e0c579e8c3c28bca0dc0e6034a436ee7a +bded4f0e33a9e2b61190d42f0b15759df28ac4c423891e3de97952d4f0b7c6bf +ffe76747fe939970f27917fe5d5bb538abf9277ed915de258a9f91358cb0454a +c8e29c348e1b7fadee3b8003c3f1232f6dfa6b4d4fc23e6deee299a175416f93 +91fafb54f1695b76e756f7dc341005bfb7d1f3f1717abecedf93fae132633c4f +bb7d6656eebd63ec13caa8bc324398601d78712c6a397ccd587849e38eec2b44 +60352f24d805e82c06dba8e41c1ec9e6f1bf53b8eaed01e22245b3192b5b1ff1 +1fe2a008e5d7df0e85aef253f7b42688568e84f7e4903c50fca88e7515cf880a +96c98df79b77cf45416284b1381467e782336d8bcf1d1ccc13362bd9f6be5db3 +5f6f5509590e464d0e5cbdde304038cfc829d500d94e79bc3deba6b33f83782f +7d556e52fc255b751e002e1ee85d099c21754f8ca9cb2afd5b13bc798f278210 +e3af3a4c120fcc76b5239effb49f50c44a343c4fd9f50ac4ee36496b586d2354 +d4c90c6f8b569fc5762a987f5c1878fb8df6cdeceb61043374f7ede56a2f399b +303f00b754b68489545c389700262b9e84a5358e4281f4fcc3d449399389240b +ad90460ee4627ccb0e927db35ac196d92af0cc2a91f94e375b806677142647a0 +7c8b59a7c623414117927216369fd2f5798dd6950499c77cffec66e81adf290d +d6f4413630f037ee1add0022f6aa81a3df21fac13a93cad550a25c617489d986 +31551841ccaf6016356aca8a03e6a8c8c594c0ece0a8695260b5fa453de1b299 +ed62a5c325b2bbadf629710520e300fb50a42feec4a5adf926379adfa5ff1e1d +1475ff212cb002d136e6005ac6151e98182de9013399364ec82b97045947fcd9 +e69d158210faee4a362f331c0807802dd650b28c33d2a15d70c8ed88fe62ea30 +72c66da755a447a5ce00bccc58979802c859934d29f3084a21c2153c383c10a1 +4212b4ac1471a6bfcfc435e5bad0e6ddf61b09fbead5984d35937f872c1340d4 +06ce6355064cd3a37b190ab41490626c3d0d751c9545f4681d215cfde2a0dc7d +16ac5e108875e2d852fc3396ea92600a862602e3e9fccc8dc071909c83d165d6 +d240291f79b0fe4a655c9f07d0ad62ef97768e894a1078c7fc28a7e6de78a691 +3dfd7f046add8e6a69c21c2c7abd78b25bf3a53e98dbc13d84a920b8572dde24 +c75d79db31bac563bd6e6ed38f6b5a37f833cbf47c80ce78b5ff99749f35b50d +39af38ce5337a397794254e3ea895e5a72b06422ca3e2354e774526c3c43749f +b40de5c77257601d91a9ab1819d00b0a8008137de6c7507c54d6df85882db0e9 +99389362e00b98dbcb99b977d29ae42f92a9d73465a993ba30e78b5f742295bb +eece0fc5908a83c10fef20b882b2073d83cf6b03b41bfc7894400f309c22ff85 +501250d25cb609219c576d547ee23092fdd9b99202897746fee9e51169575909 +3e5d83af37487f212f8244c1e8156a11425a8fa1ab60a9d5535f53315281b05e +78d60f8fc1f45860be41e7439a599dc29ba5bdc7fc2a85e9cd23ab0da8313582 +da32e74da2e6b86cbf7105ceed5defb03084c2c70c66dd836c94d6872bd543cd +b5542c784c2ecbb526f98cfafabbb7016720dd693143e16af39635accafc1aa4 +0fba6f2f1a693e5aada4d95a76e6178acf0d01bf35a2af06f140cee0d664b03b +7e721fe4d59655758db048490ae8d166cb7ec00241e7045da7149127255650b8 +505e6bd93c83b1059a17eeb48a64bd2b2d3435385c7b00e0a72055cc67fe9f3a +353070322960a4d880c8aa9dbae69240b2dcef14d9665667742f023f4856568e +25b20f4e2a9b7ca29272c2e8b86429a9cdd3f65f2392bc9d45a68f46b8534afa +072fb3f5ac5230f29f5edcfef487c6576bacceeee88780fcabd10b2e78da5bd2 +0b883429defbb9b73d446ec8a1f3b4d33cc1d82d446bd61a7940cf1b6bacceea +2a237863360e48f05bb685033f7b720f1f65b68e1e2a4a75f5d8fa552882d359 +f73aeb7f5c9b021d957705e252a8967250725db755130a1d065e1daf3eab0df4 +8d738de604fcdc9edaecf904a444990253e89c22c7843f2a98aefd4347a39297 +5870f3c6e00e5892f2a426f9f021461420ae324cac9e5d87cc2f4e461cba9965 +03609650048cb8395866a2e1f101011a47927a09a2dec5295e53d3324ab969c6 +68d13d9949dabc05a269e1e60e67324d378c775e9a3d111f595ba56d28947f80 +a59da3be5e278e26eb25bb44b5c58375e03f7b572a3b469d416e653348e2e0de +370e33585e89ff435c40afdaa94a313b965a11e5266ac17e66bc646ea8ea9ae3 +5503697fffc1112c86568b8b8c9690a20d5b6ad87af2d9d344e15593637a1aa4 +020f0e06ac861c9b582f25dc8a7693d506e55b54608b13bd966b03fb985800f9 +2e4924a0de7193f22d85c17c3875e36af67f93d7c4d4e6b688f5fee73847aa4d +5083ab94c44ddc16c5a1870f70e1efabc786c2486c540cfbe40eba609fbdd3cd +2c78fc6d4beaf3bbbe734812594df1ea162a3a60a6a6e8e3d16b714b67cf241d +138d2b3195c169d531492414e42e43a9e095df0aecbf8d0b50c20fb46bdd67fd +2f4c385739f6dcf62794503391ad7b0f95e7dfb3aea1df5b3acd3534ff80dca1 +06edcab8b62f6623a237beba86820fbbc3f5494963174ec70589c74fdcb2bc81 +2d334b5806ff55be03ff9533affc359d846ff3e3e84af3104e04342709a56ee9 +0434803e34fc4384e994d73e41bd86467a763446c6dfde084d5f7c39d68eb38f +3af297a506afb96b0f237efc9736a67ab71fb3de513b46df2e5a5a617986b45f +dab8a9b53706eeef04031db7fe82b6112806959eba4e93d2d0e6198fb2b34396 +c21c9324469d2b902c6bd11bc6b5a253d1167cb219522b9f28508f276bd1ccc8 +53e5382137334791027c7a75165da17c7c91aef870c3807d2ee21f97809fcda7 +367cf2f2283c3e55d633613fc4361a622c2b92a3dec7cb4aef6a3a346090ac27 +3a45e5225d95be2cadab857475c99e0fd42772135373fb1542abcf0226403588 +b4b9670a530bcdf53e438fd378e74b978a1ba8de5c9bcd6cfec5fcff0cf4984d +00d1f9e20edc13d1c6b05b54619fb71a161f53a5abd93664b40e1ab142d56aac +d6460d0cf7ca4c08dc511d4e8443bba0551e879300875a0b0dc0ad27b9760958 +d3447e859c9a9ad8a33ad3f23e620f097492baa9bf64bb7509d64934e61effaa +fe305721f1e16fb499b1a429fe114b2502a4e27cc9a51834a2d2f72dd26887e5 +4c949c17ceddd75c2308289792454a9231f1f7f315eb81df3b5154606cd8b1bd +fef64e8a9baeedd700fff364a4f095a83e93b120ce5b84485cdee44cd3f350c4 +f497886734450b37bba4c79182568c5bcc90c9e02b7faf3c80b10f0b51a505bd +3f1c2381a4c24640f05ac3a5e921f4a10f7b0bcb4f0fa89dab62246b8a2cdaa4 +1eee6a3bab3202cedd0ac31caaf4b5d6b7aa8039d0c1b1ac5093efb5934234fe +7bdf9db026dbb0ca846b17f70f44caec70c46c1e100578fde0203de35d4da61d +6c3d02a16f2efca6ad2a945bda2649811bad320d50a1b136500b31ffc2f94fcb +8901e5690a413c0494ea80d6cb1273f5275eac1810ce117b8ffe2886f574d9b3 +92969e4a2727230cf2272fdf4a80ad8f468be3b988099c9323559bcd6b9daf6b +b1c99b030ad14ad3b24817bcbb000eeccf4d58c3a039830cac27d542da3234c3 +39c3ca12bb76c7902b9460196b179b862c828e70ee14dd00c4b7d3f2cdb0fecc +496730ce54df62179461822399915b4179fc9e82f66054804426fbfabfa00147 +c0c08b7cfdf3a1f40376cd25df979c22059daeaabfa3e9381dbc018567f33332 +4ebb4bbb9a2a716e981c08f50edd0188119f6558819c5c5e30c6194e1d368d0c +b7fa14e8007ecfc23d2d915f298577e24398eac7256b1f5b8b42803e19c2e9fb +9b0d1a442244a37e37f8317789b146a90a9efeee164027bae8ee2a554dd710be +a37245d7d8fe4bc181daa31e7a9c3ea45e7f5fc0d8b067383866ca2b31bbd477 +a112f21328d6335330e3c9d73dd539946fbadfc929248b1a188d3a939ce6dd03 +5ee7df4d1d3839e45d7eb330d5718d188305308078ce4592ac1a22ea191f38a0 +361069092b73365247e3079129a66776e4c9dc710900a7026191a58892baf21c +87dd52e9a2cbdc56cf6bfe6639a5993fde25f51596e2e69bfe9467f176714970 +696cc2729413f13ab0bcfad5362773916f720e44d4efcc1210de50d440a31b8f +9cd78abf97c1cb335654742a83159fc1eb73bc395438c4b3bb6f25ce4f8c55ea +4f181e32f35d6cf89def1558bbdcdf825677eb48438993f8f53902047d4fa7ac +26bf4346a1c6a33ca728a0684b56fbbe8e2a2c4c56c8b30d67590b0073792baa +3afdd670e360fc2be8e814b85f75c2caeac7c713da4a59420b24508d0f70d6cd +5a99f6c93f0e53c61f11189681f594430acec50f0e82dbef9a50aa119aa7971e +d308f877592d7e895b7da95cb85520f2a12f7712119ee74c1f90cb8c8afbfe33 +f5643d7608c7627cf7ad454029a34a637df1f2edb7b3c65d12aee519630cb801 +8c5ae3a3e2e361b1d45c5b5a7dd2bd8ad36243787e1b194558416521404b7dda +318e1e1193241f8c2f4f9434d99985e394e2b2b20f37504123ed6a3971b671c0 +cec7a460320f504b3db8d68d36f1325bd6cb5e5e587068b0b3fbe881f6578424 +9f135ba8e1316a54f95b216c6ecdd1936c9cd1bcfb4d1c81360bd43a51666223 +ca9e49a3979384a57c8bb0d6d3f281524a70949e17ef723e82b436a1cb309154 +50187c568402f4391adbc77319efa2789ae418c7be2c73c6395978b6295dbbc1 +fd775d46d96b0ff1e5dceeeaa1a05c71b94eb0b64aeb395dc617236d12667fb6 +d44990af4e81320fd38ff34865807971077fc085ae28e295b2cd8540fb15f63e +3d28637bae50ee1862330c9eb641214a6b59e0728d2204484cb69e6e74ef2f81 +aea86e6a9ef47ef1ae4a8e632a8da6a5cdec6ad59f95c18e6ff03902c20a0ecb +5a57ac088a56d706c2c2e8f21b849895408489f2d90a3d64f60cfaa1e214645d +208ff643869fd751ffa416f80ea3d03527cce41c633b01470567ce922fd78769 +c220c5d82064e9addcd3cd6b86f9784a1e1450fd9299f25eac1061d1c9302b9e +e804b887fa656bafee817f5b0e389dcb38e76185bf5a4fab1ba1ca3b17c20818 +b00cde6d18a1104fd29ccd565aa9b04d0519187a6ef2bb986f9ecba4ee7bdded +4139fde691563799c888dfd732e577ce809bf3c93b9f00cc0e872dae44bf27cf +e108a8198a6a680ece12d43e72acebca0e7ab5cea2a5e1c8bd7e539d04543b9a +169a98dbe905a55533ac997f3febda5ac672d6aacb348e219ea4b936bf07d7f6 +8b0c248ddcc48599de57e38ef5283c5fa26a4918bc79bb9d5b2f7d813749510b +db51e8aff2d6a7db718d52568a496d05aa07ffdd62b890b9215c7b9daa24356c +4091b078137d6904c67abb2010d3ce2a7da2c0a7a8eefe9bb381403b7a041b85 +ca70f7e34df841a2997b89b22fd145103e492a0638c23bef0a5bd9888d0f8c77 +1c2cf2f702d1ab4f676db20e3757f9b5577ad670a0782501b5d71c5a0553b0fc +77ee58963af6530be2b59fe2e5f00758ef2cb0fe223fcf1f0d25160ad481faaf +83d2e663cdaa613322caa0e204e1ce1d0005c2222221260470b98593c2aa5e8d +9ad87f471deda4e9d3dc4d1d4e076e86f0b48564a5d220cba1e414d825049301 +5f52c19a0b8bee5dcf7f0465cb8c8972723fb5af17986053090987588e57c72f +1b2898cb4d029129086823fdb7ed41cf2c5424cd840866165a86103a0638c6f8 +13e532699923e30abc07ed343e6e151a40cce9fac2f4afe78db5f311018e6044 +46cac948ae0f0809a688fe3ccbfc1eea8379051b31e55c110e1d31ebded65dfe +a6ac163f82af22d06bdbbb9d239568c9a582990281ead3dccfe7e96f91ed2809 +e50dd2a7c7ce61267628cf188d24a68d6d396ac1666f80ecc59f02becfbf400d +34ff63da254e4b0bc7334e4c44d59cbdaec904b8dc48d4c53ab0a43e6bb4efc4 +2aec810c1434ee587aa97183f5471a0596a633a07f12e9ccce904bbb8049253f +0ae10d99d7cea785f1afa56dea147ee8e5503fda4cb77bcdefb596f0af0ea2cd +1797d2c78989fd7b8d0581a28b4190fcd477fd287d7e6bc667247566871c628a +4cb2dd84a4e80430c35ffb5d6cb6081e8eb6655b7e084edaa65762ee310ae0bc +d7ee96a87efd195ac41e580abb369ac2f1ed97a1a3e0666a3f1ad47aca004ae3 +0a501d016cb19347753670f7af797bc4d4f712dbb86210394dbb8dbcd97b24d9 +c635f208a5a3761ab2721fa7c27dc869fdeb3d37ceb51b99fb509cfb1cd9a485 +985fc522cca42e500eb90beea004b17de602a89cbab0cee43472fb8b92254e4b +829d37bd2f05d1650a0981a9da97a150547dfa33a9354308c4345f2c764fb9ad +1449c4a9b78cda6257cd36635894ab3ce7d9506cd62edacbe5e2eb9c09ae53cf +7ec13e2e6634889e8382ce6f287eb1b1c5aa96b51d3b58b1966eb15cc741909a +2bbf75635dceaa1006b6b51d1a7e26f0b70d75ce32105fc2736e03994c9b40ad +6a494e7814fdbcb7e6e2e6e0376ec61407c4f9a615588f9a1e3bb189e0dfd58b +cb16bbfbfc488d5552a5d3fdb3b89e75ebb7f835c5fd8cc0603c3bfd885b35e6 +8e5bcafa7b7b965d43f5733895684860daa363b286608c7132b7897ec3745311 +2c279c0a613822ea002198978b8a17d123be212f92740df3368b6b563029a7f6 +5728b01097c6cad428b2443d6509e0be16472194d370a0ee38c244c6580e8823 +ab69f178966fab9747f008734b6cb17d5d6933e909ef51584c5046c44440e31d +a8fbf6621b37a6cf7edfb207776f17b2edde5c5f2d5ac0a02cbd149735303728 +1561d78b90a5383150919c363cc6bb0125e2f98b18a5898268e25c6e5608377a +2b27e9c0f42cb4aacdddc1d44969c2b3666077c3524da724a73b727ebd00bb49 +4d8a4f31e6ccd50d11973d1a4aca52962ce40ccc1885de22e155d34931161908 +ea83467537b5f52518569e017c1be5bbb969cdcb5a4e0132f1bf936f8bf0f364 +965de44c72c2db4ae7cf78c062dddd47337d00a86a57c0e933d4b1fe3e0f9fa2 +bfa96b0d194a973de47952ea3d5e345c66e8bb7aea6a4803e2b80968fdc4bf00 +d079cc924c5f7ef1ad9f7fda2ec4549720862123c5101f4ed49029f1c7ced284 +5c25b8aa0fed6603a11c93d88fc687c261fa50a7fdae624322df5f4cca4b0456 +52f74866514f001b4d4b086fec909dc017322f04039c1e50d4158861c97ea285 +fd5082c75d0006bd4d79acd28d61d3cfdb95ee9e9bdd4ef7f00a4e3410539323 +74c00028ffb036281e21701a410928ae9601c70ccb3f11070a2f106c9b1345e1 +00b55d3b03bd188f3ff8ee931afc995f2ecfa1f67933ad75880520ca85797533 +fd9757af89c8ea1d4f5b610a15bb201ee88622e53b43c07754815bfdd622df04 +5b72808c1bb63bf3fecfc42fdd4997256e4dff2d7c3e8f4798df6159d1aae86d +97673d1676d31f5e5880974e41a71f329346e2cf287b4e23364aa08d4c32db0e +e669341fdc15a822cde9d23aa198afc4b4e02f50d1e88fe911fd2af21b9d5ab9 +37b1c4bc3d417200d32bef3ec90e4cdb55f59f4d215ef184070dfef156cf6483 +7801421e2bd2dcab2f3b15bcba1f347ef9e903d97f5e3e10b3ea6a78c6f080a2 +1666cd3ffbd53c25c5aaa1f86a75f68eedc88f2ca5bf4c12f7050993174d8ea6 +19dc5795aa2c821874ffdf6229d6aa2b865d4aa625cb0857cc2954993c15d65a +fb0d6ea64def60b99f41c01b2f766c89d24037afbe3dba289515659df616273b +c8189805628a240542a8289dd19d74658b7e078a6a5a43fec7b656dcb09723db +6d146088a6bc530f77f116403f2d6c929fea082c53424029ceb278e5ab8f4013 +77c2e80cacca080a30f5a250c9dafc3b11e694a5405333bfdcc62e1bff6e148d +2d1e530a19781dc1b894cee9d1d21375a0270241f625f81388438902c3d3c7a8 +24cd0101877f7f5fe8a53f0cf5aadc1ea2b6ccf8d25ba3eb9c6414b498099892 +08def82b2cad1ed273578daaa57458060b4ab7d6d6a5f1712909fed6ee46a8a7 +0c416cebbbbccb3d1955f7b1cbb0349c0da26051febc1ae22d91c61f6c7e3269 +abf1cc617085d0c95dc8d5db59824e251270c9bc9e90a76c3d6507baef31addf +f17084ccbe25979fc522f7f0ff8bbb79a8369983077a8df472ea6fe8ce67212c +c8ecd9c6febb5cb73b912d02afeb1ae17b70d3c10d4d80c7c6d8e69cc0a3640f +a63abcc6b878550f2819d0e2b7a2a1bcc5c89b5515fb0d48a41903a6c89e9b0f +81e100cc0650d0f26814f83a94b832e97e27f0f61cda1ed7754f75896f98d85b +670fa8ee8f40b668e39a420bd4c6cdc671690e4b6783453f3a23c2ae9abcd433 +ea9c7f08aa56e42ea1e5e72bd08f16e3626a56e5daa484103ba2bb2added2b7f +066331d2f25638940ed1de5895ad5708c8ddbd2a6c26872e3e51057a7ad3ca25 +efb94867e7b830a6c0229326fdcf9ba34857283241a778a1e2171eaaa95fca7b +2dec786d15cba71603a9ebb8e78aa87bfdb6501a5d8a7ec412f2fa168beb4624 +865d8a8c81095d97a2de40548ba8d648d8739d57e2fbffc7140f7600fc39eeb5 +185b657a09c0e65faebecd0204e098233eafa823a158198240cdafe276c6e611 +ffe3e809f066dc17f4e8d80462e697fc52ea1e8585fe2cc6bf8abb491e9f25c0 +b07769102630a86115a8bbf8162835c463e5cbd2ced33257548cc80bcd469d88 +bb81be500c992f1f5281e03f0813613376541cae0a8b50ca5eba356edb0ea0e1 +816ad83aec39b20f9a9d1c9f387f276ef66510eb1e43ebafb4b1505dd73040cd +0bb2c9ca2551294045e7611025daa1460ef1db8daa7e0b72d2352769ec448ae4 +82454c768d2de4574fa3c60dbeba75dfc1edefce80496e1715ed7dd4a76cf5f8 +aca16e3a6c90607d4a029c4b333a79f4c8a44be6d3cd719fe84d87dff21695b1 +98745c357d2f9ea0110a51c85fa7cc663aa0623e5d86589d40e05bf7bf631d96 +c2ef64a9818a59b8c672b47299bee378fd26445cf72a9becf5f7f167b112347f +9a6e0c3d8f5a8edbe74d2e86f4bab15e277e999c0eb0e261baf0743d30d06d69 +3b03a2670437768538d615bd67af1c0bd12c50ce8dbf201e65c9e3564e23075b +6b43f7ef3666e322f29f79ac1ce2720fdd9182130da8a3cd4081cedcf405f2e6 +c116417f1b0f8b7b0eef83bb9f669919464618aeab2630b1abca823929901441 +cdabbfd31e65dcc116bb23c0dffb47d3d2c26cd35db427aeaf415c4ae2b72cdd +54f50fea0b834b16775a2c99e1da3e181c67df3cfc38c4a7cc5d4519a09766c2 +0b131b2ccc44952e1f592c45fd549488150c5b3edae2a89f519e33c501635b19 +67715cc535be837ddfe87af3a41bf47bb3828037f0098a48dffb28389761b939 +47020014582de436f70366a11a6e0ab301617eea50e1083256e4645470dafdca +d5a374d0a5c133dfe487faf012c2e6af5065f4addb169ee3de06d4eff1448fe5 +d75c246faeb8d014bcdf1f14be6c5eb37e81d20434fa72991566c64a0470bd3c +da17235127691f607bb03a284d797e8a43227abbbb070e6e3399610aad406542 +e36d48f0f749326afdf10209d4983948f18fcaf10a972a0d163298bba83854bf +31222a7e0e7b7162c2d891362a29848f9d8561fa6ebc7f243bf3fb3009762f3d +01f69dd15b35ca0e6f4e123c6ececefb7a6470617d1f94ae6cadc231e3aca93e +c44a2f5f74b859f26bad155c33aad5af2697b5175bdbdd27b0a11d0d1a2e4a41 +ee81606904e8c82c7c2bf6d1ca9603ea6ff15deb8f88c6b07ada1d2aa8927ad2 +2bf9bce86ae854bfd1f2ec1728d1d885490dae3bc7c794ee7b1a66f08c6d465a +320d64709fb508c9733d5114dcc024e89ec626bd3a3f22e5125d81c21be9d34b +47074fb096c6653a9da693827bf46b47e8d3c3efaac378d632b03bec780212db +5b0d36f793ad26ca3e228b92e231b710d1497ce91e25b5aae786d0078514856c +416d24fe615ffaa3703974a03b204f4c39d5555c3d7b754e13c5086763d6e0d7 +d2010e331251e8905463b732d7a1942444b3be76bd1573a50d8b641dffc91d58 +9260cd5d4abd537d640301966e8a00e4a519547b82f5545de63e4b83490a6ce7 +96f81fd6954c54f2228d4d82fe21013905cbf9e82f51ca0e5b33b2b1fa2d2eb7 +a946ebc186d35896e22aa2cb47139472d96222eecf20881d96b68588c99af51e +6d192a5f025cd327d43ffd9a71115c68b3e05ffbdb66de1e6078a2971f5bab30 +154add05168896e2ea740c50d7e050616c6ac1e4f5eee0dfdd32b327ad1f9afc +5c85deb6a80e1aeb12ac33b43abec6d80d04cc1c853468eaef48904339052d7a +066e1b3321ee28da52050cb1e3a2b06c307620cafc4ea7e161b2eb6d1d875909 +c59ecb201a923bd1d92191d516f275fcaaeb994a2276a659fb1644e877a4d988 +d777c66a0937555df12af6122efa0a7f44e3987e023dfcd03d07c66299e64083 +99e3d5c1a0b8c011f0b57ee1e394d705bc1ed7845d2f9ce93d2af0741a6d3f29 +a3b6711a9bb5d240c3ee561cf768a962a17ea2737dcbd68bf8825c0684b1b656 +c0c0ab5c590544e38237ed76cdec39fa7ea1ca652b205318833d250b9075989c +a6688879c803b105b31ebcfa437cf69e2020b237338ab26df20d4a366341078d +131df8d88cfbdb1dbab86a625682b27225432c2be50f014d561cdff6af0e0068 +4af5c3909ceff8086d7b9d202eafd820c66b914e93fe90f482211b20ccd6686e +faa831055318dccc9d58247166d0b7352ef5e5cbe59a90b21d5bee8bb0eebfda +0b17715ce6e0121d228a31198abd19f40abe65945f3a0c07f723dc017e4b5a78 +9ff33af7d362444016bd9937ee33abcaf377cff7c48c0b52d11ef5522b5b72e1 +493f662c21fa06466c30bcd7259e9fb338235469669a2b170338e70a64bef314 +28d4bc9a1559b400de32200befc017450649637527d623eb7bf7db0a176b96e0 +6dd724ef72b16f9ed47dbc0cf170f4d1483f563358208a77965179392e0ae7ef +1ebc5bfeb197f1ed11202246a3c4e5f5d9715faa5c31af7ca3b5d5c2f94d3622 +f9810c01ec43ac6ba7f104f8bfbb2278daf47e320ab9467c818de541d2f9365c +b125068710e205d88536eb944c9762e479ef4d80a212ceb52fc49848dbfce97a +f139dc87fa5efff1c4c10981e5eff7d9ca0bf8601703bd02cd46fe024daa17aa +ee06521a6beb5305bf6283d5ad7e07ebba98bb16255d4db133ba8d0408422421 +02b080adc7396c567437496350f316a504e8692f27b2ffe50dfc2acedd911149 +946bee9c92e067bd77a1ebecf10d6365bbef4c77f7fb2086c057fa8def19dbe0 +912aadbcee9a520feae2b37a6a38d42f2bf205582ebfcb2587b064e5a58f9965 +d04e396d2b77616b4aa06946bebacecba04134754509014b8d6600cbd44e61f7 +0297d4e220b5afb5adebf953d36c5b8f8279ada4949f125cf48ca4a095b38905 +b632c82d44d240c69b2bf22e05a643822e8c0b4f866e4fca6e4d74894c231802 +cfabaddd79d5765019cd889423261008f7e24166718a7952a98fd352f1cffd13 +8bf6a3109e6595900496bb6dd37a5b90566da6b3eb85f47a42c2a6d75e63bf35 +28e51afa30ae9289002f52bc63dcd142d868c097bcfa277d7e33db09364ae63d +6fc3efc8d86015010dbd2b3cf1ad7f3fd924bb6ec1cc053e36c815ea6a898edb +fb8cc2590bf5fe12eb5ea887ee1cc595816b6c13926c70dbf57aec794aefe523 +bb57a9fe4f5b1bf0c164c16a807a848b69ba2a5ae2058294d82c93e5c7cf3db2 +7586e3972464bd2d50fe417846eb0fb66a55bedafc7a872cb71e525c6049fba9 +8b7af8974cbd4cd615e7f522789f3fddfa9b9fa9419fb2911ed063864e13253c +ab6a0c066dfec81087483aa5dd4be1c11425c90063ac4c74ffef596bf83415b1 +4f67808b9c7e8ef6e3a245c463b5bf3cf740a57bc6f5a26570bb5f6de4aa608c +c2ad0a662599a2383f90f1331b30c33074f5a086322657d1d312fa9344d85364 +c19776949b7326925cc1c25076ac21d83f78df0227240d530515d39d2cfc369e +a4a058389ee4ddb04f992ef9cda732e49ac24eafdef43a55c52dbd60d31d4e63 +926226fc141bd929dc38da9f00aa8ea792fb030578ce0ed773f96f86b3376ba7 +5adf45e29e5647455cc4243583c9e3ecd1d22ddc4885bc42112735cd5c857d17 +d88d690ba09df66fff359c5ed3058e75b8434eee7d9f87490ce699590ae1b948 +f4d480feb7a0fe1466b7657ebb48b428b33486e9aa8486d18e1ec979800c2ed4 +f9e45ff2a0db947a71f63f151d99de712afc8b6cbf5c5ddb52a6d2a5b623e9e1 +4da748c0b5dc9a9fd677847f2b112d22e7afb2e80a66ebafc58c2f7ccf9e3593 +1e660836352ce242be94e67884e63d1d2febd818a8c0fd7a9ff053057b69ecbd +fca07e847e7581c454cf884e5ae489649548711a09d61ba61cb88cc3b1647cc8 +f591fa105a2ac1ad1658ba88fed619b86e8897b94c0dbf41d855adb4ba99f556 +5967afd48b4af2795fba9e64f81476e40c8ff4f13d258011bdfa20ce00d36c58 +b439ee864967646343cfc375b86e1b00c8e671cfb04f6dfeb5fd3db4ba844526 +e8011ff55b06ba056c85ca49b5eaee80cd998c452d14de469af1d59101aa7eaf +bffd98072aaf63034c0a762b69b96960150efd4b40f0495a7b1f3e9a1ee10a07 +1067926311805c4d068d22d5f8da965b4548a4bcd1430a277489f9c8ca883c45 +65d206ee147de44d01822cb8243e2ee6b46e3e976b833cd9a67be8f0d6913ded +2ceb834d4b17bb13d99cfa6f3bda258b0d61a5550300b9fe2bab92e20d7db673 +aa5200a024cca279a57cb7fb1dd5cc255da04381a2a0000483e1818f5dcbebca +29651f1c33d5eab294cb68c712d6c357f673d3403ab1a30be2f20f005888d23e +4dc02b267f0097d584b06f4c6bce06b100ab053724974f3c11b05d704000a790 +91375cc797e2f76c7e9007bc5b5040c9df124f913c4dad32f87f3a84373cff1a +c0863148e33413f919d8ce1f7b3349169c4bcda260f5b356223f8dc42e4953a9 +794d785b06051a3a6c0fc23d96aea7a71633b481ada012fca412f1fb35dff00a +ce083c05bc590e30d76e07802295fdc29f043672c8ecc09ad16e393de08e9868 +b9d08977faee0ed5491e706b68399b8416c70cbecc37ca1ab18ae5a245d60faa +fc73c79e3832d3e213c0b9ced9178642dff0b5a44a7a5c9a471949c64151a096 +83d5ca482f3c624e5fc02359baf74937756ee9715e64abe99a4c402c76760286 +25afc1dd0ddedbec9989b18b486492017131c5eae8553f7419fcf4065cd00555 +2955216633415bc5713fed997bc2c717557d338aaff36f256a99c7edaac1e3f7 +a2ddfc556bf063963b028288c1639fe821f0ffd7e898a3f49f2933fc003cba61 +f72a18e6d715006d8b5376ba69d3f8c942c6034092c2efeb9b6acaaa0fd308b7 +91f5d1723093cc169c855f33afd950ff7172490b601684a8d9a85c36e21e2508 +04109a94519980ba926c15b0034f7eebea64c3bca92de9d57c6f52d92be3e4a8 +67cc27f33cd69a9b1d07cf427979208d0db76711a8dcd0a650329d2b30f8950d +955870cc2581ac304892fb83c43c75aded1096d2415b2c5b08511477ca5bac46 +2fe593062f3ab303cddb1ac5876c01bec50a0beabc331e8f98813a2b10c1eaad +6b8401bbd1e5f7a02722ea3dfa1449e10e67e5f11bec54af2358ddb2d7e27781 +e57f65e60c26132e437d45c4f58859d5b285620210d6e00f4486a2950f49354a +e7cd27ca0d24b94dc969a6acad1cb0f5aad91ca663a4737eda23bedc5a0d21f7 +5f2bfc6fd209015b3d4debcf22b80c31d3dc848a01a810c123137364ff836ce9 +e4bd4fe566e9f4f99a5a4dc1989be634bca31d5001a2199a2cc7fd9e60e56f0e +70131b786eea6f52fc8e577a611d5ec8a526006dc20f30d05b28a7d09ed27b3c +f7da50840b280b5e8f111212dafd1f1284a2a865a8a981b62d9d01ffe7986132 +089a4e31d634476a34c2c7df25905d60b0848c5b0081d2a40df5b2f251c29f39 +d4ebb3847841bb0c1cf3d3147714bfe7b6f234a70f4a811a7f03038882f8f8cd +3553b04f1cde9ffda33654d2b90bb89be6417657467a8eb350674ab0ae490c81 +870b7122ae2bf6a7ceae0b1a529037a6d3228a4d6be296b3693c885e616ebcaf +7397e281cc4615e42a8e7ebc315a1ac3d653f53f2d825c1268ba0b11f3fa7ff7 +3320c58dd650b59a2194756051196b094735940b8c8affc162128db2caba4b94 +4b492cd942da75a90f099e5b0309d8353c25fbadb2f5f22ef9f7c406e22669a3 +3985b5c4c9924afab90173a481007c30902aea5edd6713ec88a1a817398c33c2 +1b7bc224503addd1d620c42891010d0c1cb3cbbade929e06dc9c7fc03af9f72f +98d31b0246319d3e3048e4ee352109e895378184ac89240ecf9b9d3c02cb344a +3afc694f5353c08b89d619d3dc4f90dce43f7a15b57c310492875dc56f2f6675 +50acf29def790298801aab7357786b9ba6b9e0323eb62252faa3d92de4e3d933 +484347f6d369fdfd218544b087d21d8afa1d42c301125353f280d34110828c96 +c01ee757f87082aabdbd08eda99394d6d63631a4520b899ae2fd881bb9835042 +9e0143118dd6d1cdc391551d2313b3b8ef7369afd8c73be337913bcb12043f8c +35d22ab1b596c97919932c539361d2b76f8705e73332616965b6c554356f2400 +f2173020c1b390a42957032c250e1cb6d6f16970be96fa03fd92318a736de18e +6579c1bf56e9a97d5a9e890eb4a327af91f2785bef47e53975a298bb341ac94a +36ce188c51ff825c892218c936172328c764c0d6e8e3b033f21f385d9836f491 +88554675db4262c50cd16c935d7a7fb099495590a9febf7e4425c98efcf85b85 +a6533ff4ccae3d9cf7a7fb474a82a96e603ae244243867b37db01808e5e1ca6e +7dddb75bbc430f05c504054cf0c17e696d44d54b5e7b435abe8f3c4659f3ddee +111f4733ce8bd860f0229d6aedb750d409803af5dc24052de5fb3d5748050fa7 +ddfb1d10281b1da108bb2f4e75b6359bb9c201d1e03cb6e978509207ab011c7e +1bce3465f8d094d6c8387476bf085d2777f004cef9ab3d45448f6ade13bc1653 +d2d1fd19d262eb73e4b1d1a27a71aee8f95c9395b89a62ba0eb2b4383c5bdd8d +600145860eac799b3e44dd07a1707e5f17b6f50f869c30204c7608e31d26e504 +c5093f367d334ce7f5df34f7056108fcb29772e2fea6e754a814feb44f994029 +f291965d47fa5e1a3d573daf3a1e1cf6b42800076f08a978e8e3f9b2756405c0 +6a10330b0de2ce7115e0d6f38ac478b78558b3cfa72609d1d77af0ab4cf5b1c3 +dae74a0853a596e770a5cec2f83c1de2f7c88e2fc32f1103325b4b016d81a79b +ec4a7fbf256fbc2390d9dc6fef29d77756298de07940bc509d923abbc7f0af1a +88e58ce8ab15793a7e367bc92ccba2621824c5182f89c7661b09d2f700f6c121 +eb39c71f51d15861105762ace31dc302dbfa35471e36662e09bb8e047a8df15d +18caa358514e6e521640896334930c63b6788f2b7a07015a8189e552afb12ed6 +7a5e501e21ea2bde61f41459bf17b0429e4841475f8182ef8b094c327efea8ee +c638572515ec055dda603cf19ddcd7d49524b704e59c5a72bb2c698c1ae22206 +3ca2d5986c1556ed878d655f2a377516c00762745d23ff7a419e86280708bd43 +1b9abcbcffde462ff893adfd0380a66517afed54910bfde9cc89c8363c1b77cb +9ede778073452a938cb164d16844fd2d57300293d8470b2dcde48068431fd76d +2c5d3c57c119dbf35be30c61c8e877657e8bb43f3e899a7f504f7035dff6ce49 +fd345ffb321990ad32c69a80fb05a49fe88f0e71b83cfc52efeaba89a22895ea +0acf7101d4001fccf21d431587b92f1c44390d6f108d55d7ba41b7b2ca3d65fe +ee7c79d7f017cecb9bea48632f24e4e4553affbb99ab47b0bde0369eb90c696c +25c204736a487f8e077be36ab90ce02d9db48eabcbbc434f88f3925c2d0b00f0 +97fc731362dc56596f0610a9f53e85f7552992a082b666a3720dde6e9a233e5f +2f3080bcdec64d5150545fe4025cd5cdbfd5e10d5629a38f27c242364abca7cf +8e079ae15ae9f202d93e3a2dbf1a8ab63f2733fa828d7bd62b72e0d80562b32e +3aae4fae3927be8df796b91e81c3926bfe956f3dd49578570fbad5a8d12aa1f2 +7a60bb8c69e93b87d63b4ddc9070a768f485078e8854a76173106807b812a6fd +bbd58098cf5fe6ec1cc6a3e2c06715f777a95d7a04a99db77d81517981c51991 +4b98973d0fdb5239cbcbd714c5ff1ec49c78e015a7367facea6f51202316547f +a90a436969039cc96d56172c1de21282c92a18580eec7f238a5a6108917c164b +97ae4577db252d0dc11cf73ce5900073b4a3753be6827392f1f6f0dc3ec5b17a +6a62afad493abf221bf2651c46bc02701296c3fb361ae6c50aae68874933b0e4 +b03f4b2c88a5da24d7c0c66bbbb9c0321532b6e64d7057f8d5389c7d3cc2bc8d +c6a018f0a03c37f5a05a5ded62776d8bb08933e6f18e22e9b00c3dcd0a482c91 +dfee4dd043a4ccd3f16460301ab3049127a601136b7eb151dd1dff0d9081fa34 +b1ddee3ab5a737d64933d4f540a359f0dbc10956a97b14c9246063a9c24d483f +e40b8dde746dc1fc16600c4413323abc9bc26cffe4aa3998e01d3e9a704ff82a +7b3095d04cab50d34f99263fe9b82b96d0877ec49303048f0a4474435814250f +e83f474ea36c3236d7d0e73011df427a75358b47d22fa8cab57c08a35fb5706c +6275a6e623b931565b126ef9019bb430a961cd1eba5675481c8bdf0e26ef2005 +bdd13ce2fee6d98d5395ef69eea216fd60aec77e235e1f43a95f22e805d5aede +0842b1c5088fa8a049bb9280e6f05860747827e324785ebddb5ff67511126c73 +b11fbedcf0f0c46281696b70f53ed448a0841436c001e1138b2e7ce624baa840 +e3f8f562e39d0f40cbf26d5e58a459775902ef217ff0a53d7b83bb96904ee205 +8251d5f13b0cc9d147e1026cb165f7a45a399eebba91a158b368221e64ded31a +1fa453198dea4ae6715be623a7515849afbe2bb695a3331f9049dd36a12c1226 +607292104bc1c7492234718bbfbed30a2cd2ab8c51cd8be380f80fcdc3ccdbab +a154b4c3bfca94b09eff140c6abe077fdcfae1c0046be0e341fe27f1229449bb +b83632d98f61c6f9c220a3c66b84370fcceabe477815ed085a7eb514a320bd9c +d94d88f00d0bc88921ad965121f42945e3c19e81122b4897718b576663752010 +51a8040e3bf32ee862723065ea3983881e0dfffd357d5f653c5d08317a74f78d +ed14595c9888148cb84d3810c3ef94e3e1d2c38c88bf5726c58a1f00cbe4c94f +4d7592d69c302bd7063143a6a8469393346a1a2a00fc2d60645e8e5d7854ce65 +2fa77d6dc309e2f01fc93a76d585dd0d14c0885cb2c48c1732b3e17253f5ba53 +14258d12d24aa9ce585a6ff09144b0c21ad2ed7635be0ed79285516f9e23a034 +c195b300bbdd23f6f26b152d01f100b3c6c332e2cd997ef73eb5d453d7f1f8cb +09cd850d157a62bb3fbb83a0700930862031b9482ada6802d26ee03e42b7696c +4cc6596b2df0f63378b90a3e1fee04fd37c856e48c58e7830640a0bbb1f665d0 +87d76a7432158434c4c91dcd50e5c28e80a2891957798c469d2333bb10fdadb6 +f9fd7f4e68ab15d7831cce60cd32d61edc6a827b88df5929d59e1d83938038f5 +1d3c7b1ba6bae35b410cc1b2c28a57e019b1d74cbb125a20af69f6a48a5e4c3e +4723cf81bbe8526f2ac56bc6d7fd0d80bedd101e3e959cd3923c63a4b0447e48 +be25a81c22311c68129e402d93dd5ccb6b79bad36bafff40839b804f94882d60 +145fe0f6e73c1c13836e56552df2ef38fbf7285df01319acb2e6f0d24e5d0df5 +5ce7bc3fc8994b32aadffd17b657b2ea91e66093c4433c48f184566b0bc31578 +5251788a2fe8b6b54bc3988795de8ceb66631036ef2cece502d97dd3f19961bc +c2862412076f72ba734a82643d416e16b3d375e27464cd4859a7a6175c5ec7c2 +f8e12e553c65866f48bea7c0267b03912c75fa5e704ac44541e5d7a32b83c513 +17ae48501397c8345cbdffba2482d890a16ee49db85b35eb77ce78979d52ac78 +40ab1d281758fa73d1d657fde026628ba2eb45d081f0726c9e0eb7d4c7753c02 +5544b5414f725c6cd5b40a5962e6e4c50364c16c85fc2fd9cb3b9f2cd1c3beb1 +992dc3399fcf13ca4f61fd26a4749dc27247b6312cca72073a4507aeb85c6be9 +bd4c77dfa9400eaf65a93c657994e5f5520ba8d62bd15b8e56c0ebc3ae66347a +dc4b21b6fc5fc1188dd49a4a7df61c41a51b7dcbe32b1bf625949def98508e0d +d40319f5fb74c384be6f1b6b004c8b518b70f7f63d4e888fcfd310832f4170b9 +4413d9b1ff6aafc24703ab27ad8e393ca87d9d4d3fa3e39a2b364bd852dd7e5c +05e310652f8e790263452da8df3bc6a9d5a0d79df3d3ab86e76bac613fdf0e9b +3a0f11fe2a1520a0cce337379e7085c5ff53a27076440ac2bf9411e0197c4f7e +7345d83600ee51efd9af6b99779e8fb6f70019262511345507251d9472b1b95f +a60f360e0c09076a50e75a16cfe3689cd949b7ee3be9051bcacf8c5f8874b83e +80aa814952f6dc5eb837b09cdb5abcb703d969107d10e3d186f4c8759bed51db +589280e988691aff0f125dbeb30035019216f26e647303c01e974543077ad099 +0fb5e83b78a606bc310f56343c9adfdb15eff65b439e41d9aca39731c8170fa1 +88628f4e856e8c500dea4956efa99461f28a743604966e65f52687919e2728e7 +c26a0e91216ee664970688cbb9e17248f6e9c22801e1416d830e294cfc3dd7cc +e7478d9c782cd7bb2beb53859fcbfca4b49fd235a2c32f9914309148087818a8 +c94c47e11b996e013cc68d88f6b6614aa744fb23c76df0ff8b173b897174415e +28b64e22b56c1587bb24f0ea8669f3c3ee15e08d1d857a965127f85738156980 +6283dc3abfcacf2bbad56501f651e252e9db54dea78e32bbab2e728fd1f2d7c9 +0ea4622652465793ae3a688aacf3074ba6b5f97b553512dddb6ce0e9184fe55f +a95af2a8ab61e7bb7bea7aa2a03ba95c05f07ccc669dad4be2a95920a87264dd +875b4d978a2634393b9f350ac74c796b86ac221499d99def36b66c7dd8dca880 +535ef00c035e40cd19c989f509299adc29e74da8036852e74c0473b893fd903c +df50ce2e82bf1cc82741ac2946daad2dbfd1085a4eb0776cea69f1882df792e5 +182412cb3031458ecf704f948eec7ef678df915328f28a33d554f9ffa52553b1 +565dca12a5ce5b899692f1a20d3a4c395e0a5a9ed04cbba5423b5efa072894b0 +ec1ff126234beeb428666caf7fa4b369d0280305a2c52512dd34488b10dfdf5b +6b56fb57475651dc8b45174419829a2350477cff9e4b0445ccb927c81ed854a1 +6d1132c41b55a4a51f7c9f18d0c0b1753e013cc150219526079aab30974b7e3a +484c0faaaaa0eed5bab6cf15d79be715eef64a02138bca060d7ecc350bda394e +046d136705ec21646e8279e524543920b055755c51184773122ea6995872e2cc +ad1641f620db4e68b36376bdfcb06db7ddbecee6b91d72754cc53e62e985ff84 +683dc47dcdc8498686de7bc356c42ceb3ca06c24071108dc82a8c9fb645abb24 +477683c79d488e578622d334a31f58b8d065576721472005c8f3cab5df2c5036 +89fc8ae697f5dd7d0eacd2392923778982ea473826147b7800ec1c3d2b4e54bd +92531b72bd0c595fca79327d29be258321848bb6805569ad484a8371448d05da +fbd092704f9b76571db4c05a95def7c0fa350b67131366c9a11a9e67779d9343 +6a47a4b03480b8bac883c8457b4581e65fdc4120a293847a57a70b80b3719677 +e2e8fd3d13aea662ec891c3179ce8d641bf11ee86a29c1dd49f64d8d898c21ca +77940da47512b4cbb4dafd010985d6c292c6c8bb840d76c058ce5f93650fc168 +14747d7572609a92cfeca42c7515e92a571483666d78f8f0cc504e21c2449399 +1edbd53ec501c22a223db86150d002256d7fd66f7bec986c7af85828e38b50ed +389bd21a9e72796458c988e460817758d6732ad440246bef578ad74144b7932b +3476c5d0227a763c078ca9a11c7ce2970b9c36da242e5b4ff85946843351b07a +72eb21ae9b9561e55cf325b992887fab283c396cfccd25c7c0095b79370987c9 +5b685bea6e6cf630344e288fd1c3efa3b71cc104b22df394027df0b01c18f8f6 +64ab50c806445559f179a49213d0bb0ca2ddd47fcab87e65bf01e3926d090719 +bb0d630b32b4b21604cdce750b3a2377cf4adb1e4422bd04b700d867f18b05be +939e24cf4b4ebe9dada220e81656bb292c1481aa5f184fc33e77db3d9b1afdb1 +16039bf7d21b489ea335b248ffe43bb9473950b79c2dc181e50c8dba67ddb7f1 +228f94fdddaceff750ecd0c4c4700b07c9779fae24670806da32fb4989f3eb0f +2a8d76a54ddd75fe0593efba91b2fec44c477e1e62aba48be7ad57d8c2028404 +86586b9ba1068ca239857007747ab346bd2733cf7ddfa5473daac618cf35eac1 +d616eef35c42a6dba08c9bd6ebea28e1a5a27f89417397e1463fe06a52dada82 +89b77cb4c12f297faa40ebb7601badab76a5ac9a09b50c857d7465d614fb1a7e +1500fcef0e8f83a53f2aff36838e509e848824e3c51ef984106783cbe2c47f94 +171cb41575f2bc2ad66151a3241a710003fe031ba7219cf9c38a6384bcd429b4 +0ae3fa0f6855f8ca96c068de12e6794c296fa0df4a63b7245ce1f836f5df4acb +d04d0d821b3af64242bdaca398ff36b0ba40181c21b2c98e76da861ce792811e +128efc5d4f20980523cd56d1f24416e14f3fa80921f90336c29fee2e3c74bced +cef683f221fd718c139e83d6698404b010b104479a3f2e4a2c455cf3482eeea2 +bc19801b456547d13e89d0aee8657f5fae25dde81cde257ab8683ae44820cf6d +ef89a3bf80f7dcd6516b65a4dfcf3e2993128872f5c2436f77a2a19482cdc66b +395bf34f1918463a0f5b260a3318a444782f645b6d82054aa20a8865d26e6067 +a95f6e01086b930cdfedb13068c93839e14b1c5f55d61a75f33d306aa56ac4ec +c8319a4908b09b9f3605bb7fc2fc7734ea6ce7e009185bb7c74e8d5bd33158b5 +ab089eeace4ab1fdf8c736cdabafb44ebf4d32ebe8f95829e4f9373f1d281ae7 +94688300af08322173595d694a4c7896423aff02dcbd3cc0370f8db05132c8b0 +eb672296c606e29f6bfbeeb74125aaae8e97fee15627d8919aeea48c7674e93b +26b1f0995bebef89742436b173c4547b653f2b53eb60f04a9caf5666b8df5ccb +7254575379666dc992de74fd372e8c0ee6b039647123782dabd10d7044d35a3e +84f0944cc8acd7cfa9be2fd20fc252e48246c1733a4102e9b2cf1ab272132a91 +7b931e2d9e866fdb5def2888793bcbaf9838b75764353123e02e4b8475c74cc0 +64664d4ceedc2d2b8c4cce86d61df362f637e7b9a9e94b0e0d984b1e217ce9b1 +0030fd1be2e6ccaca2c7ad9530355cc0cef570b4095fda96bf9dd722343fb40c +4c8a29758a75673736758ef0a03e3c45dea53150d14a3ff723c7d19aaeab3f16 +7934af515856e906ae78314dd9f4a64a0edf5fecbe7ef855375b9cdca37f93e8 +b73ebb2e764219a31d2a20b2a2e2af6bab7b101d60bf23ac87792d3dd89c5f7a +a537a5100f19ef80a1d757518fa31d306384390a125b8351740dc6920591d039 +fa0661a87f6b7f491c0755e46ce382337ac51399f73d485e78af26e03e71a28f +1b7896d03988814fa93831a15c6387dac60ccdd9ebd5d9463da867e42ff931ab +76feb189a5fee6b9d8a16e345db8f746391381fbd6c4a04ce002136b4d410491 +f144dc89df18321e463c1a8d9a0dbfb60665788a2e1ce3f85468229031adf2ed +d0906cacaa68338a9885b3ce7443811f140cde76123bb5f061b31201535cf34a +8101e8f4b4be24e4b7d177ce05d59a67e017ab0acaa325edc60646e226926653 +a4fae1403b2064e4075010920a210ffeab4d94e2c445c233ded0549d7781fe79 +7cd95ec0215334debd2c784fc0f7068f98f0c53ceac7e35326826a6659893976 +76b0f52b85c75acf259325466e1f1258ca5b50a1f357eb6898f8a344f3c0f55a +724605505efb9be5f1674b1bdcb6e81afd7a3bdfa37565d09b51bc0f7faea57a +0dc6d0f7e0f94ebf68a32702f1b3021a679e0933b120744d2e16262c4851f9e6 +fac997e5347ecb839dc74b1cbf6891ae117e0fa04046f6fc8ee982470d4b80b5 +2a272ed44d3b03f8128a412e744c7636834bc385fc13d75d1dc5a7be3d0b9baa +91e61836821fe34b1f2684fad9e2afe6909c12cdd6c000a94ff12c4f146d974a +33d958274bbcde1a48af1b50b030f64356e44854f4347e62ed5bcea67c78431b +df0db7336cf399d18910cdd24f6ee818a422b42609ed69b2ca37d0e794bf729c +c355bf5f14af018091d0aee86156bf517033db3429a2c379c6164f7a335f8192 +aeb1089fdd2a2ac016a7f27f8900cca43e42749ce98560a8c070bcb38d615942 +1ae0f338265ce9583b39c2df6f88da5eca11e8a21c5495a123a5c2589fa6411a +741472bf3cd51346827044ebb94e90056c9a09fe2d24f8e553491c30b6a5c76d +6239d4643cb28385705d7ab1d393507f58269f8f2698102637d4cbfbe0b9c7e7 +8592567e6e9a42076bd2be2541553367159271d1ae6c6b635fdb3b362e7c4d1f +46fe944226665828a148ea6ba41a9beec3de13aa685c452fcdefb89eeec3cc3c +d48dc0b778b99037988d6764a11ddd857cbe762180664cb70f939de44aee0a10 +a77572564cb5612c5100e6f5f5b5c537b4fd40dfc87f3e158a9bedd735b47914 +ce8eb0f9ad2a22adcb874077506d8ca3bd264079d738f4961bcf48809115b115 +4a5e4745d73c01869e43a8b02931fdaea8df01f8d35cb86b1fdda09e0786eb74 +f6e60756fa3cb8a5ae95f845ba4795d993fa3821f2a620cc8874a91546fbaa43 +7b7c6bdb787ab18ccbb8145aeb3bd7d6482f7bd611bede4fbcccbb269d2327fc +207f070c4dfb6bcb170ca67ac9beb2c00483b758f3d183fdad0380e81d2af58a +64539c67cb79d57b54432b4aa97822c0e3827a95de26b89bd267482463436e8d +b3853613152865f79cbe2097f842f897f9c4db46085d2f4011260373fdef887c +1af56264f7330e7a8a344b7430f2593ea189c536447017ca8f4e8752db53ce24 +58564677dbd31248443706da2888f2eea0112fe55d1260557944976a5990a1a0 +53527429cc0db118f75773c8d9d365847cb217bc0161d9e731937196eedfd016 +714c0518b9e897634c60040acce3c7c49b21f27f9a205f02928bb808737d50b7 +5c8662cf0ddc04071524f7b5d39aced102f94c484495af822e95a1bf0ed9db45 +5d54ae5a03d3f912f3e5a559b61e5b262dee0e3b08c204f14a967429b1c4f83e +17996b2ea43bb594f5abd2640f28c96bd9e93c1254cbfc50c33ef16ed9943f8c +09eafba49d25c68e6a7b0fbf1e602dc30a5ac89f1b3c2aa9f30e5dd184079d4a +f52031a1cddc5c6b6a0dc69f7d716c944beb6f1282710a2b5b2215f813a86263 +7d81662ce14b4e0c84300fc8b64bd9eb0d10e639572f9590b1b3bca63cbced3d +87c07a04f5cc35e6f806bd04325e1e07fe3bcde82d91233a24addb2b4b0dc3f4 +32b1f56d8a038c3f5b712bad9f653272bb27aca0b44422be7126cbd916d4ab8e +bb4058742c7ddbb37cd033233bee2205b18fdc0158e52b4216bfe957eaa69ab5 +0c0781efd3fc8346d47de236871661d415f7b47365bbe1d54e4fe697114254e5 +e104ea3584b97d19567ba7639135eeae32c7f342f0f01659f9c856001728adf6 +8e24f8d5ea0f8484b0ea4a6185683758fcd543640c96910c3acca2119ae8dad5 +3952e59fb798ad916fd67fb7325ebb8ab26363fdc149384867cd1e981d1e62ff +aa7ebce1787df11b0518c11144ad550eaac229dc5599ead9381a68bf0d736a3c +bd579a715fd703889aa8471ac23a91dff8162210aa8733f2888b405bfa68f4c5 +3738d004012708c88b006da5b5a8084fd7177eadbe7ef3b582bc238842b0b732 +27ac6e786fbb9ff26aa67d7aac06d4e8e40b48ef107edc57d0189466923fd3b1 +9e95093fa2eb2c1760953ce7aac3931d2faeb99c4c3c9699bf40bc04c3af727e +7998ce24f807ff77f9ef8bf3c3a8747dca50ab331a782c7389075428b462e9eb +e4626c03bb43fd97b662b72ddf1c6f792212640b1dd3dd9db2ebef31dad12fff +0ec9eabd3c5281fe53b60cc381bffa25e0241f9ec5026a698d2489d2b13d0eeb +06d239e8b2a64c07c56f38b08d2f344c621f572ffe90da5685c582aa514e008f +e22f625067086a3ab106480e090cdd6327539ca21c0ac760529251d5b76282d7 +32c20488146011882f01e1cc9bc9ef70c0cad6cb3aa88dbbb8723797b32e5d43 +52c96501592e43c9a8840ee896b2625bb745bc93658fc86473eb0b6df3a0a8bf +66632a36c8ec14eefbef14955c4c2c5e64f1f7254291a13d2afdb67909a5f46a +ea43f621010a3b85eaf2d68ed917c0e90963c43735dd8c5765fdbf05a7a21c97 +d2998edc8a437c94842d179503f07595dc82ca371e728d1b19b1fcd00dd0ad9c +668d0c1840c1a9dba39d225b9baffb81525d5abf670ccd0c874b9248cd8e0fb2 +4f94782463b16dce7043fe54f511048fd2c21900116e2eb514fa97edd056b713 +da9af3f0a34bacfb946de3c3bda39a91d6390f533f0b9295769de2476d3dddc4 +dc19f1a675b743a5ac854b156f9ed7ee5edd0983d096857009a29a01782b8ae6 +a1782d1555dcc5548dcebf1f0f879773c3d708026345fd4aa73b0dc107bfb40d +e5094dd0036d032a369aea390fa7a547d6f7d5b9f837fff0c5e9fc4aa9b062db +3ba7d2716166335cf4a70f81fa2389bca0814d2d8954ea99351cddf94690a4f7 +324fcfea006ad92427f623573e53899ecb20710b8e6f01c8c8942f823f64db0e +453209ea71962a15338f2f5b6581864f9fc8e881e41f63b1ff6a91892c527f3f +aa092e65e28b81d9b65fee4b73d22e3b003ea8830f65eda3d79216060672b2dc +76dd18a29009648e9c74265fd30130024816a3c79c825c80a5a5df58479f8a08 +3d569aebc4e94d9af15ac50748b26bb38916ee1b4f37ccd935903857017bd119 +6a979efc1c0fea21efbf80e0547ee1f77596be0f173fef2c5a71ab7464c41d4d +b0f277937cec57ce62233e8070519721645ad201ec6efe3f41140c3c8f9a5674 +a2a1d75430742e0f5c991c31884b0e4491782033da10816700a923639f26a739 +7aca4a886e8b3509872c40194ab67395865c3547fcad01455d19e9ec2621336e +ac00bb3655c4fc819860f54f00f42ecb96c75ff3a4e8b11dbecd2b7a3d5344aa +5d1795012fda53f9279d77b15e20917d98763849942bcc3fdc4c658c849d6021 +17799a78bd5725266ff35b0ebc25eec8fcadbb9a03c530ac00debce36d17709b +a508ad7821e762518d829aa41a126d12f0f1704795daf14d3c2da74731c3f870 +da15398f258dd3e7fc7c1e99ee3a5b83ad0a87ab24d3261b1e314558a8391867 +6be5ac4e4e0907d942703cdf621aacad6c9e4892aae780d4fc357f466edf6fee +c0c785ab3d2a5968c5261bb74091fa5d9035bf79be4d0ab5e4c403a47056e843 +24500afb41a5d9af71efbb0cd390bdf7fed1b963c9eb617424da47c443d9b698 +13ad79153d7b725a9064916d4aaf6a8d40ca49b692f3be7d1c96447326bd0ff2 +088beb281d76daea25fc5597e98f3d3507faa2b61e868aae9dd694547738e36a +e06c56d70cdc028f7d8932cfdd2452aadbd62baf60e961f731298aa2b2be5f28 +27baa5b886fae3e9f6bdc6de3595e9514a576fddd68733ea5374485504641317 +811793038dbc7c3e560d1930b5e080315b850d78c42a6137fcd6100391c2fa4d +f554abd0bbdc695fdd0d57d7f2c6c7b5a215992c0cf9c0ddf6cc690d5c123e2d +4279260a68242a4e6ce22a9f0c42859a952c6e8e03ec4e67ae4355a5522adb66 +555d52747adf20e8f94d82442ff94775a3e0ac25c60aa0e0026ca843f57d87e6 +bb4e82673870f3993f4c9e61f28ad79bc4ebd7ebf56bc7b00aa90315ae67bed0 +2f5adc9ae2b7bcf992395b062cc3e35a7ed8c79c8edd2bd8d7e77f2863b6309a +b12e51c3333108e206302e25e5c1ce87021fa9599288c7116d563c459c050fd5 +7d36a01b2b5d6896ab0ea53126ccf31763e864faba4cc3babec70468212b17c4 +fc054a0d1c3a9c99df0fa83e4bc8f5c2767416a443aee1cbb02c0da5d401554d +a12b5188d302f6cd34456dc5a3e4aa86fceb75b69ffd3319ca04002096645dee +3300632100388bb609c507e66d164cbe04688cfa44fe63529658bd618f15e5c6 +e26cb6a025d2633cffbc4aa74e6d7a9e174ecc02a5f67ef01fe0dc7a38db51b2 +6bc7daf3ec0935ab126f7fc73f514cb321bfe5e5e692865b64c4893485cbaf3c +d24e96091f8756d12bfbbe3fd2385003515f916b6284908409803e0715539be5 +c0fbbe98fd1323b76b1730dbc9a851846e42fbd1692c1b9a496b3b859ab64248 +78457f4ba4c4408c9498d5d3cb433815201236d3fb75f0517ac2eb8713372afc +3a17431906dc6db51e797fbee09e039838ee20cdd3ec54d204c2365e09972de7 +8de2c90b29c28182deba8678fddd4d1727a2cb565e3f1323c1913c57ac27673f +d5144f27bf62437c767d2693a03647f92a6be4ee2439fdc18dae7913e3dc90f4 +6fef615df0d07c623ad0d34d4c35851fdaedc94835de92b47316a51840f2fd65 +7cd04f7fc7dfb475c3a780f6bf2922496e123dc94f65f6e76bfc9f9e167bf32b +7b459dbbf33fee193f8aa2ad861ff5e971ec8114a342ddc89dfa27a95334a561 +050149eaff38bd81a9c120b1cf214ff6d81250ea9160eac7e48532298966bbbc +5cf40ae2aebe87a9f85b2b488b21af5df819e294974742c99803d07fbcc5be4d +2fe14bc133ac528fb32ae8771ccfbe78bd01950a5557d9e4326c9157de7e61de +d3fa6e2ea6d6671300b885fa95ca5e5a8aa35c31a29f094d661849f4afdce22d +fa79f37e3df1f33f96efc3065a6ccd9f7b52e14df38eb70ebff79a616d292107 +ce258fc46e3408e1796168a521b7ff4249e3b8b228d5bb971ef2a7bae85cffc4 +e779861852f4c0ba8c487cc1f882dd57b2af2a361f29bb83f3269989a07d0b9e +73b160a7b8f9a8781110fc31efbed4a0b4099ef7d7ebc7b2b414f0a95d967184 +d60067c468ee81016b8306fc13f2be654d9add40dbdb393f0fb3e9db4242ff14 +31b34b543e2bc639a07992165aeb5c52235035b418a0ad7d3315690f357df79e +024eb0f44899255e782ce0fd6bf0d38b14f1e3cc3629045009e6429f629e818e +77b9c1787d741ef72a93f5be5e9cf3a096e6f8b9909746810c2852a6ecfa6cfa +6c41c934e162f1291018e117734b9b45a643fc5acbe29c266ba48d50d475799e +e04450d0d8716dcdc264f1332567900372a7fc293b456066f96fd54baa34e181 +4872abe24b64d632a9dcf31ba2bb29163ac0129ac91ab8ce38a99e83d9f7ed8e +ffe2da14c5805d35c3bff19958bdbf09b8fbfc7e89c55fcf4b6d0c313ee80d55 +4647ecc9717d5ce662f61ca99f75b08b7c206f4a78f52cf17c2b5228346d1ed7 +7cbfdb392bd12739635ac6873d8c1dfc771f1f8d6a906a13cb2198d3157408ed +0a101a5bf29c8e7f8f8ad2c896c6f67aac3f58b474561fb70c69f6d5b3fb422d +6e7ea87e033e44b296506292cb8ea4699770ade5433d44c62c9b4489779279b1 +a19830385256fd0d3126dd69d80639398775da4c7c56d7ec0bea51894eab0b38 +706d820f9f4663c95bc9807ea682139b2e15f3140e1fa6f1a99ff788d0d99722 +134d231820d7f8d46b68829243c326f2b901e2b64e32b3846cad667596a7409d +435900fcdd8494bcba8e70b1405229379391972cc9368d0c7c3cde272cf9aa16 +caabeee63b74b3e77e659f50b8f1af779f08cc6c3164b6071d024092e784414c +ad056a73aa1786805d6555396719fc437bd8ab570a3f8255e2f6ce11365c4bae +bf73ad1720e5c4b07571d20828f617116028abcf12cecadb6772773df8c41882 +8273a3556453b01a7391f540e8bbf1dfeff8e0af1d24aa0b9c764bffce1a82e5 +849fc5022f2584f9b0e0f7ec2c59ed7cd8fbe871ee4c9e4b1482cf807155553f +cac977ea5a08b76f44639d70d4eefd8871fbf13cdc5516edfced4af6d47abc81 +a9a3ac11da7a2c3e25df84e72bc922b819f7ac2fe7e6408c9be8ce1b0073d44c +22f510390bd96c2aa98b1308cbc75b9da2c95a371d7a8426eaba2113b8f3e073 +1c0ec91b95c5fb1c65a94174943cb326c28f481dbc9f0a50646202389ca40fbf +17fbb33fd4072931f171b27ee0f23fda28ea19797b6191e2200141a09870c8e9 +8f87a846bba2e8e13700d01d7903e94a46a755f9f623dde21ea5fa1c455656ae +8b45034199df62a9d5d4cf109e6a706f74a42919c009a47b58c6fb0ef7c432a1 +3ff1d4416c586f39db99869d33041e925743756a016d2a49a51348bf79424d68 +c78bf4253baa929affc6004c9166141fd61f7da506f6fcd0075f7c03f3d51425 +d3463e40524e2ea8c2d2924327d42f6d7a39e872ac9384dddaf7103835438dc3 +8d6803438686fa7dfb7a0a465dbe890b9f79d40a1f626323da4d76c1948c3c92 +89e5371f39219da2ad0759bbe354934f343e491797d981f6f781ab6544dd373b +5f9b6e1d08469c7279d729bd79a911663873b5a32ec2422d42f3126fae2efe13 +c2b3d85d5bc829fc92cb93370f3e6a7dccb56b8a425b300e7386cd44795816e1 +ea814d1b4d45dc7d7655cdd9e2933a10b9cd1321bacb8531daea86478d145f5b +ec13abdd44f81999912504fd32d1deca54c2749f805f6f6375f8b2e6f785895f +af53d979c669ff8961108292ceaf16ba3afbaba3e39eb34397ef4ada01d6e6ad +e539e29b87561fbe3d26758e594be89cbc77213a9697252089e444dc7b0232c8 +a7cb9a8c39935fb9a5e466dec8b35fc9f494863e2c26e9056d067354987f008d +69a3f29a7f4bc8d50b8138da6b381d57c103d792d972fa7dbddc14629a7e0488 +e232824a107a4f41f1afbf9aef01258c88cffe27a83e9d2c48bdf641f918fcd8 +714662e4dffc3646de7fc86b71ffc6a9682530f5abebd14edf8b410465629f33 +08a13f9404527e7cb697b12852119e4082fa65aa4756c2b72273fc18b90d16b2 +6e930a19ce948de11b72827799e3844ca0f2567b48e03045f9e8064d50c88f3f +29998285e7a322ee9b18e173c99cd8520da9c21943507990eb5ef2d8d1dada26 +c6cf88927ef10526d103284b1dc80d78493381cd6ed7cdc753e0b71179fef41d +ec1aab39bbf52b59cbba3909c1c34e3ba321bc3cfd580f5096584470525da084 +fc4ecdd0b1dcb9e889e4ef566c0c9451206a84063979824efd4fa77cc7a4021e +9a4b1cac7ba4403dbc14fcc1d78933f4bc0054c3268fa0e534aea20c6e6cea89 +f1771d935688ad18d8b385e82770a3b9e5918e652b95adefaed13aa1c0f54a47 +79cb590b067fe245a6264df5322c4826ad318919aaf3e6f2408b17e478c0bda7 +a0b1070604b24f71d912af18c397c3e050dc7add27d8437073dfa99e877c1c32 +a0897e213897f5132e72dff048e42c0b49539e1db37bb6340113358a58df4771 +d4f5322e3e044817974a432e52fe5653ab31c4fe5f0f2c2c8b6b6c0d1e1dc68a +d56049b20e4bc4f6a9315234c995cc85bac81d74c06633d717f2aaad9b2a2feb +8842109b01a47892115dbcaf2a5702fc6265ca3db8a9f7bf13ca923dc2308fd0 +af3a184ab9ca4a588a4ea832ab299d959ed018773efaa59c2819b8120dae0f76 +4b1d3aa8be09cd9ad44994c3f04b8b6fb6148acbbe53d77fd6a6554dcd7efb87 +b3c7d4bfb47e4bd9bbae3cf3c8a79dc9b9c5895934fec6b399064c1b9502acaa +bef8c5c15cc5d27ea303bc07d2a1ec98a3aaf41134cb2fdfd9621576f81296dc +079ab0d8ac91d5459be74abafcdeb29d4437bd63a76ffd819f8e945d7646564b +242fea90f42bd8e158ddade8cc8d225f05ff831fbdb32d435426c596933a6ac0 +b938878c9e23a0d2be11b70bb6e4adeafe148c49375a3196ad82d30091e1b487 +2ce47f4ee03fb4962f7b1ffa94279ceac9ae5bcd1720b7f6a4262d4ef56fde69 +e54ebebd578f2cb0450613e08a87b5bd8213a64bbcb838266d48f183fd3f83cd +d6c25573bfd54379ff2e66f58385921abc93ac125f8062c5ee6013c5ee977a77 +b2c5117cc2ccf3beba3105005ae0564c1cebc377739462e5cb5777b7394afcdb +4ad2f0ae6a4d56c5803cf3c278a771400980acbc2c11b2dd356a5a4b650b32c6 +f9e15b010a1c8d41950714b214099b1ddd6379779094e45e5cf3ef9f7d3b8526 +94f1a2c9975fc04086d81f324d1372f43d7d4dc574e899cb9edcdb7988daf9b7 +0a5f3201c569368a55ff4746b1818ed495223358135d699cf4128bbe0a6ee377 +c3a7d209cc0e55562eae4bdcd2ab4806b800e755cb842499981dad98a60216e1 +dabc47cbcdc574a4d4ddd11ce22800364e220b1a9cd9084e266a166dc44bf9c1 +148214c901d86bcebac18db6c2ab96996a60c51a4640e2471cd8964818fe472c +43b821d84f2eddb01ff5e1d7c0bb99c0173059b198cd5608dd8c6c47138a407b +9c9dd02659b5829d2c15ea70f73a409bc2bc98f7f8265a8fcddd942552cecf28 +4f3eeb4b69f16899b7998b940774fea7d2ea35643d8dfac54c1be50be47b22cd +952b03bc84a52c9022462473a4defa00d3915db4ee2c2a4c53162afc412c6e54 +31e8f2bddb97c103c4b42189012394468a66513bd7cba6f46917feed59950f03 +273c1868ae392f8d16e7b8509d2886a843add100558e89f290917bc5b7541b09 +57adb891274dd2725619c300e08ce7f84561b04940955885644ace55af646ebc +87ff37a855eba0fa3c20f254e8c6499cf4d407120e29209b0f0fcd6c992ceaf8 +e0154ae1b7949d8b88fd8aa36ba056e73a3886f8e94c4a1f5e0f8968b59a9732 +6294746890fce30bd2afda54c295bacdc3c364a252e9a79e752b7545ee255673 +a55693ee02fe0148ac3c6e60aaff61b7fabd2bf3cad5cf1f4b8a64d9c2a3fde5 +1f1301abc1c2410eca4b6ac441e2e30c68c87b98ad4227b5b9229e7c20edccff +a92d6d9371a710ce357c01e99d164289198d0c4aa4605fcd71239ebbc5fd4bb1 +1021fff5dd25fc62d2645df0e50aab88c063fd524bba16153e009c755e44bf77 +3b700b1266b5378527c5c28474233c6a04d0c383018681855566a46a06dcf5c8 +5ccf335d9f44bede91fd4ec7b82fa520292654071ef2863de6872e82f5f1bf46 +baf1545ab3fbbfe9be4144daeff6b0c65a2a3887360c9c80d226ea73492d0faf +67be1514f5c5cc8d33d5c5664955d72d0ab07c9b37f9d60485cd17f297c20d4d +cf8f1ce7b8558c62dc3140cde3d406ec969f0d5588ffff6c46131ac5d86da20d +a424d2d3b4d9ccae2c029bf1b3ef96c905822163c43462c45921c5bae7a95f60 +d47f317594a48e0b81395902e8b9e6180dba266db3756bf040965f011a3d2f1f +aa0553094b530f1a0486e006220b429300539e382dcd9971e7e633e67e6e3109 +8426d759a6590fcced8c8069cc79ce793299fb595973a1cddc35b21111ab6d16 +36440806b7ea6baebd90d96e767db173cf4b51c0a5002eb1086a5eb1362388cc +7c72408c247758580253f5548398fcd7122366320e1c10eb6686b497eba7f2e4 +8b8e126de694808bbe1c9ce2fcc7316c5346cd5d57f1d86fc8e092324ad9b490 +90ee5df4e37a8ccd6d17a719224b1b07a7d305e55501197e83d34f551fb98bda +a073ed467f551fde8516be347358bf83bf2ce9ce4e9aa68f7eb73f1f5c9b0353 +fa12f7ef85aa3b06b3bdfd7b676c73559b11e76fdd08029f8eaa1238887e2ad1 +e48742fe7ff45d8f57182c4bc0522ceb70123cbc0bf64dcfafd2c07b177412fe +c7525982cf770740989b39f42423163a738990086fff7b530a00b370a0cda31b +097d39957da2a6ab9268daff33b8056ba0c48a239d0f1f809973a1b5efd1d5e7 +3de032eb78b8b63ff1e4e52743d3b0990fc2083c8a0e05835ce1a0fde384983d +6d28e08da7d839673781f7e304b549f12453d31cac0e1489907ad30ddcdf8d8e +245a74bcbd0bce0a0ad8788dfb397db2a9d5c411333f35180239a7a6b3e54101 +0b8fa8210d7a1def8d376cc61be140cf89bb5a3b98601d4d131ef4475278a40e +0d7c9d890563a81eec52321c85c1cda4d0f34970a8fb512f82e099844c865ac9 +c16bab722e259c9f671728a9072e02dbdf26ea35b5a5a0f1ba52b8036b311c64 +16c75532b2d7478fa1c2b9428f718d3728b9300e2f5756f598818069546de5bd +4324a1239148a93002740ba8fd702710c047d272cead01226b886fed3003a3a9 +99d649b12626ee0442443d8ddefeebc508895d5afebd62fedda8f57da6525dbf +41f715a79b938b116eeb6170a35efeaf8b60fdee7a7f9ef74db21e600480c8ff +38392e955aedbaa46b9ba556a81cc78f691c9c88284a1ad65ded13669d03f518 +f191160a6c392a7fdaae803d2beb055e051bfa81e4885b8f616a37a0d7290293 +eada2148471c45520e276cc2366a58a2bebfdc9867e6452ab18fcdaa53fd2fbd +c3fb34535975a57f797a4de47a79cd05b9d3fc5e2c7709db6102bb4247c22b59 +0587a6764916e95597b06cd83187f6fb398519e86de9fcc44548ff23d8d9235a +55e944b2ad4c2ca526a399ad99be95cf54319c8ee641db43fb92f8b8b4e9f6b5 +5178c0457d708ca591c4c73fe627b99a8518231af0c21fae98e1d2bcea65ccc4 +3602fbc82e9810b48dfa0d3161f25c2b40c1d1156d2d2b71a55f6365a1819452 +3abf605fb725e29a811a6e562df0707bd518038bdf714c6861489ae0287fb6af +d5dd37d188c86f7f719254e2a13fcaae47e134c554d0431abd050889cae805a5 +e2bc581487333cfb861475a767ec04ffd0a0b9cb9785d1fb6cc429bb1a813927 +6e4fb6487c23ba0c2035be1e35f7a31c8cf98209abb875c32a09a6b7ad7639a3 +da597af87a34e4ce4088e18336f66567abc7243e589780e9b046be33b4a2303e +c7cecec16dfc861321a68355a5e4099ed7107849b557ff20e04457437ae19bf4 +794588fd6e0c782f07c76210f2adaf5b1241916013c35ee4f4196094de611626 +c98dc51117ca28ab3d0c598efa947e9c76bc3a09f746311d4beb0058a083d3cd +97bc77190bdcfed8af668c1ced90ac205c6541cea4f53736d062222ff794824c +0fff1b8b8cfe4696cc152d33943766b03ae12fb20dbb1d946b9462fca3732b19 +8fff68a75d9617a8fb71bba6a4d1c96fe3c2ccf55e2b488160505c44b4d153f5 +3b53eee087b528383e0931ebcbeb37645607c20582919d9c58f56f9346e2798c +7a51a943e6ac8a65d2bfe6a92d86815c3de200bec682b005e9c6980bbdf46203 +6be46746c7eb4d97326a18280fc67d7df652a6ffb0cd3db52d99c7f83f072e30 +8101bf476774527c6aeb8d6ad66511773d9770173a077722204175eb22cbabb9 +d9c6751e1309d541b32c79b147203f2f79d9106b834e401c51aad2e3d8826c83 +bb4a7e2a9c431181f9a8de481ba597e1a7453c29356299865fc84b76d0b28876 +837b66dfbe86e71a5346beea660d3e1ff479c1cbdbb04455884ff7642f9954b5 +42ba252cc5cf937d03cb0cc3b7a0b21b0030cffdf57d8b7ed063cc99345801a7 +3047995127faa6bc8524b98477c519157a446178bc4133ba56b28b7af120fea4 +6579091b0a201542356e012d8eab4201cb67375c2d40881d33634d82b736fb47 +254880b165bd6f1cf4d05a33d301b2719aba8a50e655f4ec6804b80f73259426 +fd880ec85f54a05adf6f835777b7c9275e2e55043e84967d2056b3417f7097b3 +474e21bfbf6a9ab51a28ea856b9259eeb63e8026a875c385fad7e3cde8f328d0 +abbc56744d3fff74d006c99e8d965d101a83266c8c1d3c49ce2c69ef2c3b9184 +4fd37195dd84963ebeb59eebc75d2d42d84782bf1ccecc81f58addc61d61809c +743893f5159c8d1882f29282f9f821688971860d0c88fe3777e80ee1c0df55b8 +5ff56050e640678a323f0e52b0f8a5c12ab6b6d5f3c0834184679043114616ab +c7e208da3bdbe7de6c722b7c35c3ffa9feb7f7c61a986fbaa71a979e5196559c +19de8e8927434c4d756a87be159885d85127e63733612ab350013a80016f1593 +6a97210d9c8022c15f664a403a3d6bb999e745658460189abbb1886fc0726eab +9796babd0428523327594a5a9f91534bbe87b94ac4746f917ed3967ff454f662 +1dd2fb773588b6f2923ed4157d874f3271adf601e95330a2673f1797f26b25ec +4f7a6f834ae31c05d03908cd63773b63520287aef4fa31a1900d25b931c57b69 +6534328d69e0913314ba05643cf942b88a79cb5aa4130a96b0bc4b25dc0f4216 +c29e9ef060c541ba5c3ae96dd78c4faf59083125624ce72d2794bc831b90de17 +9b4b4079e298ba020e182cedb1a4fc4351bb771c8ebbf99e2e7fb961bd8aa14b +91b05d7f171835349a8dc34b1125336c5d0811ff2419167f8369797a394c6d96 +d608bcc4e3337a192ec6626924f3870d29c56b757d8487e8be1d496aabd0ea35 +e42b1660455d7acbec4e18f04736be886bfcb676b0e342b46409a57541a199bd +325373b22293e82d2615d759dcf9fb5f1bfc3dca71aa581e1c8e2afb42d9365f +841801724e45acd9ff1d4f39572ca46647fe52662bb072700bed4f072ff1ce18 +93ffa8a9f2ffd9182cb9a834031d4e7685e8304fd087fd5dfe249283a0d81e78 +ccde1bc2f66246eaa3ee2d6de0b846b57f6f705560d98df50826abdd58a8100e +f9bdcc44c0014fda533542c9726afc67ed6fa8e37bc7317961f189a037c31bb9 +67ec7b01f4d1ff6a1fbe2dcb7a07fb761ce3e5863a0f4dae7457ed067c3549fb +3907affbcadec68f8fad69bd36b44d81afde8cb0049bee1416ffe47ed21dfee6 +2bbf5ba0285691ab7f25828163dc2f08966b8697daf389c83bcc5082e696fd8c +a594bb48fd6fd72b309e78dfba6e1bb5130b26030f4ddbd9b6dfe483f15443d0 +0c2ad2a8a23e47d0943b60f5109ba3ce8a52a39f49216f6ebdb31e58a51cd024 +fd24160124682ff23878859c9e40eb5ce4c54f958a0025619aeaf77a8f038753 +d5c6f9f01c91072dd3840d675fc97e15df7cfdf94b54480b1923bdfe2f94a2a7 +be9a3c2515767baed85d52a60663fe378107413c9614ea6c91423e60a018ff2e +873dad9e970b4d7210eab210cd3dd83d5e937941852eaaa30964116394b24e54 +0e63fc9ee87cf04d8d31169c7ec08f2c7b31a260e249098351488fe28a214fcb +76916d8cf88509e45e9cbc2ba79ccc31902bc44cc57dad723677eb32f324c1fc +7fb55c05224603b850a28da10884088c37a2aa142e08cf71a7eb254a4df37041 +0440a2144274b9fd2ce01b38fe845305e8fd36da61a6c2089626329ac10dc035 +bb9a8e3e80e316047827b0e54f21c81233b7960eb8514c0ee7b864150f311a52 +c67fa0051e430d3639d5024077867b60122406cd576a6e580bf16438b8507715 +627267181ded1599cf042fee4ae5ab8e58122f6e08c7400aaa1559b2f8290cfe +8894ac6b6ff314170cdadbce189f6b72bd8bed544a211bff47095b9e94079ef8 +4ac37dfa7f22db6eb90af865f69f4cd95c98d06c52b26091418b5cddd96dbde3 +b357da664e3b8ab4a343e87330e1739c85b9ca0a27dfd90509be415b66254189 +5ba0823f2e6afa44fc781365f1253feded376165cac060fb5d3a7d00e08fe4a2 +8f6e534af096a7eabbcb48807aa26a226c6b8da6e4837a46a16f37cbbfe2b922 +87805dec5a0f2aa1e524f7d0b04a554904f94c378950587b43d1f2a74204f740 +d4079622d05ff37d37fff72a90169bf2118bace253273d9e4d5f55509b5400b6 +2178f032fc847dc1c23de81954213985d647007121ec2fed48283d82e6584274 +5fcea89cf6032a531cefeba953e1bce9d2fe168d83e756816c9df0c92e5cba2b +a3ed0f4fa1cc2158a4baa112de9cd95d16fa6b4ed28d08d2f7d2a50b31d3e0d3 +dfce6738c6d75a94119e674f36619cbc2ef9c9a3c3941766f8880233d054d824 +9ef92eba537d6f3fa175e9dc1116cb59156bb6224bf63909d35c4d31cca98911 +86cb38d182183a9e01898fc45417ac86a1e63196e910fd4befae8686533c0cdd +d1224a4347705c2b254ae70abaa4ce863c4e720f5ebc0c9e46afdbdf88dc8773 +db424193f455941d545682530b6081fac02bbb0034639e99099a7a1895353308 +392b4b45fd6603a372578680e03b47f7a371096c41f656d400bf82e83c049a8f +683d096628fd8cb1d9877fa1be8db84953caeb3603707b0b7dffd2bcfed36f6c +30294fae2b55c8325061b1e2a33a81411ad65c885288933008c2fb27db3d2666 +02bda2351894b3580f5a62be7321d547fc949f57838e250ffcb61cc22c264fce +b734f390c6f51af06bbd318030a19956370c8014e2015a3718ab4d7e2b4a4072 +e712cd2207666e8ce595b61a6022c3e386b12f5f6cdd7e777b9e944e5ac8bbd5 +8156e590d286552997077a28e33278d6d891211613147886b927d5d0433d332a +71d17213cf2a951dd5eae9795d4881db3e55288d934d0a186a01fe7c48e1e64a +25c13e3a1aad9a4752831ccf49e3550e98be106ef061e8bd46215447c1887c1d +3b1b9fe005bb26eaee70d483d1d4666cc1d2061b2d922d9b7db807413b8e7740 +68d91dc20e7247605510797461894e41e5bb2c98f958c18180e8772485c4d1af +a964c78e40d7189eedf839264e88d42e9794ef27eda30cce01ab539c86f58665 +979125ab13667ae1b399909f02a9226e5aac7e0504f22629801c356fa47a7ad8 +7f1e0e2e50a2ab6d2019c93fa5e1acbd8ee967d1eadcfd036821fb08d5f2b252 +ed576094df78a1ef81f3f868d9e07310291e07f22ba4e1f69ef458d8483f1de4 +c1524e8dacd4a683e5e775ccda5491c795ffa0b18b731a01da03ba74e5947487 +c6c452dbbf59e69df299ba70c106ec4f6e9c9f05be63195e84716a143b63c720 +faf26eaf8e10970a67869188209164a58b56a95925f9111211e5e0838d985228 +d58ec400de1e072466c8c87fe488da1443ea0be2d65b9d77cac28af6ce44dad0 +31322463f6b64ea6be7fa7f372149059969ab0634ea4d8d03c4f5cc6b6bc8ec6 +71dd2fc44b6706c83c2d8191d478a0cc69b12bbc7a9bbbb92c7e94b25253a323 +a4d61f3b163a48f0343cd9ee962b3bf2ebd8e21b1bd016ae4a97c6b9ff6d1c2a +8cbef18ccce3076e27e74fe6a7eb06648d3697f109c97daa1cd83d9835799707 +02662779f27d7ccf3374c45635269b8f84a22077351f7c650a3ad7e7279b6198 +7e3711af3686994cd6733243884939e71b66de2489ed777ab90d911e692d3709 +14251fe8eca4396e922ec4beb9feda176347f7f2d02906dfb49f61bf85b68f0f +94ca99bc55c0b44e3a91ca909f6f8058e69234aa9bec9216bb217c31e4055b6e +d2970782c7931cd3678976f0e478c9428776c6881d7358955393cdec2e452382 +b9b76e4a5a808909676e2b2c92ed57f5cf4b42cc11da388d0715e9319c12f140 +1fca591c2cbc68ded3f9ed1de52e27cf5fe22a748538ecf596e88bb4e13fcb92 +5c93b93a3f9f2bc737d0e0acb8272a54e16883dd7655b750938f84acd2e857ac +8dbdffa4aaa58f0b5a46221b77dbc830a351dd8b7cb61d7f331832bed4577ee3 +061f1484c97097e4afd65f0709053ae27fd28e18fcc9d347244ad559f632cc3a +ab8b3d57e32c41d0ea938cb471cff9c7ed61880ed874ff75400234e0dc9c4a9b +c0319a344c22623e74e0df9e8797a888b72b1c3f0fdabadde8fe8765e565a39e +0cb08c0a75aa03174c8e153ea22d88e2b4586b74ec417a33af27981eb2d7953f +2a41e5779e85bbf58519181f752bbb1e187e7b248685ce7c0609d618a928172a +04d3eafcf6230aab6b5c97ad7b09f9392ce0f2c56ecd392ce4b6f0a2709efbc3 +ce7f6b53a9db668ea196fbc09957a714518aa2888dac852442005c6275e58e9d +dfbcd7e40c03b2dd9c26510666caa28aab536e3ded91f182fe4400a496a9684d +5b849fda0e743860478ba8424516123c8b09ed0e1d5a81b156e39069f7531035 +2e366eaa99f20952eec65f6baa16a0b93088fc7e8151a6e2ef8211c89882be6f +38c6ce68a3dcd4ea495b2fa2ed4564745d7a5a9c43c0ff7110579e8a5153dfac +ec2906dee3a1435a125b3dbdefc55a92c5e4de04a36ea5d66a27ddffcfd4d53f +a27488098c8a5c19dede9bc21edec27c2dac51a682ee340b609aa7f6e035e417 +dbdc12a727d58f9432ae641df40fec10cafaf21443f8e911c93eea2039c09dda +ec2433cbe2fa6538d7dce26cb7f368677ee24f85fda10ee79dfe24d9c83da406 +9dbda8667e2a68f543c729d5e40c80344367316afb08eaf77dffe1afc17d0544 +f470e3413168e65d8b48657621e593fb807994db1a89416bcd8d415a4bb3bf44 +566291cd90e0da7e5675899c6508552c531fc47c10d5fde4d64766b30261e0d6 +9fc15a0eb2f0194412fba5d0305e99d4b4e4c02b6f92b1b9e4a8e4d93eb4c308 +5ea38b2dfec80c04ca70388e8266c16e7a52c710cdab7d2ccf1bc901197589df +fcf0144908bd7ccf20f751075145f676adf8309c9ff8fafa79f4c2fe785a3322 +307685b95d43d05dc68f1151b49a7d7404510f7a1f999819f92cf8f868199628 +ce7e1d5677d86baf89c5865200ea9ea72c54794c32e039caab8e29d24e22fb34 +e043c3102d211de91823d80ecc78c5d2f8a9e4ce45437e4a24eda1a7896bd45c +61637feec977bfce414ff9e44555403033a2627b177334e6209f0f001b1d5ac1 +d0a74136fd2c5880754bff00da05c111770efd686bcd07fff73d2ff9883ffd5b +1ec32465dcd78a2b9b47ff9b60881b6f31a474d9bf5bfb842686e376202fe4fe +fb7e23a2fcd1f07e39cb0da3d931c6c077288602bd8e95d23a01503f43816f0e +383a58d58122d9d80df5af31ee6d79904aeb4087ea168bf6311620f5291633bc +c47e70eda1d36fe21ef9db3c3ee7f498950e5b0dd5238d7d8ef8e13e3c8b3208 +72d7bc77368d66dc47de5c790b0c65ac1530f6d64368a56fbeb525a2d5e7eaf5 +fcf4268e0facca5c4207641d77193e242fa6bf789b08d50af4beb119807b2a52 +9cf77cd48a3dfa0db0fd5bbabe9f0fc1b5a263ca47c555d236f02432fc6de9e4 +a59ac5193a1c443b031d6b6c92c7ff5fd3c860b3a8b49a97b0f5613276c595af +bb0d18a2f1730e06d98ac122dcb8217374c16939a269bb555a1b22be57ff6466 +b6b55343e1d198772d744c9156a52e2499e626aa313d5090bdc0b086e25794a4 +e1ad78c3a5bb4716af4ef0ace53a8da0313d811a86a9239e8f9d607e90c2f69d +e9e7e02765bcc7729a9f558608718ee3c5405bcb4b6221bb5d06f25f39fcd52f +67a8af66e58145362fad28ea89b61c40101b2f16f5f9eead366ebeebebb1bbd5 +0bcc9769728908ad1a922a3a9bd2eaff78dc3651cc59b0d0d9f98d0a400e87af +8f2e1a591c90c8ebae8f105a5dff0edc5a4c81ac38f41e67a9c2102ab193d0c0 +8f37dbe10616668efc2fe52794d2557d0105b9eeda2960909f83062ec4c4102f +e66ab93079bf5c570cd68d007fd074cdce22f4b6203b93e046bd288d8a9f62a7 +b2ba1e1de5d63b561845cf96450ebeedef0c3f555bdea7096256dff359bbe27c +5a296dc41117785bb3ccfc7bd96cd24bee976a26518d05a72dabf5b41a04e909 +b26af56d55cc090df775e3024a5496050aa2b849d5d45e70af22ff9a84f12fe3 +53072f47b54d2d35f1a39e8439565672b5dd0160c76e129b6ce4e290c850c7f9 +3a19c3e27a408f8cc80a22bd25a4655fbbd75d73707419180ed1d357ac448ce2 +a38829b51efe98b07180ce353e125d79208df5c7de53ea138ca7b8cee29f81b6 +e61033da3705ed569a31416ba3a5131acdbf82bcaad5405f6d124de16b732877 +ff4a5f282f5b0bf8d1cff2fa1d959784f6f58b5f40c6bd6c1f954d85df5a3962 +d30bc12db37188b672f607a66cae180fcdbebcf5cd3ac95b610e525a2040946a +c47560f16b829fefe90d3d4e75be52fc0306230d33b2e29baa5d74900c84aca4 +83c94dada05058d3da54d13f9e3b87c7275b790bb02ce8a5a61001c95db8fd1e +164245c7447c4fbe3037d6e5b7141997d91096de2cf76a12bcb6c1bca6413b55 +8dd660b2df4e62295e2d1314d24afb0783f39f6686343880d979c9295b7b1f20 +4d7aaa9fdac845db3ecf9db4e818b955d0ebcf7b9921cdf219f9956a511bf9ca +092705c4c92e95e355cad11c96bfb89006b5ab00370c036faf5b52d7bd0582dd +e7d36f53fa18448c3b9553308c024de15fdf1c31ca0f6fb1d571dd84b170323f +d9612975a89f587b27735b33858667c9de2ab0696638bb22eb46164c8628d1b7 +4d80396501bc96dd11bfcbdb5b89ca09246bb62b0e8a5e231c30eba07d939867 +b138696836fe6d5dd27290848212100ae4694ab060e9e5789101abc27bda5fba +66ed09d901c4d631439f91ede8d8cd4d0ef518651be91282e6ae72ae7c10c126 +33ac3489e48a411dc25d45a188f305bdeec1ebc7bef1f45f5eb36f920dab2841 +780ff1df1302414187e081449094b7dd44f83bcdfbe5b139d8c9b6bbb8ca36e3 +90c6ea743900e9977b65a6aeed210f3334b96036ebb3b0ff15ec0281c4cd466f +5ad07123b00c780d00d0f2b3799bc1d0d031bd1433b00d1f24644da1f61b9e1c +de885e8cf55800d178f7ff86736083481635bfac098f940e4d798a6984cc8f2a +c3bc3f7f303b5d1835fbb12ee7302f30c6283e1020483765fd92cfacc797b2f3 +8f51df8a2e1d5fbc66524d521be4ca71b87af343c3f18f0ff87c71f94f012dfa +aaa14ec29d129b717e32281e6e1c818a1bba22b0bee25b0c6ed98b048a3dab2e +c38612f3b060f9f0692e3be318ae7b1d09f6a785bb120fb81a6c387bb9b1c4f7 +c2eb12be34180ef18fa8c1dacb625f7772a5ecaca22a5bfee4dfc54daec7f5b6 +bcf74dc1408b52705bc160812e47371d422ddbe798caac076d7ff838f91ddff8 +21c09cca54b492632b18e35e7e0301288a81ece6989e1005abcb31004c5dd9d5 +6d837c55473a3be56c5de6fc910c081b8673aae5f6ef18d44ca524e12bf7b378 +f098048907669a8016056b8be5323f91096a94de54f8bc18d93231a87d8935a3 +a1cdde67b392bb0942e23058342d8df23158ff9f276383192bbed748f7affe85 +90c59a45d6a3ca296ae7c4b380585fca64887343212a16c8766ef5c5e3660f65 +4d7e03cc5feaaf0b9dc5e4b160558201ff0e9da62d3dbe75a383fa6d73712e8f +24d36c066155ff8caa99b701195384bf2009ee22bb2f32796ed663d7acf68c49 +b58a24a77a056ccad57d9dcc347a95ebb513f1494ed24bb9c666be234477e614 +a288d5cf02d36ace0e95940960529ecb30993bfb0ebcaf7fc5bd59935acdc4cf +997e10b39e44aa8e3aa29279eaf0f3719464a5e21ca89b8f8f6ba9798cad90a2 +6534bbee1b3b45541716dd1bd4d8b693d5a411f99ddf9b01866610adb2187637 +8e242e26cd3f6178c9f3aedddcd62535da45abbf30b054c8acd60b9db106f501 +0c3402a84af6a89ed6df56603c5974e3ee5496b03279de395ac8f4d78b1b0eed +0b76dc093a24be910d1b64249772ddd20c9d719f32cb8242af0ec173c6d3fddc +06a235e6c31d31dcc464f78a5c9384e424002dca2294861cec434098bc12d02d +de5a8308439c3acbef0e81c717f66e406e19afee3f7bcbdf25011570f6fbd201 +b4e51afcd0ba37e84158380449b47a7d3b770ad740b7502e1a8bc2c6f5c1344a +a924dfc6d850f096820d02715ec779a2aa658aae8e84e2ad805e2071e70f96b3 +193c0874c31eb0b4db94d80b966fc7048d5c176eab6348c22d19cb1b9e5e21c3 +a2178567499e93fcab83de2a010eff4394a6ce79345073b43daf1a011293b91a +9ae0f3df0ba070d311484d8308a4b265a6d7ff19cb44c76a504c67b96482fc41 +2f19e36b50be5ede53265b03081109b1c7923047bd95a4febe092973c1f9e156 +1ff07955c6cc1a7c5785ca26c01f86fe1686a5afa122a5609fcf7a597874a7f7 +9d3a10d052cf5a329a059162b0dc2c1a31a8c2a104973d42cada4c9d0a5b8e8b +3a585bf68985ed8cd2cdd72d62e62c4dc2da93e093202ddd6de300dc7d88b270 +7d6d58f98c155d0d37090cec03d35421871b4c8391b345b0d8c46119541a7bf7 +f865545095023bf681b69a8646e05c5f3793bbe414f1d58f71c13b437ab2b6f9 +a4d8cbe6c070f84894a7fe07ed9d440fe72bb14609db4af76fe7fddca8afd425 +0ea0113431d5e4560dc92754eafca41cb9de61835fa34d09a8445ac6d1860b83 +6e8401310bf0356d020fee557d0d8b4dfc6bb5643bf721bc45b23353a6f5cb76 +0465c233abdec141dfc8496bc4724bba079627b2b63beeb98ddbe8234bf9bf2d +cf06f3ecc17061d43bcc6463993102c3aab7d92637841e32a2bf0f46cfa0b588 +2f2649da9a97735150dd42cebe15118c7843b9f70271294b0387f22ba54a2d86 +f2fbd833035606a5b219676681607f615bb66dc997d94bd07f034272d35f7c58 +0a8bd4de8f57eb397d36483e798e9dfc87669c0ef3dbecc57215ced8a28f12a2 +09324357e20d45488a9871a07d579582615198c66353de3ff0665dbe8742c54b +ff294ce36baa0a1dfb125a74b21a93599031c49005b246f4aa12c4e089a9ca74 +8ec05e2988fc70b408f92180ce077f4af5afe24302794f4871185934dabe3e67 +eb5f472ce41fa497184dddfe2d901898a3ce0cda30f1cc3418d5349b0be97cb8 +6848d077085c017dd17f7bdeb0e1437d67b9241715be7fcba3bbd09113c91afb +ec47fdb8e6741c4c7c2f69cbe7d1303b17b94f1522fd10626c1429ab3511b20d +7b83605ef8133c212ac2dba4aa6724e10424d78c43efa91963e38c6e561dbc0e +c7a3c2714c95b7c4219c6cdc050d3beed7a6501bd6ffd60773d247da7e197802 +40d3bb1aface2e9ec9d32ff4c06c4efabad82a15c95603e071c782c139616b38 +d9ef7d8585c343d5922538073029034adf05e21caebb72148d7ff6deccfc3966 +c1c6f04a71aff002b25d674aad51ccd71c63b81b47df65ad8ae257371dd15fbf +5499cd579a61e0fc523d11f14ea74cb6e4373741bfcdfcc366b876d992be8114 +b5f2ddcaf6e42e45b733ef470b749f156b0a3e81354a6da17478afbcd33b0080 +a1bbcfbcb49fcb7a24c269d2cd0082541cd3c8b09ebfa3c21d4fd9177482d8d8 +34fb8d6ba50e5d264f55132cf9977c92d10837b3a2209b163ba670d772727cef +de781890bfc5932b610b98d21d36ff77edebaa5f6fae3fb99edccbee3b8184f1 +3776d863a44194ff1483736b169320b22fc66d5aad268631df7b1c9683005f37 +4cb5c0752c65f6f64cdb911e9090ce3f4e648a98faab897ff136f3c7018e97b6 +0a06532fea22b7d97401bc8c14883675a960168846e5109b515a9389a4b182fa +d9c76c383341c45f3cdcceb3abe8a0e5d44042a568a53596d8eda39d7d34b135 +1b5bb4a87439b96f9963a9b424461075b702dc25616acef7271015b1c991dda6 +ca72b118144227f49bebb5ddecc099a6650d1de57f96364a3a476349f8b6fcff +d649f391f9068b874ded41708905b10e8b3aeeb36e1282f91ec0ab7aa66109bb +bee4378c6b8c43e6db93a558cd9dd9b0b65b0888c0d838490bc67537dc2e81fe +b2f6feb47d49bdb3288c760b5deff452db3fe289da401d0b2b9a89d45151d873 +c7fefc209fde8c0d62e5537bd725e079b367a0713bacf5b6cb2f13effdb3717c +2bb2a41514867d028f94a86d313822e93f9928c0c4688104a522e8154f068667 +258bbac79e8c6570cbc47b123ad9dbd1076c7fb1fa131d41380b56f39e1e8819 +863662e0a5d2345104fc7cdddda747c759560f114e3f1f9accc58a8685ae3e1c +6faedf1094de366aca3bcc18236bc34179659fcb3b6b13c5a88d2ecf88f10c38 +2c8b855793f0306efd2a2f227b87303e9dbae2e41235eed785148a96316b243c +b7e80484d965e4ee18cc2abf4aa4880b5fa8bfaa00976ed67b3b22337a67d0a0 +07c73e7dd588160be3ad221b0e8e8a031d772088823b94643002ad1815dfda9e +d2f1396c02884127e85cfed672c33fb8f80c7fa753fb8fa33f83b16bf36dd7ce +985bc4717d3ac84cbc29b16a459aa368b853f5191a691b901a7b9fbd01fa6804 +a1c14dc83b744a91fe106d8f67b4a89bb4ae0167feca5a3e15b7989b4365ea29 +7f49b431898f4718af4968e32e66d505f4c44f8be62a21fcdaf9da18b7268b74 +ddd98d86d178cbdf65e5ef0e999d6b9af9cbba1232a594df4b2a11799913e615 +6745a9713155f73bba6999a42d7704e768bccbd0b6db851e8e2bb64a0095fd1e +bf2366fdf86b507731ac491ab317d8117d7f5720be0b85a8de35156bebc18b6f +1533a4e22673ae4eae5095cc12d1cf36cd85a4acae2354f1df95739b6da2457f +b4052a4540170d62c551adec5517412f9f490a3e3843f998ad9259e20caea0e8 +9becf6229e1e115ffafcb7c81032ebca3f5e4d314e59821876a104af2f9ca900 +6c2299d266f945154f8646c5933add00c9e0d681810bea6a6d96fab1f5612fb5 +79dd3b6f893b150e2ca8d3f82bd124f1c0355c20ce40a016dba4e07eac3adb31 +8152cf953849db27cd28f5e5bbe4d3b81d5b65a05951f270ab1939cba7ba701c +8c015bf8f103d28649dba52a3540f309af43705879957ac5f34cb03bccefaaa7 +351ff1d2fcbe33dca6e14ced8964541dcbd8f71c01c2c8c3bc80c4a22aeb2177 +f58bc825c62148011a3037eddd70f8da8ccf16b618b7306d11ecd361146f78dc +6a14f415edc3c8d93d420c0dcafa44202a6893639de44cc6305c05669d094981 +9bce2e2a537fc905c85aecaa05cf6f83582aa141a2f46d5490a8801cef063312 +790279cf22eb173f47da6cd725cfa43c2fea398a28b489b4f6d822481d382ade +159e94efa37de8650804d4d562052002e678a046222662b29021c550b46bac2f +2c5e6364398865662589ae60e14d42c15f1a1e77a940d98573c0df6a5c45c774 +04dbcb38c1188d7f9545958cfb1687553cf8e41be3655331217598341b2d090f +d7aa2789e24fd063c3349eef96e1c3f08b4f0419288728333b8efd0416c9a5b8 +178f9c595949d091a46e43067eada8696fc6bf618958cb048d429cb162feadb7 +5316c19d833c9ce7763f9ec7e7d8fdd90009dcfaa82aaa8ade6c9deb44ca3198 +b568582e5ad8e0164f9ffde63b70432cbe9c92ce5c6836573c6c6f9c57ff66ea +22d2c46d51127d5f55c5b21dbf6e63e221372e50bdad8f1d71aedcfdfcba2f44 +099c83f0fa0868064fc19a1dd7888e2c8ea1fa15914d73494088c02a2964f84a +93fc801f1dfd8bcc4beac92e72d4fe6224dccf95b446a9498e232a01c067c3d3 +b0cfb67f827b6be8de708bd32d2c409b6065e43ba23a0bcd4d24ebf35f2675c5 +78ebb4924584bb3bb6502b125fc6956cf58c64c21c2e4d0acfeae8978f5823f2 +47b2363cc3b27afdcc8d9f9446127c288e5793ba82b4e12858fd2da61231264e +f2bb74b1940d4b2c2795db58a767e2c511f8244ee34043e59a03ca903df6b13a +f197891e21ea99323b20f7617a08aea66d4d37c8e2ddf9bf520b99499cade004 +ec8b7cf009b33a7cdf8cfcecd542519ea54ac54cf0e8b5ce3b1a792f483d06f1 +9163c256691915f9968abf671b3b7b44a53c06b4779927f09719979088d0af4a +e2a9bb8f21f2862aeb94ab791db1d6ee75a8523d01fac5f21d05eb05e84aa105 +9a1599718b9ff4930a21fb91b9e79c8874bae9b6d9eb5b619be07a1b451e4b6a +9221c3a0ded60703a8cb18d592ed1711ecfd9e42ce00a8758807406b1a1e633c +bbb9134aa90d9ae2a22ff2051ad608321684d515a9efb0414f317b832b140663 +e1f719a4658937f36060f148350b421e6b43ca644fb7cc4262127b24f4735ffe +f68962029ecd03a63b60c1d0f8ee69c57400ad3ccee982fe9b36b3f0e535be03 +a2cd0408856be30522046bbf75a381818f18e0d575ef998a06dd5e967266a5cc +9d53b99d287e7a84d81a64d798349033f63e3de2aec54e8a5f627744c28bbd97 +a00c02264c35c96049f1ff8274843695eb2eef5d9463c2cbb16b0057abfbf9e5 +fa6583bfa2e3def0fe971a94cdab964e6ebd017af3d4e8edada0fe9ebb73d16a +2b0c567cb73215aa1f6935aed45a2feb1251abbc005aa25300d36779d24ee92e +c14fda8c7059230dd990bd6f84a7b7859149b8c6c3087f42581df7d7a3789b7a +30b7ed67656856442e201e6172e3fa47dbf485f7fbdf2a2ab033a6e8f26bb39e +877aaa9f04693074fd79a735490944572242a3dac3fde390d5ce3456db755618 +e5d5ad16b52b0ed4e33eb1eb7a758a5da2cf2656b31fbe5564fd80d1a6d9f05d +774925597c5eb8220cfaee2e25c4c7b38b2f7964b50d127c513ac3cac2a90e7f +d70a49be1eb686c2b85d3930c79698f6094bc25aff5f40805e872884fefc5da8 +d02a3506f7b3d66d21b35558258a687a6d1a247f95546ebe9a69859b660243bc +261db8398d8b2fcc50ec62208bdc8794d3bd4d5be429b96cfaa3dbadc1e75555 +cd3921a451dcf4ba8566f58ef06514e6d31cc912ad34ac4d572b6dd5f28aec9c +e0b7a69442d56b9599683af933b146bfcc1884724e9498f3567bd7331af3b43a +6433be3d1873d76062e6b126f88a31d888457e26ac859abacddaf948f7f61124 +2b464ad50d8d1fe5076bd4c6096ccc776bfb40eae9499942b4540f1c522cf6fd +831f836dcd1d1508aecb4665d955848fc94a87d818fe176bd6d0fec9a71f784c +0a92f1444758cd7f23f83c1517e07a490d4c860291b3d7943850e755b88485a0 +40015444b07652cac3aa5cb1bd5dfe4b7917a6b9c4cc06f9008377e4d6962185 +378595b272dcf9db0e4f79c4cc0449536c046c4bf634cb93add9a9cbdbd15fe3 +7507138a89a80157539f1dd337c09cf2abd789f1c6326967a4f0d15347e03f5c +265cf1bbdd429ce6b5c14599992cd8dbec4ccec1f86d647aae0926eab79ad02a +5306f1368a2ce38d9129ee30e915fed44bbda31b30561254957fd98cfcd1785f +68c9ad98cd53c74120154a0473af65cbe875fbbab8b190cd1828106c240772e8 +552d711fc08eb02e6d3bf89729244af98cd4720c2f11eed0ebbb577d3d8a523c +c449884a9ec99bf9246e0e9411f5bc20a1cfb9bbb18cee3d64e573d11e8826da +7bcf4a59657bbaca398c93abb0322c19f8833cd9677becf4df0ec858d0a408e3 +797c3580f35646033e3457847f04426c1c1c0f5ecaaad30f7dadb4064ab9a5c4 +4f3eb6ee2b8f47d03ba653ed19e5fc6be825f514647e2c541656ab957c7d49f1 +815bef7561bc712b8af97030cbcf97aae9e9c9752d95a669305d5b97bd10033e +04e2f3f11be61b1eac7c4eefdd18914fa188b9bedc2a22f3f5774ee87a5abc70 +fb5f06cef176e75af45710786903c371cc6f815aaa5ebe5bd1d463ecd9de64c7 +eec044036da1926771d7119304078cfb384bbad0ed27047681f0954a4451186d +970fc9da3dd36b6a79071b7a19728a77108e89de34e39a5470fa2a3166801a7d +a0fba32320ad2827c668dbb082640d18ee1d649ae0a5e72248764b49578acbfa +852b4e21047079aaa0b6f2aa2de6d9817bde0177befaf12b6e207c996d488199 +d533845dffc663fcf7412e485060f8a5dbb67027974e7e0f1b1453f155b7278a +3e7ba71b70e8f68f740f772ac59b01f6e81c95da983e0afcfb8394023e78efb1 +bb7936a5d3f94ff2bbc584a4160d8caeb060ab940061626a214bbb4d4ce7bb47 +cfb3a0423b70024c98e576bc5871146d58819cb55cbef346d772f21d0068938b +7ab6f5ef12f0f820edf37d5f87819f2cb629834a35b0eb6b499aa5dd196972d2 +916a73641fc5c75982748dec6d410a5c16fd8a4725616a8bc29f46d07e66f5dc +edbae3dc40d5f75bcaaa3be10cffe9cad5df26e4de8e1ce464b0f58452a86800 +f9ec22c1ccc01d17e32e3e3f2b9f025e1fe9a4c47657c91083f07efdccfe7213 +d651e4a2672dd315ef0271c4bd90fcac4c625dc48e1506a42aeeb66d13e49ca5 +40ada959a470060a03bac6e1c56d4b526449004fc3eba189132c0c65f6c423f4 +f652f83ce15074301dc8c2bc742d3de92e4585d30887e869f24b92da755a5513 +099ce7cf053e8a5bb11ad5ea88bf840fdbafe220bf10826a456eeb1f4551260c +b4313df7c6efeebd5badab0dfcbd20df08ce5b46187cde7f47a226ad37efd11c +af0a4e2eba23646db60810044cb767e0c99f6a1e02abd1f77c65f3f70d1a83cc +a50b9e74d2259fc69b1278736482699f1bdb75d711d6595398ef5d0a6bde9860 +ee2f85116c3c81fc4d8cb5b5756a05d21102d82952fa350c0f28aaa92d4a038f +10d63d3513814cdc8830b86a429f9fff02594298533201d7b5cc5e99d39112c4 +278b8e554d86ff438bac05d811c0cc027868f88d85a0143d692301810c3438a5 +15fd922522e0891109766c7673b41e7e5af01e72267a041bdc8b15515f0f9bc3 +67c8a1c08b881db7f9fa096b57022af6fa0f3321c5a2530394ded9a15195f2f1 +24b905ea55d2ce4710be2a3094a3ac42ff65f866f30e0da8e80818e8aa83b365 +65d85d45c2036cc6faaf6293bc7e4037debe667a6dc0a765597f3cd4b8a5008b +f2824920de136feb8a91988d50434abc1f817ff4cec9976af12bccba734b408e +e0354adb7f43a50b4cc585dea4a64c1dd5ab7c9fe2f4eac4036183dc362518b6 +1ff457db52a029f8c3a9aff74c35d11d8c4b02363a7ed5fa9fc52d611d345ab9 +f96dab01b1a0b39e36943396089a2cf191ce7edc5d7ea2db98029abe5a4ddf41 +7a2b8bf26e3c96dcdafd1b9abdfd286022eb20d3259d5845485e544d9202f1cb +6e6d7fcc45d270704da09a465949d4a0cd1b191bcfdb4dd9b8fb8cd9058cf5fe +ee7b93e705a1668908707cdf4013bfe664c865938f1e31c4646dcd2bf482adfa +6b078066501624d79d1d07e4298dfe70cab1201a69fdbca9f9cd69f5979cc169 +ab2528e6c4d939cb81937edba5e201b5db6b31b8ee2c1f13f57a045ab503163d +69bdbbb0050994e577ee02c4a1e09bc18f9b9d04adce5f78b61ec482dd05da0d +ec782e11a80c364477a9c13fae97a034ed7f17ac0297cf644b022b1d7c41deb9 +39ad7cea3f646b986ddc2eeadb857a4adf8e969e495dfebaf0dfa7c32b05d223 +ced2b1601ca272d169151cddf70fd9e514a3b5c0e24aef38b5506d274a5bd109 +7efa91ae220b46dd88ccb0f318c211c42eee01199919918d27fcaabcbe0b5e10 +65d6d2c3406b2aec67ec6038300eb4e57c3874c4ad1b102e4f66d6d08b83aa27 +bef1aed849d1c62f912d0238f799989b254e66f784be0565f142fad699c207df +1a0fb5ab5fedbc213a58bc7ec8a86cc63cc5b4ca952f5700366007d564a4a088 +91a8d50376a968d28c3f7fe891db928f005def34c716a78a1e6b5063045a9194 +4cc8981dcfd120555d2a2c18d786a689331f85405d203636c27bb96211646eb1 +79c3e214b1653ad78f7d72460ae70963c65666bbe3829e9204a7ca1cbe9434a7 +2cd73c16c1acb35863da514054d30be90313518106cde67e7bd0425e1d4d85af +23428fa56fc89052dd2b7f062d7b643880d9e4cc4e668d9d2e6dae732345442d +014b258a9035e7cccc78a4a4cf9a35b567b670940993c8b6e523b99d814a09d3 +ea57b4359d0e3f13c381857e37710bc5441894149c3a1611c374c23b1e24cdde +1d0f0d9825e0b855d2a94fcd3024389feeeb163ad1a82c3fbb6f814de88c28ed +29283c08beea1aae5847ad008b6915ce50a8177269f888d527394ba773221b8e +7558b1333f2888311ed3e6bc70a4c9a72ea83314662995d2e06d23887bdaa611 +d867fb577b8e93ede0d5774831940c881376bf308670ba819216359d602312f7 +d5fbae68c913ddb9dffcace253045799f5cd82e2bd3c18638b1a3d9014ffb801 +0ba238e502ffbcfebf4d2d9c3a2b748c1de374435e5353a6cac6586e3496c05d +669a61f66f8e0aa70bfe7e26127c398c42bae23a38afa82ba4c6f3b8a1411540 +f871bdf94f2efc8287bee6e09e9b079c7971a91b272d2de5fb5fb0cf0d8f2f92 +86b39fd9de1d8c4fd20a87bab01234c1b833df4fec8a6accbb8264905f3732b2 +20db506e4434881f75d57767012024aadf6428a18b0fab04b2e0fbb53e1ed835 +3217f0622e9db06277d1eae366ee4cf4e0140c8c9dd1639696a8fb21477cf1cb +7d6a7d94191a124d182e8ee27d726bd6151615843a8dc6366b5d9815a24f4273 +0a823649565b68d4b9ad2f0831bc3e50b488fdee635457110747960a5fe6a3cc +358d620e9f58b1a301fc1291b8515d4302cd63a2af93d185b2eaad1632ee3da0 +fbb11528f9765442c1881e19cc139a1b3dedbe478a80a65a6eb48f47662c63cf +30d8f83718b65c7fb5abb4c0ea7e3b9bc7d98db73e2ac2768bf35cba6101fea8 +07c68e36d36e6f4beaebed6497ce505a32bc4cc4a9dbba4bbc3c321073282184 +3955749b29036a9e3d3d24c481d2de9b2be077d30afda2384d6023733c077302 +1a6d1dec8ee351864eb1b16911341ca425e8ac857ab28978ff0ac608a852d7cf +744806d961afcf88d130695ea19218c1f27b9aa2f844f12f3f7f4bb5b140e1c2 +1eaacee4a5d6e31523f0c5f9278f92ef240497371329d46ff4cd10ea3c5a1eae +540d25ecad15c6ef128f33f3651bddb9972995f0bccf6e61d04e32f8746a980d +7c9fd9d358735db5daa53be9061c99034570159099af19fc883607946be892bf +be28c42eb019357ef6db00faac2835d265ba9c8278eab08fdc48ed9f49f440c9 +4b732dd78318660bf9f0b040497b3938209b3277ec10cbcba5658cf2b9471aa2 +0185c801b3b26892dd47821251c6f8297a88b58d8ed9c3e5c950b10377aee274 +028c6f2ef82eefe352be140f48b36def59faf0bda54adc3d297ba7a05c46ba6f +566fc3593d7bb87562dad213dec40217f56cca67a0f99c8099b2f574a5ee89ed +fd291581c0aca1d8c2615515dfd13c6d5c9294d22cf5efdcce8dd142f98a326d +1015b5f8ec7f124f321a2066ca66dfce3a75c09cb205f516f3e22daf2c966b00 +a800666f5d9758e76e10da0940054e493a25419b19d15261b011d6eb4c8145a3 +df9b86b8fe6548ef60f05ed9688a5191448e327b7141c9c4f36d115938c3af87 +a7fd7332210107669c09c81d3bb9d3be1236089cb1e44eeae9d89fb312c46c69 +fc95357791bae0c6b0bca4278ce27c3097bc285715e23002d3eb3a0dc03af019 +7519005cbf0bdbc529b8dba264164c3a00d93fa62cc02c3aefbe9499310b9d5e +ccb078fa81ead04bd135d46f38ddec4c1d7502bfcfa9a469e94f1f0ecf7a9102 +dbdb9bbed723636528cea3bd2931005bcba6d6ffc31e0365ad8e52e1c513cf7a +3bfefdaecf31eab6d978a4111758c7a91d28b63755473a2100a60ffb99b2784f +96341f604192e6f7af9295197513824e6633d3fd12f052fa27a0c71b47e7bb21 +a4296f362d59493a0ed47380031e52ceecc3721f15108948e78fc4719d989869 +d042cc61a4b1a9a008a7c28de611048d9b37bc1e3ff5edbacc9b6d310c275442 +d2f649257bcad06983e63cc5d3de205ccc8d51e19786660b6dca41023bbd1955 +88213cc64fd7085620a34bb91ec2e3b466a085338678e7578f2568dc840a0c5a +6687040c55d3cc5c3c048ac7131a55b0aae1a9dfc16e045f8f08dcb6c14d697d +31c367240ae40fdcac447c57ece231aacc2c574787e90501d4815a00c7880fe0 +9f6ab58c2128a2b9ae67c5fb2fad41e5b85fd72a24de2e78a9e354d3f7f5e46a +4a5c5f97a1aa745be46d704aa8f14dd706ac5f15d52e21ae701e738ead6b9bb2 +d9d3376d652a35c7d30e03419aa7f07e9d2adda9bc73f8c5f0b71a821003a69c +b622c78986e089330a192b22ccda2e1c4c43a5722b78bf13b3d3b86acd4be844 +34e375cd6d97b8b8fc9135bd49b380fa712f868681d752910cd81ab8b92cb325 +e3c951d9c4c03c9f181d85435415e2479e67b04b31beb122f20640ec293eed84 +a81e212a074ddedbee32ea48b03e2b9108e3abf8f22c388ccda454e9913bb5e1 +0d9ecf13d1e4aa967217145a08108e4bbd284aefd75ac9bed18e2bb52d456032 +a3763db42b1e53f99f3d3b762c4f9edcceb7af7d83622e17b1e4f63f572d4220 +5afd745056a3623b221b9aa6ad4e34588e26d63d4b2b0163a6a6a3e034b93cfb +12fc65195bd1e120f0292d1492378da244fe51bcf3c0736a9382da731caa018f +cbe0e66c6696cbcd6fff9ef2d649f6b4704db351abcf5f741edc8a172ce73388 +0c0fd36cfa521c9f7beee74cd9357d2d9ab8a3248c5e7d3c352d2379e582d66a +b644045b30b2f119689271871589128d7cf9028541bb5c2e5aa8a36f81643991 +7f481b85817c9e7e84d31c4150169e618ec494093dad21ff44b7752085ad0725 +0cf2b80122ee574c25f692154658c362a9247d47e2552dd7e9ca1dec84a692a4 +bfc68ed8c19dc382c0c349184ef4ce5ef57a44873a7b7534266fb3ae3bb416d8 +37d5166cd751bd3c8c51b9d7b33408acdb827d2108800e096ba40f3c3910bf18 +305c4f075cadef9e4c9c370d71307c7270acf0127582ecf512135f82c1a5a706 +9c2a053ffd161a5e5f15a039104728b0642ceb1634a4a525730e42a5054d6cda +f3630703394a186c5c204033856fd37b71de7ceb0c89a2e6623bcd4854d9de04 +416689a312ccff1abd82fab9cbd5a475da84478104f6228320bd99cf77f1025a +459f7ee6b8bc153028249c771356744243486f3f7170b78ce8599770589c2ad6 +5bac7bcd3b5963f97de048caad3166a518eac8f7c15aa84089642fd2c1f4a79b +c8ab0bd6ed9faf3a14882a6606ba2236d601fea3a03d0b4d1ba95d4a9dc15f8b +a9236b0d437f5b69db5f7bfce32498bcb3707931c20778fd275477f53bd75858 +2194982e302c32ebc95c64f38c3ad6b3996228e42c8755c1f9b88d2332749b61 +4aa76785ce98e3a937fbf17058bc20f13bb2a9345a04d870db461484430fc118 +c9ffe74464c22c6f8511a83ca6a92a27fe5bd97d940de7e780b7a81fd3f24561 +f9f892d1a3fe702f6b7fae45e01dce1746159d29b73aafc508d1093959d9367a +3fa01e7611299d6366bf0d0c2d78adc939d6c6fc39506d354828622e11b6589e +095ffdd931a823cf66e29de554fce6d4b1b8ba33a0d09d7e15e706ac7dd4d38a +931c72d2cbb71c537b799fcc0833cd06a49e4fcd9360c303b53d5d0291e3e110 +370a75051c41f828b97b4c56be678f4c1d415a9b26f12f682dec7bece8fde421 +389b87d70bafbcbea0727ec3bd88876061ccebdc7fe3fba73ac322686cd70677 +cd38d44853abcfc7ef1f14bdd73f343051e8f4f540a5286cee84d896bc6ec2d9 +62e8da0b46e19a2e015e68aa7c8f64462a902fca5a6633b32083c8c23556896f +b353061a38748ba691d299b32eae33a3fdd398e0448cc83707f0638bc13000b8 +5068d500556cc4c487071c8bce1b05ec54ff6fc874921478f44ea11167427e6d +eed7b76dc3d028b3d1bb453a2a8a75b87f051bf2b49356ee6f04ab97bb0a9bd3 +055c6bd58e42222b6de7fb55fa6aca9f9d17d5f9c1de56fa803dbb9cf25c15bf +0b3a63cf3c28120d7aca41632b68ef35d4a2a537ced95e227c6f29e1373755c7 +58d9cfe80442932742e54177c2105d85a8c1e0bfb843eb5d56ddb4cb956eb44e +c0e0aa4224a4209d140697984d414bc569dc87e18fbf7dd4ebd647872cc0dfb3 +754708d082be33e3e84cd9d84dc59013283ee0a2ae59c93cdc586d66528fd86e +a5e603a38de57b650f2c935a86a1ea86be56a73d1bbaeb690821e238de5bda5c +71a89ac8cc58335b8e00d594711ab96118bd34dd5e83fad5eb79b9e83b05587d +69ea11715964d544f1a5836eb086faa5036334eb914edbe3d0162ad24a5634d0 +46d9f36fff67988ff8b9f3c6c2c91b9f0d7e831d8c57fcfdf1a5ada2b711c681 +24b545e577c31f6a9d92bb4a12db6d32efb26bb40253b20f44a95f24420048af +9dffa011cd35cda8f84a8c87c24d5f55a204e7a6b03cde0c5696e5743cb43f0a +e507147287f5ed687d4cc44fa91aa713bc86fc714783766a7d19a40535ae1d3e +d30fd58ad30cc745dca0f8ad79f8429484ade0cab21233bab437b035be96c0f5 +df08c7148c0801bafe79d4f913b2b7ccd4f71e037bc24d7af6b0e6ec34cbf4bb +54c54e5952fb14018aea3382128d36f101cb36b0e1c51a470cb1970773a00a33 +c7e02b12d5af09f84a2144ba7ce66919779f44f4b72489d252e3f79db154a6a2 +7fd5851a6de0ce657b5e65dfd92769182baae1aa5898e856569da84fe48377c4 +b87ce2a43d662de1f8d60488917e77ab875fc4a93e8776949c633a4290b205d5 +509de9b261e2e52f65627c9e1bb82648bd59fb55b27703ad64bc24ce90e600fd +d4c0e0ff0c81822b449b7359d62889d46609c578880a627988ef2445955f862a +fc0f69dce95d396c007b2fb00c495506f37546d076a0696a004901d0f591f723 +d92d993085c430b142edbbdfbae6d57e38c82234e58214c186c6fbe3207a7300 +8e10fe64567c02455246d2824cdcb8235527618f766fa39d75cef601f1b56e77 +19f08d849109f7d1c93cf70da6e794247cbd290f194b62620d499ceb555e975f +9126c34511874b592f8b7c952166124788bc09953fe1d852c5cb62bca9a8da80 +90a98f6527da695c857995e3b5df9cf944064e5c465988eea4e14343bf4c3828 +6468520dab5f721eb01b24923fbcfa34a3aafe5233b9d6981164d640f7fbd09d +78b419563ff181b20b6d32762e10f6decd6174ee69ec86b1099438f9664fedb9 +0e4224969c6c099dc67667ac3d4e37750d00196b0002496fcb4c966df69f3c05 +9338252cc3416e74903837b16a7319e5f4d2c91df3eb7baa6ebc067af2e9c1ef +551de9c2c5d20b291fa021e3b33a064e429b9d65a5a7418a3b7511b2c9e3e847 +7b9aabbcddd07866d373b415c6e11778da7c64ee6c86bbd48f60c4ffbf0f9314 +4f080068ab6ea914a37d409ff11e4c40e0ec1a1e620597ec059a244203f924a0 +f512bdf05763fa9fbc0c3900306221876fc8549f4115d7941c0a2194b63847dc +a868d2e7509f69d166b0cd19762fab75be79b9fe639d2d033240b834f71f8aaf +3ce1065066b439331cdfc1c101c0a2445fcb31d2aad3ddfffa0d40702c79c171 +ff71ff3916d30e2bd66b94da9721cb4079e344d3981cfba2979225fa845d9498 +1d39fcd12069625049676f6a103e2e63db59c73223749d49e2ed7f081b52bc0e +7db2a5a3dbbec6f36475b28866ce6d7e0432afd1334eeeb931f48400f1607478 +2263fcceb60d58c881196064ece71357f6c783375f065ccccb5907d2ad438e02 +c1f7c8653390d4fb11352a7194924c506edb24c56d4593d36f3389474d121c8f +6bffcd23905601ab8fd81cd8ef18b39af1369191264ea7e368fa52def67514f5 +2ae517aff0e9c29448e03bd63dea4b52b7d71be32c1a97ba3dc0a609c57c407c +d29b6abe131a7182b1aace2fd025b7168231eeae259bf180e294e3f730d7c8f4 +e5ad58d9a62489990a931caa9f96cd89599b935bf147efd9444bdc0e8782b999 +d803059110b11aaa73d5643f06b025f17eda1403a668eacf9b8c9c391bf2ccf4 +a0bf78eceb14c04041a1202e3e71705a4ce2c7605e605d9e2bbe074ea3c977c7 +737ce2b17cfe0682e54cf471561388a8e8942b696aeeafc60e18ca8c77372231 +a67f978feb1d865c63d661c6079dc8428a995cadf78da6c175f8c882637afc7d +ff0f52c70982540e745a37f334c81d6aabded814552db4e3c786e9266e4c7cf8 +c95bcd27447fe02de505e3879e0688b2d0e37a23f5580cbee98a68599111f02b +bdefaef23764966822de0cf935d98506d8ec5ad43fda280ebc476547ca5ba48e +e60ab7c475fa234b2261b9a0b188ba0cc3f639794fbbdf48a4c07516cb47cc57 +15966d46b986e3b637238090b83a1b547663d9c77ccfba4581923f332d001bac +c5a84ba597ac3b15eaa93cd88ce4802a74b0c4aacf2db87d1807ef49ff1cb2cf +1e89bbb29e86bc2092c83d5879a5eccd33d48ad359fbaf790e8da92272f795dd +82ceafb1a9d5ae70eccf3320be44b42d05741dddb934b2c78fa64f86b28e8ed5 +f5c5d19dd7c6aa9bed9e2d7d2779c3410e6e81b40ad8bd8ccb93d32c2e1e2c58 +9adc02cb978b53771c2c81cbd2e1cbe8c3d778c6c221f60475035a47b936c430 +d151b81738e46deb4dd2720ae08f32421dc340ec28d719bdcd28f36423f483c1 +05ae30820e6d1102e34e03feec0e95880e1f62298e74627de4b356db8327c86a +a02a0ef04e88da9b66545657bbafa37d0e8719315dfbd96a2cdb78828d8ef193 +e36d80d476f3264ab07319113853cdf2112bc6f436b99dd521a03bfaee47a6a0 +e509f26bf0c491921cdf7a0083d8186ccc95a860e5cdd374acbb945f55fc83e8 +b03838615d0c58761a05a21dee923e51aafe5e2c60ecf0800fe5aef21415254d +a7ccf0f50da464eae8485dcdf37312c675b82d6b741e4a301501b093b28f7288 +986220e9b70b5fa332fc0dc518f310004011e099de57bf4be0cb3828f1415ccc +ba322c13d4e00287fc2bb14ca5ec2eb809ff35dea9e40ded172409286a077edd +d8779eedccde4bcf003e9f00cf4a35ef6a2fb048918943091ca0405ab94083f6 +03e9e5d14f03a647478358c815cf535c859d64d5cdd5aff8e6d3b8d6fa3c9fb7 +f578e1d894e1efade0c0651cbb2a92d08c40398282a5d4422a6f42cad5316ba8 +b2481335ead0250f7ea1b1fd4b75d994958601cb1407c539b6de6d345d26cfc7 +00690b42130dc0cfa8c3785ff55706756c041229dcf29798506f3cf6c145f30a +0d68a37d3c8087cbcd0e175f6dcf7721afa998a5ebc6bd0d61c6ec4a7ad6ad1a +f657d3079fc3a49438c4c6a4427ec88b16bfb2f30f10dddb50b9e200c1ddfe98 +9e1e93f006c1a3840c039ec485165fb2a92ee01811bed971bc98ba5fe2224fab +eb5afc4ad199fd646932fee3b9ec990cb03925dcc18b7cae3a2f5cbce7529349 +74e0598db923cc348dd1877256250da5c531af6bfc608c5a18c62fef44c1d107 +d1edd82212eaa251ef8dfc673e7bf254d3f3bc50a1ae15e645761c52f932bb4b +d92aa16653293496b626260173bf595d1a9959d5f4524c25c6e876eb2462ec79 +46fd9e22fcfb739034011117526c7f92e0164f87555e465b4be391aaf02a6fbe +262e7e9063e2cc9b98fdc39ee6572dd4a6252c4aed682edeb0c5422ac92b2dd1 +8de80a6ebdfcd683f7ba6feb5552f48335e011aced482afec5b146a64edb4295 +ecffd42158694186b47b7684eb7cbaa695579b0214b9fc794cadb338a0e68225 +a33637ff10789ac602862dbf77a7844d473ce9474ffd0cafd9108f0e3efc1d4a +68af448b5867bc3203be81ae9e4d4ee3cd6b9f472a8fa20de9f2d81817befaf5 +d2b9da9b12ff22e1315eb405e9f476eb88b29d3404e281dec8a765fb2f3216b7 +d30ffc43c263b77eed4586152e54b9f1d880b8fc3492aa0a30d2ec879029fe84 +32587fa86dde58745037ece9ac1af683d77cc59a22939478e110f75efa689769 +f4632bc903bbe2d06ae11edadd20b2e5e70ebd42dcd8e897ec5424517f360d10 +1b5b6f1393eceaa1e6ea73b146b7ffd5331c0799eb7aa63d09d71857fb783b1f +5af80eae76a100aad3cfe0fbb20cf786dd6beacfa0dc7213fcbea7b1c43c9bd9 +c6689af7753123e952ffa52df4cb24c1253e1fb96394dc021f7356a200db51da +21f910aac1d9527b2c2d5da15f72720b03d56fe8f6588961039ab29cf2f561c6 +d2868c17a1a07bc5d13e3881027b7acc87cf511ad7176ea74a45ac93f83750f2 +ff417269a2b65ac7c7d87454a74a81c1440a99b2dc4a3885fc2bdbd72f16767c +5f28a6b46fad8c374d8e587f62a636697ebddde4540036a516d1bee6b5f21722 +ee1d04163c17a0726e8f265955595e71993eaf9ab3564e7bd4387e60204ace42 +e2c025bef905ec445195fa3e8d92983ed4b9f51f48ffd9d1999dbd1980774acf +8ae088f38c302455fda72c3a3b6c50fcdb41a290945dd699693645e5735a8f41 +7b07e8983f54d2959c2dfa482e00b2a96f454cfa79aac3af338bdaf8662048a4 +82c01db6cd9817d541038dec3fc16527c6805a765673593fa4b925bdd6d97796 +c6f5786460434e9e5db6db3a5cd6694123ab0c3beef2fcd8db1490e66f05ebaa +2ecfa206edf7589bb528ec4532817ccf0e199aabbaa0870bb081a7fb0c0aac1f +a47f36390179ae9b0cc60676fb09076351ada02da2abedc84ef72782759f3c8e +141bc9db32b938b20d148e7ea350fad91b70f3ec573f7a28b3fc5e55ec421728 +9b59d7a7e59e3e52945aad52554a0f5530b160e6b79455da3f884a2c0f348e41 +3ca1f04cbe609a1af978849b159fd5ac6b73055f2a3b188f1a40a840131ed425 +e560cbe14087f3fcdc1d86301db4e29142e0534bd5cc2c38891e528d331d52ca +f4f1945885c6c376bb0ed7ccf057f2574dc2d6833cd37caebf2b2d614fcb4531 +d4bf09642fb149d74ec8b48bdf81c2116dab054b1237a2b27b9884f1bce8bbe0 +f09ec085e110dca37b0123880f185b3c8071e0113ee0c77626027d552bd9aca7 +8269ef1c7e6017237f68853301720aed39732319c30b5cad8c14d35a89453fe7 +e796ae96f61e50cd2f1f70448838e4185bf062fa9c3e919c9b67712d66333db8 +034bfe267c5ed1e4c3bb81c28ab6dd5c0fdf9bcca7df10b41f8469fc375769d5 +19fd2c18c8136d9859d648c07801f1f9cec3d5dbae9d7e398085cf0a50da2959 +0b66a50519ef7a1ce9bedc2a4e49dde6eb53a0154a79868841e8efc6dcd90510 +57ab2d6e045482c63cd8b945e62190e23d4b01ba1c6f14aeb19dbed29137f5f1 +be9b7766ce723cc60a299793c6c6da9b00a88ecbeeb6dee5f017b4ab4b806d55 +58aa7d1999dfc418f8c17a11ff35eca635540004232e3e50ff0f05593f0c954b +9684440495a6b9eab56d9b92de8c541e967fc60771d0dbb3295611bbb608b8bc +7d8a7ea5e1a36c06d72c63031a23a8434f8f88831cff87b7136d0602d85019c2 +ce1e3853b78e0a746d7ff8f365537965d3f030a779137203323d898550139f3e +cac04f4c498781b46ef451e4c8a58e3013644d5062f82ed6ca076e2782e53d8c +ba4ceb9cd48bb806664a3d6cc2b5d82d47946776ad99f6c8f1778c112bc9e70c +a731ecfc58dca5fb5f2f4f9536818e330cf36502cb4258c41888767fba0e3320 +a579c8947bc22e20ae6dd92c94c06682a45c7d6683328e683d755a6d7403288f +ea0cae1dc3c85fda8d1596e26dc37b7a9992c42b37d85b5efa203b60ebeea09c +7893d98fea7f1c971046894f75589a4dd409d76d059cb3637f700271ddba56b0 +d59e848be3e4fcae986a0c1a2fe22bee8b99b059ec2599e7877abcc885c34acf +008c2b569bf921420f922d8507ab4979c5ca06f7c65905577e960a1256b880e8 +7318bbb6bd067fadb4bf52640ffe9858474983668f59dd7ef7ed9ebeee7fb510 +9d1198899b69dcf37e953d9204684864380a4a20770bf627860fe31d2748afcf +f002efedccb6e1b6ee62e30849c1d086da7adc64c7330ccad67ae166a94a2328 +12b08d3849ae3a779fc65d5f31c901b3bd494a1524a476ef4feca2ab121ed20e +c54e482c2402b387df01dd50b06af856767196603f81d67886935f917570edad +9bd6dfe5105f5b89dfaba8759f84afb19ca50bf6a88b5e7e7f2f70bb35b34c68 +9518078bf54f7ff719d679bfd3493f8be45b5cbea0e4046d2ba03e4359873e99 +ca8b61f277f340a6169f86de9356e0a83ce14a6b5c781a9d04d767d88945d9f1 +814f2e09675de7bf9acbdf5098ee8c80c4814c7c7aa417fa2792d34adee767bd +1153c6d2fddf46bff8c5f6eee0d0500c3a3c65e0f47a8b8dde1601c2b67165ef +0f5df5f67100510243f993f39153bd5d74b2925bfa355eab2a90b63d658eec98 +a1f8d0bd64ba1c8d58ed39ff3e06dadb326aae1ab38caa973cbac55ddb2b6d1f +19e5491d31bc9a4018ef53842bb57d775a8a60620783da5f0df690a0bebbe05b +2a4a78a4364496f094a4b546ca2e6c072522d6833eb731f220ad8937aa9a68c3 +36203347f342618915ebabc2d2653533e229c48a81ae7e65a9138895a2dc0ccf +2a5f1142b9ae641b19837d0b37bde02703346bbd4638c142b6be23b23939bb61 +505e7fc7e0b4d814ce20656c86f5552f2f4465fefd482218f46ea1c0e4fd8ac7 +32c68beeb2657b393f967c81237b907e31ac7ff91717cb96747a47f5cdb9e0df +d15d0c21d68ff424260e4add23d9fba89a768e8b9cc0342a205496e1bdf088e2 +895d3190b22341616e1133576b06218f795326f377cbeabcc39af35a3da7eed3 +6294c28075a8c11925d4960553129faa7dbbb9c70b6f9ff166ab58107e4d145d +25d5a28f4e487791cad02b193b891d7bec4bc214cf6f84f99417abc889e235ac +ba656fdd347527b6c0e18436764b8d8342034a1a8c08623f1dc8bf380c3fdc5e +91fdc1366bbffaf978404e77536f0d4d651795cd79e03a7907c4c882be39a3cf +750b7101981c3eafb069f26536c4a96b55a34ab0d14c6eff3d0a63aea2989ee9 +ae07c8a04b7ad43224a2f54c0194ec92cc557b29dfcfd13c9da29c85e1d67e5a +856ca1bfecdee4de141efbc5ec9b4c15104e9a038ccb9f29b004d29b97f3fb27 +2735f214f5beab9a7af83ebdc406751bf272039342dfb89f26bfe2e2c1b5eb71 +8b3836a6d257379a69efa8e4ca8577404b4f3233a4d1b8b4a74f272e3d7aaa6a +b86c6955b8bb235ab3945d5e5419829bf1b51152173b6a003995e35d2a02e96e +48056a7c595e184187cdaf59de96c37e8681665acf7bf11fe31f32e507835120 +989649420f555d800f0769af3fbf63dbeca49d8d7457564747a9a33105dc7104 +e739cdd9f66786011076cdc45f218141b898d2fe89f43bc6bc2ac326ad3e73d0 +325f0ee56d94cd7c68d62bff7856b6fd391b098042cef48aa01589997ed03d34 +14c3d517d936d98e6748882ef64c55375116846df23becd57da01d06b81db58a +1471d2ca9b6cb4e1c56b41614b60c62d545175bbb28a49958a4321b163c323ec +1b49b9857f64548f93e7c185cc120030c57970c61e951d25dc4a8dcac955dbad +29d8b293d5aa329ba73af88ffa1085e3f65c8e328c3c965b56cfd82a137d4cb0 +742e5ff685fd5ddd7dad5b4fa7bbf8928fa0baa0d400487c7312c28e8751307d +ad209634989baf95c64d76e2a90140b5ca223b3071a426fc4257a1f138054055 +a178c82e1cf35d8a3803ffd85f717dba20a5d6426d9d1a7413441ff23acbe466 +8e56505ad7c7103dc5879d41c362d5927955b83f3fe3a481fa2ca07d58f40bc9 +bd741b21d9e4927d0070f82ff21e044ead3933a3ac42a8973f05a0b5db792b67 +9d78731d75796c32b1a5f00d001ff5c90ce91fb191404237a0610deb69c28bcf +6460829e27977af8dcee473df143936004dff68331629e05aa36949fb68b84cd +82027fca24b020e892c23a6e250bdbf7c80f775cf3ac8840c038db2e49e1c189 +300706da6a11733b635d0b99247d0cee79b2bc56e8f2297344801ce5895df21a +ea7f383f0a9d3100917e1bce9f2f5c1a4cdefde306aca3cf1e042f570296c87f +1695f3d8a04bdabe968c779794d4df6a0a2ec567e64a19d05a59f787daa9cc75 +b27092a5dde7ffc4607e24df3e7358d067bce53fb86def36e63771c4319c8876 +33d8782762b5491f0dbf40308e3af64163d5b050f398ce36cbec0c1cbec65f96 +908e50912bed69a9c2282ed185a2d82d98905332b75d8cc9cbb25670933aece9 +ef278b4e913fc062a2a853303e0acacbe2dd29a4ae1246aea6ac7257f4e8f73f +865d5e3177faea5922304f6328655f0708632c8807c1ee5d9447df5f3cbdd812 +27a86315c2df4fad27424b57234e3108964f153c912622779584cdf69b646e26 +d17d3145ce514ba83b2a51a79be4c025247d9e0d832c81508bfb8d414d3694db +0fcaf7af1e57b9c6fc72c27bc0eea6714d77238ad0ab849fe2a583a8991effe5 +4d891693d603e72ce7830690d5d7990d8d32ab33e860d04e5069aa7f48b31662 +7161cdf381f0440d30f2717b7ed2ffab9278bd6834eebdfa3cc5f94c926e5f8c +02af680e49e860e042dad82beca2ec07d1a9e5a05ab9c6e2287e0c376a143452 +725a331023dcfa6fd7613af9ecd7ee5e3063b5f8cbba5e3ef58fa94fc72e8ad1 +091f47a6fcf9097aa08894a16e0a96512c733b3c48e619e9359940b5cdd4f667 +b1e384e558afcd8f812a2778279309101965f101bf5a799848dc66318601fead +e73e21d06d946fce3f29b6965777dff0ed722a55ebfc532e83b8e1dca6b862f4 +3f7d1868c867d65f9b4af94fbc99b25780b6f161494eb70a9ee4429b52a715e0 +168ddeaa5fe996105a370d7edd05f8295e8c1eaaf080c9514b2fc53941c5f9a2 +189103f5cb960e3994ae672a41633ba8dba7dbb3b21f735c5a04a53c8ec76c05 +2f18ed6005eb6a5a4d39d84133e0081f5cd5bea8f6d0c9fcc1de34a416e9d606 +b8a174b7548aeeb137b5113531378ba00e1c9192a5792905b88c382d27d449cb +36ab923736286dc04c0409d236fc14c9be29c79a8336c6636cd43ac8a45bc2bc +bc50ac244cb8f72ae49c44b3073f5deef766e0d5a855795b1139d11c807300ca +4372d9b09d607e9f1fcbd77a564fdc0f34caccd720454db7b36021f691cac0fb +0174f67cb226f39f877ca6c698d3b6edc6684415adbb76341e19419de753ceb4 +852e97171ae5c28a0cec1d16bdfc64cd511b24cd8cf73a35ccd8584d325d53f9 +9a0cbdd90260d51513e2981e027806997d9e6e610df7a8e7d64959f18ae88db7 +bb7086ae2c4a99b795e117b27714411fa4dbc7ebdee051b1906d5716021108dd +169cd8f8bd83d0b2583ebb3a19804c5a49cced0c3851c7f2a4c35980cc094cd2 +e4807ce3c4e0d75b9307d4d073cfadad17ce27b378ae86a770227dacd06c1c49 +90be56957646e6366dbcedd6a3b8eda33c082b76a3822214aa2bd3bb0b377185 +a3f64ce8e364342f3689ceed5798b83bf024c37b52e574d65a3009c69af84a43 +5de3b65e0c37dfae23fa71a906fe394c6d08c4323e3db2313ca8a80c4aa9e260 +a1ea0379a5c684f53aaf12752e541434f64d75515944d9f5dc06ada01d89e599 +c8347387755a2f062c9e6e284d6332a5a52074726315da3352d8cac2705139e4 +f73da239a1ada4dbe1d3b04aeb740e567cd3de14d4dea7230abb66bfb72d06a3 +8763139f5a47c5c14263dd9fbdff1292552b9e038c35de276a3c3cf9757c405c +a79a2e93e05ed852e0c911e84520c60d2c4f45a92d5ed9b16322f8521339e920 +e3acadb21d34eaba092ee4783666b7c66173b5933b1e7be301f74ca9cd792b2a +95418d807371ccebc4a822fa47481863993c18d5bf48ca8d28f107d51962b83c +f948c29c5dafec809f5aa2b75e3db61240ea8fada18c5ccbbd7d4bfdc2543b45 +acfd294e69ed4756199a45301ebc4272bc2711b92715ee7d2e19993fd77bd6da +1de886b720329aa5d53772c87d10c75afe223e3a5fd3495426e1e1a00d56f115 +8100bcb16f4e16d6ebc8f26092a86954e56a85397d7885347f7ff1bf86f63c74 +e537d8df7e01799f17486ed1e8435e742786821eb856383491de63c27d9ddcf0 +679c2b2a8c502a2f4060e06c2e7b65905bbd1c9a748e92c8aaf93edd79cf7d07 +ece8a366bc1030d99e52117242b9d8cfabb17cd04b5372b9207534526dacd520 +cc49a5ffffae155f85c7aaaca277c5722ef5028725029d93eda73ab8330c290e +810f1a994a5cdeb622c91ebabc4ae3204efe0bd930867e3dc6cf09d74e6a68c9 +dcbf2cd210cc4cf785e19f350e66a5e80fd0d4fb165fe4c618e2a89ba713502d +7cfbab9ea4fc1689199d4ffac845e7501df697fdf6dd7e554679a41d99b10e72 +8cef2c4e6abc0de63b818704bbafc7a0082ed1f190464b4c63b18bc85fafa256 +99aa625e6bdd5bd743880e44abb10c84ded477b186c42f03f2fb32ef0779e973 +83fa30c9de34810825a9f0748b1897698004d87f25953dc9384f8c7f2beb7415 +5116b13c062da6342ef558ca196842ed7dc2db9a4a0d163f562ac6b5c104d846 +4029209a533c11513bc4e77654913009972dba64daf070bfcc247f5230c6dba5 +5824795b612a7e505c90495b287f7985ff101c4f62c1dbdda0ff314ae1ee97ed +bc47f650e0b4e781ee1a005c33a5be73d53f02920ff474f790c423d6d0326ccd +e99920fcfc2fc1e0ecc1768a49a7fd710eb8828ec3c80972b8d8acf13bfda6f2 +319f9f162be224cb94b8861aa7debf02027380ba832d2134ded5aeb916f63a61 +62b920f432f31c4f7bdc6b52bc60b52d931cc8a87e368a78dbfd3fecbc8c1771 +93707dbb31faeb5dd2a6c82967c6aea3913d16d95169c0163dff25ac90a4d2f8 +f63c09580e87f4186c4e9bb37f1cedc8d5cb000dd25bd289baff2e8b40be8221 +c1ac6bc301f0d85fa186bacbca0301711a9d08988e5883e815dcb1e339664602 +7c96807a8f57fe0634452ea5e313b1ad7efb8878f9609aa68c1b38cf85041577 +d0e99736f82ccdfacced6c82ed8f4770c8a10732d214bc14c778ef0686c189b2 +321f2c6ad3385fbcb39310575601bc5a6ff22c76c9b477b86c28ac350cefb1bb +4b6cd683a031c21ede687d12617d52587a549472cbc3b128b3d2519d1e20f57d +6a446a4a5c568ceb3578e3060a8297ab67fb7d461a2b13bb5647499244aca64c +101814657910b9bc621e01334d0f12640621f38c173ad4f0c134e426d38a6f9e +cfc11ef71a3eb3a9fc9bac8b13afc81e491843ec7a487149de9d4f3a97fa00df +6586ce197cfcefe4b881ff891a6cc4ce6d628cec283e51d379a40dd1b53c33fa +7739957ea1d79e9d26f447f8687d34c81f7c4f9259ed876b7b43b109e3d36a24 +d29efbef180284351cd5a197ce3d4bd4e001ea3d50c01714f3f503b6eabffc76 +35af037b8118e4af5b6e29dadb50985c85dc115de5c3f312e1b387b80e79cb3c +8a0a215c984ce1c19d206679924ebbaf104140fb9c8c86bf6efa583db286c15c +95c971b6b330d5b7ea1a23eae24844f9896326a36d6b6a3e234b59c1354f3c5a +c679ed53ab9370f84b5e4f8e197521bff848d70ea4b7ba23c76987e20206c1b9 +95db66b0fa4c91173b7a1acb2bdd3ae48929079b4084264dda48cab03744e049 +c34aaadcaac2be700259d5dbe6204dd04ea1cd3d4eee42adc2e5916e43691b56 +1e6d4e431b458816d7e41d19e93bd9190b2dc1062bb0dad85b1ca8d87a78f228 +e68248c8639e38acd58ddc95bbd07aa593ccd656ce3e478f4862220289afd053 +119c5f6e43a79a4b646fd969993e5123a7ec9fc6f8ce1f490ab00a9dd336f783 +4b69a2e7118239c46ff41dd9185e3a64dd00f74ccccf2a16680f563a641e3168 +a17c35bb7cee0cf1fc7c97d4ba7ac2e175b597f5915c75a13515754add9d1b02 +57118f854881977bf422e62b44893a93b79314792a2e3c540981a671c8420ce3 +d57d1a6be6efdbcea47bd8350cd388f833995202452ff35eda6d6d3d08f908cc +6d64eaab9226f76502d7b486d5131e8bd092df4441e4c4bcdef95fa888cbfb9d +574f213db63d1153e85cb17f9762128c56c08c25f517aa7851cdb5207eefb495 +9d340bc283c1e8bf768e42ef3e7dde33eff11ae48dc26099cfd23dc6cc974af2 +0b0e5f03ccf210118fc03607dca2a5b9e05d76394ccffedb52319596547be54b +0947d117279a3ecf3cd8acd4deda73be7380291e83ae66770b5f59fc9d20795b +c01046dfdefe65109f8f8373013cbb41fae0a4b8213fe6d9dd456062b99c76d3 +ac26b740cf667d1534d194adab90b2878d25ea9285b433a26ca863f72131c391 +7e1ddf781b5a71e05eb1d8a3c6a5094f874eed3f1e41198f90467c9b6c4df514 +09d8e1ecea1594cd5b36467be00ced16cf9df679a8499fc1dfa303c6d2996f96 +4ae2145094b90a3a0f1489da719f49b020998e262cf90ee7aa481ae88d7f3aa9 +3c9aef2bd8caf4de9c29ffc8c2c55a045000ba9829060846a580b8288c93e84a +95bc74e2d31d8cc6f37d38f6edd07cf253e930bcf32a83165808b3b8e2fd9322 +b83139fa3c0811ff79f52e8c5a8f2a6d77292df82c0bfd8bd1c8cf5644d918b2 +ec8ba3506811a8900a2567f345f504ed3ff0d22b1cb7b479827475a360faff55 +bf9bdacd8f18dd1c324ebe60a6352b74a9acd36f2292c2aab5d5748b9411d05d +80617bbafcf6dc3aa3ad51fccb8506ca4369e9c728c45cf46cd4c490553bd396 +6f942f10909ad791ce44e940bb7311af04377f20848eb98e700d751545a0b7c9 +36c1a137e6efebe239c1731119c4e569d2a8abe54df3d00ecfaf12897168d695 +97edd62f40ec0e61d1239d8d5664e3c57a2de602a555dffc8b3880e6988470f8 +eaed5d5324fdd7fd76fd7e2972bfe7d47414ca0d96f6045b9080ce924d0526c6 +942fe07e78281a3435a973624391ee077cb2096f8950b18586470b6a5e7c13aa +97a4f4433e3ddcbcea49420a64a15a5a6baad2c08640d4b563c0055aac381a4a +aafc34300624a5c42e622dfc9deb3c79232ba1f190ace6447aa1e9f938d16d5e +39154e55822f6c079cc2369f3a34dd0b332ae617bf8fe8726105a3a99139ee17 +d30999df7e441feab09d4d5ccc4edf49a0c4df93063c8affd29ad28f875cd13d +739e763a3f0ccf8d05a9a58362d4aa159ec61fe9c4792cd57344e4daf4fb26a2 +cf97843e1f2880672ed37a28b84aaf1fb6d1e518c5a6db7d606833e8d48352dc +672de4feb445af2a8a8f267db10e2577d321af6ad7aa93ca2f82a16dc52f6728 +adb0728dcd9c93d3c64af07cb4ae27e1482705866f380fd151c9f244f8f11b3c +cb11fd2c4ebe85042aab9b48ae9452f55502b5cf234df3358d065e9b9e458168 +3721fa5ced65b3ca6bd03b66d40dfcf174b19bd623a2743c9375d2015d7732cc +f4f22c851c0d03bf147fcff3f10ea5e8b4dae8b034b4e26ac26b93b3858a7d62 +8e218a2378fc21f77dde5e49a19892f3bcaa04e6c5d8cd5cbe9005c43f2b93c4 +2836b358228284f03e12201c628a11dea8c8838bfa35dfe70c8e48556b794d18 +16be72c51d0e9813fb77df7c87da1f1a76bd8d60a4f58ee1a990bfaf4b3b28c3 +bedad65fdf5c261dc27b7dac183dbbaa3476fb2b20095608d67be7334f4516f9 +309224b32387f95338da2249fac2671465a3770f6b0d90c14d77de893950b36b +19722d955ada84e5e1fb328a12ea52282795aa6bac47d9529cee1ab52c22816a +0fad592aa6b38ee8f711d11b2a66929c3a46c4c5e62b0bbae30f23fa1bcd25c6 +20c31e55f7b655af0bf0d13b6dc776d4012ba94bd14ee136cc3776f50060a13a +b51092befb18532121435dfbb054f8c4c8be5872325b084f82463866a98c9052 +b9fec71cae76174fb441857e69feaafefaf7f7314b8f5c745e31e8811faa5724 +0b00933927651836670bdd61cd37e4b8f43e41c6c1dccfbf5ac6c5ce8de92cc1 +406e93326805e3d3b075a311e32c84118d36473eb9e2dcd8599d06da92b4e3a1 +fbb963b2063cc2ec1ce8b792b805291d8907a1d66cff84f088a9bf9804ba6270 +e586097b2d0630faba1f67e6d53c0b338f2d04dce35aaba716689effcbbd50d2 +91e62c6143277102b44052bc7007772a129c3e51dea8c21588a699cdd5e74836 +9e2db84c879147641a08859fb5ce9b03f4b9b09c2b92c0380b04ec247af2ff9a +e6a118c9cd1e6c4c1a1f600fbd3826d6da4a533845339e1a81a0a6c1dffe8fda +538a7639249285c401d905ada4f55d4faf641f30094252a8fb065eb6a8df4a19 +9294ab9cded0c4bbe1ecafea5fa07c207b9747a0c7f88b1fb06c2aaa1e46b84f +4012d0f3f343be5a7c84546a40ba7598a37fa83a95d740ee8890729602c7957f +be6ab9076f0439446bd155f9f828239cdb5e8aff48816779bdf2941951d3f15b +252f50bb39b569cfcd81be24a2fdfe918ca66d6017d8b72c46979c932c7d4487 +acb4386718e833cd230c48656ac255b7912c1ea44a732ba92f0c4d27643f83be +d35e9a351ba39bd81deb370aec7814bf19708d3ecab4ed652a3fc7a295dc3bc0 +ca89839fa8c9625a2acc28c2be13ef36ecb861c3baeeddd502e2bee33f7a3161 +67bbe24c8cac0a7eccd7042f6a27f934c26314af5778c5f778d9ff754e6b48bf +3525ce377a7a61720ce6c62b076c657f8b0666bfa6f462ed82f52d206a156070 +c58f0758c2d992319c29c6ff7a1e08d24c4485aaae49458d930d9c033e10e80c +943db47d0a594e17db5e056fc603b93bc2ff9668e0176ede0c941c0823624ca7 +82604e3a9d9271fb6c087fd2a048339708982ac2a987c7bbcaaac8c176a3aa8b +ee0534aa09005dbfde18e245a98cd05e376d8635e2706a851a112877a5317ae5 +1fa0918caf204b2eae58c43aa6d4a93a15fa7e2704061a59e3be406baaaca41f +f61a52729f987bf78a2df2c9916308b683f8e707bfd4549671ece10537ee54bc +695feac1a35a04ef0ab8bbc382cd2e5f6ddb2074462006fe2873c9d0d3e21cb6 +b7fb90db3d773361898273e12c405865314d5f24b0712d4a8073ed38225f7891 +1bb183adc859a424fed10b0c0e6aa3c318508ee5b2ac427e825bd17842baaf4e +9201e9534cfc930a660d4e47287acd966df241addaabfeaa5f0bef21f1e6e192 +b46907062c4f916cd0b235736e6f6166ed4b9673e27400957bd2ee8397cc7972 +4b32f88a06e28f753d0ebd79000001cf98dc99685589eb4a6f7e111c8525467e +a0d0e05dbba5fb7c71caabbf1d4fc0e5fa04fb371edf019f9c4862f584d312a9 +e9685a935c343724d4bcee6682cc3892d6bd92488b865f9b8591fbb197570f51 +e9b2f994e1f2834d7e0f6c4c50727245e80a9d19bfb96c4520c08439882251dc +8a1be4e1480457d03c42bb5e046a9145d69bd80390aff26731d1e72161ed305d +25a4f25ce1aa7cc0ec85af2cbfae1d7bb82bf00575d9e31fd1d04321c88332f2 +e1932db626f23d20f09927ee492312f1a30f897b1e3284ccef0d50fae35802ba +19f1b21c6de7a44614c2aea7f396400d0f9d98a9a328e3eafa280240e129fe52 +48994fd077066a01f2a4c2649289403ece6944c56fdc7e735236f895c4f42956 +3cceefda048ad9460df13eb078f7ff457ca4768ca2ff24da8e1294e7f739aad1 +668854f8fa9f93ba164a248123112eb96f2378d39d4d7f51f53a1be6769723b3 +2c8e1d0d23228d1b9e30011e5d1900f1277da89a4d48debc24b38e3178e6a854 +07578b2c58f69e329e2407d6bddc38c65a04436d579b49951f486a7ce3dd8589 +92b3ddb047a25c616f09635b8d820fa63a04b773a3cc3b72b6243eb25b206760 +8e3366ad0874f66c16900dc2140cc2d63bdbbda66b994efeba789ed49dbe51fb +96a6472c4212cc92c1fb3991435876b4302246708afb692f8c3bd0837c8f1671 +26d9a1162b698ed96565bd158ca8ce396ac81aee0d8004610cb9599abdd2234a +7410fc5116810b15fe55817ff94313f6fa524d1b1cb3909b5acbc8fe756f41b2 +39d93396cf285711385d5fc66630af33beb3c57b862b16ea4ad26d5dc3e639b6 +088c9b0af8ef5da4108f702df1222ea77654deeb9fade451d3aa1001c222ab05 +d6892b435ecd2f819d933224c47cc46b6c40a5faeffaf75b96a769aefa9c1c4b +5028b958d64e08a71672cdcc802d9f47bec47ec6ab5ee75e3c864fb09b844044 +4919c97dbf23fb34f353e46b797f88a0ca9a71367bf05f2fa2f50a2dd5d3cd2c +f0bc584c1945f9827717eab79aa72434dbc96ec8aa7ac49a85ac5b0cc07c2cc0 +a62559bce41fb5d0f08e521af896ab2e1679d26fee019302a4545ef15eeb79ee +00cdcf39326b5353a8bcdd9e25a9d61f2697d568cbed8e054a008fa5585cd9f7 +919190c84732535cc9509f845d52518d84a2664962e4fecb05603af8ab204806 +1ffd9c8bb92f4a1f275d3f3bd6a2eb9352213d4a448641f30165a297c42ba86a +a86aeba2d86fdc20d023b30db18833f0f9cc11024dc63bf5afa8a153af52a7c7 +8a0b16b29e36c88cc8baccf963facc4cf45dda0de3433a916b42fdd2b19a67d7 +a9bdd03cd16ba3dfdbe8501c0ba48874b2993be793c1f44994427abe1600b604 +d36ea9a34983dd52bdefecadd1895cd841aa6e0ce256c689e4ab41530fd4fdeb +ad0396b587f8ee909b77b1cfda1a2df490f888a6186f93da9b863e2800bd4588 +7a9993320dbad436d318849e0d974c30c195ec1614b51a998f2b7ce9b9fd2a78 +fecd8e56b552a8a467ab8490549c27f7f041d0a6134fa0d7b9f0d6cd1fae5751 +178fb7ef9c21f765fb5b4abc4036e1c685463a986f1421040c0b85c53ea66ed4 +ca01d8da4ca208d35c3f67e8ed0ff316ea78374687f457dd748177cf3f56173b +1c547d0e4a8840b2630674fc0f7ec19bf47dc4b6df9037c93aafb3141f5f62c6 +0725ba764c49c33792ae5cc0faf86339d6ded1496ea031e9c2a2c5459eb950d4 +d851bdda33b19dc156879126636d15c39dd964fe2cbd7657da0e7fd36c2ea93d +f97588b70b3960b4e93b5be046be2944147df391a1cd69b942f8b5a2e8df3d38 +034a058a34ad6434ccc14fcebdf43b1d6ea2d5d9b60496f4dcdb83a1cd447243 +60acf3bb79c246068f3c8d643f5bef65683164c22c430fc837ae99e2364997f1 +772d167daf2800da9c3cc5f757a5f029e8c7daab301165411e725df73ef9151a +dd5cb1218d4045aa3e6de3c2f8ccc81412cfe9acc388aaa028898141395a524f +8239ffa5dd7b6f0c5ceb4cd5bf725b44db3e1707cddf8829d28cfc660700d594 +fc3f5e73c0758f6438a2307f4943c15e8b2ddfd250f7536fe5e280f9da6305e5 +9a9835e0fc9e07804927a8efdbf50f6868cfe1a4d6cb8380a4587819336d2142 +cd0eae3dfb9352080feee43d365ee214a51311c9d0bdce64e0209b3dec5600e3 +9b99ab97298fa26c2828346d3278c9fb9b3bc7d04c25f8d6c07387fd9380ee1c +dd418df86085591ab7fcbd3d6482888c30d7c1ffd7932c9b6a00495d608b8c68 +17dcff4ec0042d3c98a16a8d9447da1e9acf3feaa17508768d78be93e15ff1b2 +8c06e9c9fa71e09b07a8a26a383355e6bafa02104f04ae92ecefea44c9dc2921 +5621b5133b161686a3cb4aa157c792c3edaa16a455c3bfde43cc156294a181f0 +b5d14ad0cf7b32a8e65d19fece40047ac43e5ee07d81e1acd9b4dbe00b2cc1a8 +3a2acea2950096d9ecbaff249b34d9ecfd477dfd5ff197c696e98d73f621def7 +894c71410a48da1ea8408bff799b635eff6d82f4a6afccbac626ce16c8ed6f90 +824cdf0d696b4c1748044f1bfbdf4405fb51a62f2056bc16743499a0fe0e4a45 +71866388843f5934cde858b88cbdb58b2cc7f40bc7c7f75d03756f92771bb013 +76ad6de2806a5ab8db2cb5367a14d787760bf982efa69d2bd0d952359fa65b2a +07ee0d22fa86244862012afe7d57f017171f9be60124c783529fdc13e0e0f551 +d4b3d1b4485b3ff079b3ea8e62d08d1756e12c2a376818cc906942c3b371e218 +e30474692e7f3d3981d66e19156b90ad283ccc03736e1bb5627cd789ad0d109c +91a5b867ef10ecbff1a5c7a9aff0d1c46963079b278ea10f9d00d4482a30b45a +ded6527128f7a4b68619d1062086af7101ea09b758547e514bf1d208d481b2fa +52801aee678f6ec2f1cb8d0e5d013cff8d0e7d3c1342d206b5a7ecc06540dea6 +bc82a27bdb8825de89ed9a7bb737b8abb76126e3187ca278785c5e52c8b7d296 +a858f1f2effb85e033ec6432c8ff9eaa5e0c7e4045b5bf63db95482602cf15cc +4ce1a7f97ecfb9124ecabd8003afaf3a063065262e77ef070fa2aa7f1cffb450 +e5a96a770c925c446d846dddee2e3a6f62c085d0298e59d72e0fdde9897725e4 +1a19154d6412ceaf7901eff0f4b94bf6b968ed4c21a2283dc4571c07e91dbe6f +81d4336d6c3d6d38dff6dbad574ac3da7bcfc7c82fb97d8a190f6b83674d9b3d +1f7f51bb73f950d5a65b9cb77e7053d1d782b5ad27c293ecc1835ae6847234b2 +7995db08e5f36981876bda0e7d2c616cbbba62fc1e8d4ca621fb4dc90f3458f7 +97307ce856666e74d3f27a9d1b9f117b94e401ef21b38171ca3a506202c5144c +3197bc90908b1acc248dabbc153ab848565da84c2101666c87702718292a0823 +84e2986c9fd10d654585cf85f6703d25e7b4a88a96224dcfabdf75128cfe1740 +d1100edce271fc43807e52f8b5df21f6dfa14088074ff92432468eb93c5e734c +92256a6710a113d940ff3c279745730c8c03d82ad01e403106ba654c865d9a44 +1373a885b18a498ddc52a86cf5dcfef8b7d56dddb271de4153e67190835c085f +ade59e153b62629aeeaa8ebd46c064e36c608dbcce12c7b883ba3b1f9d059d2b +a5910dae6b0aefd57cc6a95f0226afb4418e9dd7c54afebb663bd1d54a2479ca +ea0d758be8ed47184018274c3708601d346a4d4680d87b7656b2e419ac79d098 +cdba1d31df6c295680900a902f2271d4b4a4c6a0d595b6570a5a46b42c7e1f8e +443eec9f3d53a109d31f2665f91769c69ea52adb3b7b2750e3aa9b0dfc9b0d79 +b16dd71e9e89425f81f90555b0995dc8a190ba66a7931a9d7b5b752345211bdd +9bd9666baa6958d70478dad8806703d3064da0059778c8c1caf3a366fcf5284b +4c432aa8da5958e3de24fb2447cca52cd24f007b43933d5c0e148cdaaf7e2e31 +e5d0b527849aadab3a7611db6a8c1ba1cbe2873c5e3989e666f082aa8b61e11d +4448bd773ec19326b0e606784c93917e922f32a784957526acc74dfd8d36a325 +dfb3b412334dda00efd03a4fd658a82ca9ad2eab96c3ef0dbba9888f41144cbe +45db4ff648b35d5a1a61cdcabcd3083e51c6e5eff8b06c476189099763dddaf2 +81ba306560126bb35cd3bc482c3c1d2195cddeee9984094d9387bc65b328ddef +a17a3ebe51e93446bdf551cc7377ea32b8009acfaf5ae9ca546fc7ee9b2a2117 +acb978931980f1f1baabaf00dadb58751b80720d4928807ee6a8836332aafb58 +bb3652c7633124584334933bef458ec761b60d1992de1108945966e2f2df8c44 +7b09b01c230d0d7879132268e53bd88147a4f15afa151785eb0803d59c7c8c93 +270c310cd00c1615f72c66a5a6b7c6562cc563fe87ba7e1a32c5268f4612bf48 +7b32e749d90b21e252f8409ac6c9908cba1c56acdd3916d496e1660aa40731ae +0b7c68b3aecc8bb87d5cb0e2ba083bc67a10dbaf38918cb7dc9de983dd60071d +134b63956a8eddcc0b06f1934e8225d444bcb8b4f41d89f3ea0795fcd5cd988a +212f67fa41a70830fb5b307396c9ebf546571ef1dd5e765e06dfb9737183f0be +5cdd66fd7f1b9f9e07b7e8f2ce86f10060c66f1ea5fce65cf37383d3b4d03bbc +7ec197de7517858bb4d7d00d0df036cd85fd54681b0246eb04e2e6a232bee4a5 +9703ada09f42c5d95bc2018ee747605fae37452977289e3d9863291a7b563177 +d57ac861ddaf2601c81236f93436432ed198990212ee040962224e4c4086254b +e78c87630c6934b07c3b025b22d6b75f869f9e0ca5cc3d56f96b24b641a11ab9 +362c7d1de3d78d60352cc324de9a5a183bbef008e726efc391d40cdec8c4199f +281f257408363ff575faddfd5ee90af102152d8be663490b245969410f297339 +34cf0a1a89cc245b6411389902375ec69cf75c8a4a38ce6447fdea00538841f2 +63b70187660e33772ed1e73a06d20cb07912e266b4baf54f753f868239f97b06 +923ac3d93e5f0c08175db82dca0b6873bc6ff581dbf4f21fefef78645a73b3b8 +8a384d939c9da579ad320ebb6c496ceb4022372a31eb2bca5011e6075db700d8 +abdecf0f37601ad0e838328a2831ae38b1d9046e5178a0e475ad8a46945fbe7b +74f065647e414e7fa73c4ff1e4e7635bcc0621bcf3ec5386efbf5a6a5e8c3b24 +8f578bb1da3e5ac76de40d92dabf6e0cba59cb21f5b310fbdbbc3365c1a65442 +a7e1526f2e0707d483632a2045a7e83cc7050bb0c8bfc44ed9ab9070b756eaf2 +a4b5ad061f41ff858f1f85fe058379f09e2344cb0f623b279229590c92c1e094 +9e4c9066058024f1a0140cc77e442a630245f5971851f1ba4d16508dfef4dd13 +1f1cdc3e29de07fe46b42ac9835a7f19b129bb75fbca5cc5707ea025444f13ca +2622f171c42f77b7cf46d526ce3bf4d54cf4e109c0dead12f41feaa630056e61 +bb278d85037afff0cf7d986aeed90955a817d56e22198810d0a9e1319a4c0b82 +f7e0d20eadc3ac18a6ff90cbe6c14f7a8ef4bc0f5efccdc0ba89d39d197f6e93 +668ea291e407138ad30361809bff0d9af5f04f618eb3966c8865562e6a5bc445 +a3c73d82602a70df1a34a3f4aed8defd8eeb4f5e73928139d926de1e32db3dd3 +f52361805be31ec2b681df082f66fd1c8477751308a6f1a1685a0cd161b6c62d +aec7ad803f34369e50dde9daa2bff8ced2502c83247f1e155b1b80e9c8ec1785 +f8f03bf26477cd188b65d2d7d6e0fb9f0d442c65e7ed5e39750686244ad13758 +68d4d31e115da5a7e4178ab4fe0b897824b5b4019cf9a41f9cb72f1af5cf0396 +79c8e8b942c8d5f292dee197048af5e947a754236fa55460bf2e92c15bf779d1 +bc25b2d218b34330a20ad5aedc491fea9e8f71056f3f7b95aef9e7a927d71890 +f09707950fd3194fda861a784f443f01cf3a552dae32fe7969a778cb9053afe0 +d89136b7857dac377dfbfa2512b1ec3ff2315a1b8bd8b024794d1bba939a59c3 +812315f6305bbbe6f6c77665739b68b7843d3c362187a76353dc97897b5246b0 +075230878e1022c3782f51809dcf10c2e13c8dec2be18dc3961ceb35b919e02c +a462da0035f3efb56cccd1561238250c1f4edf43c3805974fade388ec7d81e4e +843f057723aa447196702b96ba445347b726fdce78558aa3a25adefdadc3b154 +71119e243360ff207028fd9bb7d961fa07912c1b466d113a4c9b80c9e5a1104c +0e726b2b0421fc4839a7c9a2fe1fddfc78c4994f7012346bd00d99ac033529b1 +453847a0dd6ec72b12799d65247351d96bf77c7cfb2608259f9789321da1aaae +9db2d8f00d33e21a67936652bb49768e27d7056cd15c7c89bcffc1d3ede85f3b +63c65ef56ea18e072afbb7a5afd39ac40a4dd5fecb13601ccf2698d6b309d5d2 +19ccbec0ea84cb410ba85666b81c98166b0783f8cffc949777007df769f25672 +ba1a4b8e8a209627c444b0fdb4058337eca7e2420ddef1a04468c88579f69e01 +7a8ff48366e50eea85df6b983ee28c1501f1d87443e76ac979cbc76f1131735d +0ef0ea1fb6cc050932e46e2f3d552cefd45b800228a786e6cb5820fc49ad090d +39c0892e6ab30aed857e657ea2e2b3654ac04ebfa847b7199dd231f4b89eea75 +479cc1e7a2d0dabd3e60117cb35b0c92363473dafa4114cd27370b9663a89e72 +061af55c585a03f6ca03d5b591691d73eb668562e7ec69a9151bf3d926294966 +de784a63b9faa82a659e21c0c7150098094d2019a082f92e56cbb62b380eca04 +a9b3eeb85dcbbd49b6c8b7d7b88cd59cca611994fe0c8a123e66ae0bb2852055 +d8d5ad4c1ccaa027dbb4f49628dbfa0b016b46d4ce6593b6832a5d55d3af4382 +00dfbcf19cd3b033fcdef9591e00e61610abd90748a4c3c8ca473fd9f3935b4b +9d24d070f1e87e73fbc33afbbc5ad508acacf9d98ce5591074d0eb40b49b679a +ab103da9cb65cf3ff588d9deac24eb45d84be8b05e5c5cc4e1cfb2910b85a92a +1da713ade56f12c01acc4071ba3949b600596150a99927d630841deb69810b74 +383dd90389b48d1bcf2510db125d1a1d4d37a858d633a1be76f3f84b5bedf9e8 +455a3b668674d8c9fd4352ae969b663e3fb398780f5bee2b54312058c52bc869 +d20fdbbf690ff05a9c2fef91a0a183b972376d06d290e0edbc1bf45f5ff8c04c +386e3612048568f62480d87927f99e972c507df8702623aee6213dfe00c1daf0 +2fefcd63219b64d9354386a6ab468e1da529a9eba46208c142a3e02de496e0b1 +b5accce8664d7859f74cd98f95a4bd5704bfd3da21e3668c3f587bab722825fd +93f7e9dd5ec2a58945904ab111d0d80f6e69b42296053dd38d7a15eba79450bc +15bff1768e042b797c899494c37186406e48d809ae53e38c1a2e2d55973f3954 +44c2528d667dbdaedd604317f629f96d423cae40a33c9c75ee2d68dcca26f79b +91570ce1405df1a583cc423d2a6c70aee3d42295cdf643e95c010d8f69d86072 +280849683ade58f63579381e5ec38d5cd8643b200bbf612b7ac883976d4ed86a +24ab5c1115631fd628ff42965f275ff48d49bcc55c0642aee2d0d9b56edc74ca +e8cfa389b0a59ca3725cd42c5b4f963d9fbd2c78a3b95a7a8eae030139051e2a +68f30276b40dd7690e780f6c2dd03f5f65f69085db339633bdc94911a13dc9fb +310168e850d45eb9e36cdeaae5f2d9442cb98846c8d5637c15c8315160a178a6 +952c3e5ce2f4175776dd54d21ca496f8aeaa18375c0d0c334ef0606824a8e700 +0736b6a558813221a604d29f93db258cc755cff412bf3454a550f6e7ea218b84 +42568f9315f49772534dcd6f624c238dba993c753e74e3e7fb6925c4a4123984 +1db4b8e821b457d5403ffcf9d474221da15d0d79129df9adb3d23ffe63b08dda +e98d55fa65ecc3f53b103ded28cd33224a4892295965b140733bad8522b17b01 +8767560f320bdc47c2936f44cf0feeaec0836f8a6057feededbd0f828c1a3df6 +7259f018f2dd40249fb02c1a03017f50193bad9ef2fd4d53df9242735aefe291 +35c6a1a1323984be8bad2f38ad18e2660a243abca4bbe90c897fa16cb3a1b3fe +0da351c8aaa5bba568515cac6833b46534c975942a5bca3ca5d9894fee478b88 +20ec6411f1d5ceb845cc48da1a403a09b2024b52f0ca33f102aa36be09cfc5c3 +d322ab066ee489a7b3b59d6a486617707dc6014b56ea894a8a62666688e09c45 +92ae413eaba47a104d8087cb7b5d6e5e9396b64319ea478e629af9844d730765 +cb7b98f21120f031743907203c68598e28ac2de3b772ab1332d390efb9aaad05 +aff3563f7d7ec355e9bf311961470e30bfb03e28bbe8161326beb0d6a4e1ae01 +cc266410692cb2872f13984a8f1bfe63f096f0c7978479739a30c1f3eaf0a679 +7105a720b34070c6372277958505e0645fbcae06f3534bfa3614d4c022f1bd77 +0d7835522c0cf20355b096925b8feb2797b7808d4f6a8d42eb3ab118b6588ab0 +98a55776e2d9a056632b7ce54d23bec7248f9259ed6b1422da3dd7a4a2667d40 +b4c0a7e54bf2677157439fbaf5221c59a44f1d900fa82cc00759b668b51346f2 +bbae5ec491790ef33daf26321871e293ea22f51d227b9086a2ffac8dac08ddc7 +25f5696ec714acb913d6437055cc65d0fb632b2a5b71a832a93206371e3f0088 +1b530cd10b1efad826092576f3d4a606ad400a08c070edbf0eaea1ab852d36e8 +03cc5bb1815b6752cbe8b13ad19da128444c76a764db38a84930b4696a5fb1fd +d553a29c9f6dca80721a0dcfee5720a598c8538e868f8c81eb1a6b290ad7574f +4504b7d26317a90f1ff45e63fbccd1ec3d1094e22df2127fa6280f60ebe02574 +dcd405126b56fc142d7adef61805f8dec69fe88baab4813840691a2fccc3585b +173bf84b6db0521ef8b55aff7f65bd729bc9c8a93e1b18179dc51b6846ac235c +87b9295f590a9572b088b71b5e2f6f4664fcbe11c8d3c65f6b3a0d16e7152315 +234bc92f164bfcefb21284b05022e930fd388b47773b7be9f03c52fe9e1b68ec +474fd905b88ee1809f55f5bf9f08bc78f27fbe0d8644bd2363ce9e0681147dc8 +93d29a20f56447fd2c8ad01ca4723f518bc99fff3f39a0fcd6334822f662851b +57a8eac4bb5b0886c9a0c4f3227ef93f4cbc15b55f56575e4c6bb378108076d9 +b590a112d26d250e3a91a1fa63f96034c9853eacd596aabce21eb30a08013848 +ee2cbbc62a6b89c012d41f4aab2f3489b39b2f970a2ffe4120bdaeafa77f2cc5 +98e3d1f24519e1308ce507110b6383e3721000304171fab59f1e61ebae338ed8 +8bdce5facf6b5d63ada6dc978919561b69d0ecce2dc479545b1a35f556c3193d +3b55716cc88e9ce02dd89a8e696de8408c524bee7b914a64bca6d19196766f8b +3b990ab09e31ce5b627b0f591e34fb09f889e51c3b7933fec688a97ce792c794 +40e1a708fcb7baf4a46f3d1878f2ce160a9d3586e49ddef6ca29d5b6350cb048 +b06a2115711c544d0342c0b940d348364cb32901f0147655c361db58e7a94e8e +d042837d4687b8cc441d6b324127d839d511492cbb5fdd8ce3872b24eae2e601 +808bf985d518193bb77feabbab710e8d577f288878ba707fe7697a8a9b67a94f +b608695755fbc41294a9b1a80fe5d71f25d64ca684ce6f66d0d1a6d8d9850bf8 +8b84ea5abadb0047f8c6d7dad44f9f35a3b3244d12b65d759b2f3b9866b045e9 +523060f532ba50dc90ebd27a94f7ed7eb7e0512903ff117c70d4978c4c21c1d1 +12309cc23345b196e81533606384fa3652330c71e24b3754bd5250716c1512be +2d575f60073d1bea93545e676a800be629738f038125d45c9e7b9a3e86754354 +1a305cff644fc6b0b84f18efccf4cd978b1b69d9fc0d4a8b627134e9c000f0d6 +3678f30463d5f45967095ced767d3bd8c911e067f711118af760e348c0aedeaf +e24a7bcd158636cd90679b5fe72146db72983cc1ae28b4c8186209a1ff466617 +c116d2248dfb8b34a8199bece0f95fb8ab31d449ec7446442c500809e234a8b5 +9ca1c8c5e180e6779d15cade876f6b2b448ad8fbfe5617168ce601d4fe37cb6f +3af81d13a5356d256d675856b585209553993be5358f58d95dd530601b1fb7e5 +adeb547b1263dab3e3631d689f3e43f0688ec7e388752f31d62accbb21fb44f6 +199b07ae9c7f4f0ad7eedf344c821527201720b16a7d1b334745e7d24c42592b +aafda998eecf8e0b3dc728de54662bd0c41c101c3a931142251d2d9a46217f32 +39cc92211f42112f47e33830e6f3bbda8e7e2c4ed0ca725d9584652ca2bef813 +159234afc05e6e4a1ece3aff7df73415a418b9e9c6bf1d4481da21ac0c505929 +9088becbca5a6df329296a5427cca2e8678bc9b21893f8435ec5c4a29a31de8a +a5dcf19ec851374d4e109d17214211adeaf89c5734660cc74300e204b566a1da +bb4a9a96bb8b140f672704f75e6f2072e7b5fed6dfbfde3767d944d02bdcdabb +9990c8a8b679e92883677cfcfdacce6bea37f7f39640c7f11ff65b2d278ea4fa +8907cb4edbd7bccc23d5217bc702f284ceb13be150208de1269ea7fbf1bb38f0 +13a8ddaa6a4f93c6f64913efe8a0d102ab20198049a4554831e8339d250ea99c +a224371170c46a2d9dbf373ae343b3d5272ae496810b634194b98efbdcccd8ad +9e61afdd1e3a462f3cf303a13b58abfeeaa5225314a9ea26357f37fffae1ee2a +0f97795341520ecd9aa1bab6588bde38ce68c7c4e47bde61af0986ad964d8d16 +28bb9545a2cefc86e84b2bc420fd8605f3fae9a44bb5cc055dafc0b4406d7ac6 +557c66a3b10406fb3f4df1e72d5090d5e8a871e91138dc972f7c2a0a280152aa +9635c21c71e1d5f5b9ecc5501243fb61e7cfc17a73e0ac2e13b5a5aa5f6cfe60 +7286e2827a700d37912fbf7f339ebffde0820fea0e540b467cf54f16add1fb46 +65a1a904de68047a154b6381e1fd07bc5f884e41a801622be706a4c9565e9a2d +83c7c0c0a302525dbd165338ce97e31bed50d73f79ef6e42f3f035782cdb6f7d +0e7bc5ac554aeeba11a747a0433ad45cb52a82bd9f2c7406b50f79d48363d8df +345fe355ae58af1bbc8f1c332ba9c372465f9af2b732551c151bf76079dd13c3 +cfb962e860bef33ba2673a089eccb7a7178f2b08a205eb31c35e860a0181367f +5bd608d4ea1242b82b4e45cef63d8f70061af0f399738324128581af6b38af87 +71835dfa29a80a61941179a2dfb96600b378935d711569262d08ef933ddd9acd +236b01b2fd7bd38d5e1fdd7e4b1ca45fa94d318a13d7ed189f5de08d6026cbd3 +e0ab82688ee707a03dfad3526390aaf7dd66c390fab96fe6b3f7f9595b742428 +66a64d83920b1941ec11f0d7d19fa595fe363bafe0be47152983ac835f7ecebe +528b45b1d624f2bfd8b0c3be54f310d8ca3b6eed2eec17bd31741d4a024ac0ee +4c8bbdf10ac01a2b7d4dd83f075482fed3fb0102281679214695cc43c5c11e42 +625fe5a51277a96913b0444e34a51d0cd5e03ccab2484d85a37bd735f8996ba8 +984465c6765ba79a87990e4d226f380ac5ebe11ba03e181eee53ca6db46f0fcd +7a45de2e5349c5dc99967d7be753591c8f4ff7822d13a6958e1b0db123f10f57 +2dec1940ca4a811ade6bf621813d54743f123bd9af2d8c87df4a473a3093ce5b +f4d2237e5eb708039675abe4c9ebd8cd6f7f1325819de294e134f5a97afe0cea +ebb99a5e30a12302653e74332a2b7cd5276f1d7f256b6ee307554e21a6b8d16e +d01d716af067fceba9d9156add58395b011b5f333278218ce85bb2dc53bc568d +c7a49445990bce39b3e201cffd39fc1b10b9c25024419631182b54e71ed4922c +5cd893a042c7dbdfdca58717ed4051532ecd784852ff7b1ea06af4594d0505c6 +db59fe7c889f10fcc5d87c777d3b6dda8393de00008afb6ecfba2383b6f41858 +70358da92fae2de84cb295a123a0d40958c005149dd1ac79a10bc7dbcca532c1 +dbe048ac585bdd49f0dd416eb9164b595f7204c144eb962a213ebc964b266ff7 +596700a31c2c19d0fe4bde8f6ce6ae81eaed3b015e8cc31329d49b77fff1b7ea +b8bf7a65a662d9abf6f276d8a6176e2ca591e37444a3494a95a3f2c52bb9c49b +4096bdaf3f6f3540aee591f77927bb510107ece99d0861235e5752a033387caa +8c44722f54acf397435459ae43238d8f96b678a97633903eb845f532ab55e6df +e3c84ed9a82c70f04a50412edf9db2688ad9274b5514ecd477bb25cf501914a6 +1490977376eea3c60e3a7a6dbeebe71c66a7c16c43f6844b4d57cbf06dc06054 +86b5f91d3750e65a4a676bea47df2a2b24ce23ef121286077df3dd02eb85bb88 +4dc18db8e7ab7cd9707b927277028955dac2917c01b7cc4d9b4b21a47a71f8ae +d29c888f5b654b5fb5614b4e9a6901dcd3072662910e8dd0235a46927249e020 +be101d4b32a4a03deff64007402b7b05b175d8ff952e0edab720676b805cd685 +a496e8e0c7f4e9145856e1200c9769afd331a976dc7c755a1178d4d2d8cf41ef +a8183e36603b484ba1e45adf1f993f21c6078bd1c7b5c6b2aafd1fc70f23de90 +f953e1496cb00621e9c70195748fc4b24a9d6a245566f6ccf760a37f2f279d1e +de472e8bff29fe585829eba1d05ee4ddef36e23b1839163b2599f3d91df6b1d5 +039d126149d80f0d6ae3767dbd584269b8c0830faee57196e17c32c2eaf9fac8 +bf15ee3d2d554fa8df7b1f38ae053fc8db12b5eee80c69884c1d44fe345cec39 +e5e046783fad2687fd52b27e7752e278cf3e31bcf8d947090ac87278ab873349 +20c3e4c8c6c8e456019314cd823083c008e9c66537df20b417f80180e25c9bfc +612f0ef0626ec32a226885ea9560c1266485215f0bdcccb54b2dc55a1507c6a3 +0bb8826854d45498399fd6497871cd22e3ac55bf1560697ef55be3ad5c95342f +d5ead251288c04ab70d94edff3bea320b55231e59bb1447671158b444d040f80 +76768fba49ed0b2f2fbc3aee03620e62c5a5f1004346ec9b1f5e0c2eff51d268 +439a9e7f2d76b346415eb7faf8efb9d2d9e0e425dfc54a4f73544de2a3157462 +a7598cb4115740a3af78a7d5d52cfd51e3318b3508893e2a07d05ae4c8c8ef4d +bc43d1325ddfd016e057f34f18e784485a3ca67507b4353e2300813b178aea50 +d75b882f2ed763417fa8a8fc97ac0c6281ec77678215d550b59b222251214165 +36005d0d058813cc552a969471988ebfb40b3c47e5f55534d66b884d4af4b1f7 +060b7f3d169e2bfab870caeb44f58f045390c83a615e2737531d0752a0fed4cf +f59415cd372cce533d86b1bf06e14d7ad147cd9b02a4c69728d3ca43865dd38b +929fcf61d6b91fbab73a176583adfca910373e530d20195d0e394bc9ecafdfb6 +dcd8e8eb97aeb9889d4a2cabafae4bd739146474c4f38fe190764a4c6d0eea4f +49e353300639e9a49396ecb61647e0061495c641eafaf65d5edf9c8f0eeb1e36 +7ac783cb2918caeb00eb795d973a6908566e390995622620f6f8584485eb73d5 +197443520d9172a8a538f7c026cabee9e4ea65a2867a55cbae8f6d2ba9564b21 +f8b354e94828fc0df48f3e611e501a9ce0b74bc439bf4fe31ba8c03548b09395 +3157f1a7eb4361562802ae2c5e9e099b8159668e48e8df22f3b7040e99b81c22 +47da77dd35d7d63477af91c339bc5ac25a6fe6787b8b24f8aa76a7b3b74aa053 +de316cd55e2c240e1dbde31d0bfbd762a6649082e228e30a0cb4a628e1658445 +09d3ae2f59af0b25c83eabba660d74a1576fc11a6748615aeb479490c00fc7ce +18d6ccd9e59e162955f771608eadc2a4814eec73cab921facd989852f6c44c4f +399b3619426bf626c02a948a2354d8cca259e42b2bb85ce197931a49ea7b63bd +ac6d4eb9e3287fd545c888765ea00ddc4fb4597451e82380241de7b4a6624247 +156e449d686b1bb04967660199d2e7e54f65f5e0cbf94a3ed91d22c0645a253a +e43c736ec5f98278e05312af9e97a62c86e1e255f35d908018a37f7f784b169c +047be1fe30d211ba5d0cab9c19bf29431b1c6267bebae5d14d420f76f7937bad +7350c133cf9ec00cb7ddd10c0c2730ffd90a5bd044188506fa0df39d6ad06c17 +5c85660b340a542396dac82df1401c95ec08228ac9a0380652399c78d74b7bc4 +725b52e0f04085811dcf56e03888709cffcbc21129ca9f1ca7dcf0051025ddb8 +5ffb1ef93a24e97fa8c5ac03d2d47f404a655a2405bd78aaebe1bee2aa1869cc +c6b0e48c790acdfd1d68761bced9decb503e842c4d9150c8f900a1a259b2c2dd +a3671dc1a8707ef6fd69d84322897ddcfab4cb770ef13c64d5a9b24c25152b90 +0f0b944f3b5df66ec7066f514019dda0b69c51683b2f20fb9b8882e17f8dadda +7282515b6d84695e86785fa20e5c2fd459556bb0ce63c28bdc82242a5840fd4d +580eae421537e18b2e97213eae175ead7f59315f228dabf9447be11f8b01835d +ed220cc29c9f0ea2f5dbd2880141a7b2e826bbe30b40c35e0e5e48b668425517 +4518df096880f201325885b9a3d912033392b69c0f89fff29074aa62c864fe04 +a82f81ba761d0334916e46b43bb4d9c4520471f4a6ab05c275a6f4bd7ce7f3c0 +df3b8f96b0326a48897f8523f441cb8a8aa00c5e098ca742c7b3e43a94464789 +cebbeaed3a0cc3322083ada9cd2eb3577c52cf85a1a401d77aef8483e69ee912 +8f2df5b066d540d048d1afdb7d10143679e11d2fe03fc9e50b92565dc44986e9 +dd9ffb1b019fa321dfb864a93d738be490427f67c114253b351ae0e137400d30 +2fb78645f733514b43b813bedfde356ee16c22fb4438329e26db9cd92d5495a9 +7e47aa565eac652802e77f00b32ee2d0488c0cd36f7bb5b0d9ff428bd08aaab5 +2e3bd8eec527956ed34c12ad4d5df0e0ec3c35c0e6691a57f9faa1fb64befe19 +e422e024e4136635aab8f978d53085144a67a898220722811f99c86c2da86aab +bb12ea553e60e3f425f4e3ab52442e17df2010b70861d633cda4a77774a509b7 +6d73dcc2133f85978f34c70028b1e89febc709276afd5560e83b271a2a9ddf6f +5ceebf36e6f5f08df035e4e9632806ce12090fa0ae3dcea865b9973c14144ccf +d559d280830192a91f4e9415eb1df0201888766102a2a83554e0920524788ca1 +e3b0e108d65ad961790b0aa12cad278ed094810b02b3a28dba553323caed683a +41b24547fa21a28dab11c7b3d0627ba6287617a8f4d9569108b9f89e09fbac34 +a2e49889b46fdcdf84c46436b782e360d17c1b079be3adcef463d40ee0f06057 +ef186014a694a1755c2f1175d650ccf8d75a655dc2e4c5d2c5cfc9a98693a74a +aafac38f341605424ed32e8b8976db33e354dd3abeab9a21d71ec257bf6b3801 +bce30d439269973d8728496bdcb3b68999cb3a29ed8376a4ef4d692d59124eeb +d67f4502d007e5b453ac0d4669d9992012d29fdef5e4e0043081bde76939a5ed +1e9b8379cdc78577a19422913eb24d9755cc1d86a3857e6fa0f52ce75a56316e +c2f8b011fbb839b6b44fbd69e77a8de6a79a413cc2e4b1f427d6a985ad62ca1c +678d0a40215599ae373556343d21fe7e21afe49af153ada42f65feadfd0f39ce +14139d77c54a535582b5da039b7777ad28d019ce6d8ea85965e81e1d292a367e +8a933ad33807576c3118c1dc90c743d252dec549e618506334ba3d70d1967340 +d9155170df7dc3eb64bd958ff9369f8925ea18be77b94924606e7a6c7061d238 +87536e115866827b115a002acbb02a6e5745615ba2d640891f8dd0d8c7d7fd4b +2914a0405fe517521706fd2d50b59e96c861ce4df647ac09d24139fb7e1e0413 +72fcbac6ba2400681a600077dad8f5ab5dda1a7c46698f0cc76d1c62181786f2 +bbf7f54f99ca023eb9e0b9e086c39f93462fdfbea3be21f0a39f9afcbf9da0ee +6ef6b63e24edaac87cbb342399bed1bc7af44e3e69df1ebadead2b39fe2eaa24 +f45ba64e437424b49e1842cc3e6c8b874e4ee93db2a9e6bdc17d61855f379b66 +cb5e388e098548af4bb63e63f88102a48b536f5b54f50596ce8f8e3c3ac64db0 +427998468427865b14f681a663bca2cb404289acff75ab49a64c8c88c161210a +e4883f881866bf25cadf3981b3555188a90b1d805a935ee5b12497a6d9a57cb6 +97241e338b1f52245dfd2edb4d3cd7f45b5b80b3802cef62f552045567b79bb2 +aa08c3085cbd359f62c44019098f7091029d43c4bebaa4de1ca04a227222665e +2a88167d4e5fabb41139324d692be63f16801706ec81f5e3f257f9810117b616 +c580ff8467b65996e5d23239370d693d084176e39c9eaf2f30c3ade807102e75 +cd761d4729d7ddff621873af14930f9f7932c65eceabf1c7655a7f9f57551e55 +6340d067e085540085e3d3c4c1fcb0ad509f1267067e18a9b222e95bf141031b +187a4ffa92e5632a090cbe073b8e016258a2b97e5b3f6d8c089f28179823f1cc +b4ff275b7ea43d67f3e9d00e8752d90717c446b6953a9112c6b110005389e115 +90bfcad30c13188deb34e5e86fd4f9f47099747e0212e4af8aeca4ea740207d2 +9b695424fd6a6b6f71a954b8ae518f0f3d2175fec11400d3d61fbb6da913383b +97e7b53443287d2ffcebbfa0ccaf4a67b3f94178c4219caec57446eb76177d63 +6bfaca6633684d8744b18388e71c1c4563a01a45eeadfa3e7dcdda899a4c7814 +617bc316630e2e6134918cef3d791ab152517d855801093b8482033dbc749281 +a02de2e50dfada4e41775d844043de68d1b51a1db6c6425bf9fc815c770324ca +cb3f8803f4c8173dc5347aa7916176f1381b67246535103656892861d9a7cfc9 +a3bc4fb8fee86e37d7f06e660033e800ade8e5313f7a239f2313a1d940281a40 +4477d14206a20bd817c60f34d34b5ebb84ea4e15f509e373a952654018da9974 +194835517580db9e5bd2ba1a69618bf6786e59fffa8e0a2c6d7a8f68b0f5c358 +e902d5f5f9bb0d10a4ba8ff632c079acc5c7253a5ba7a3ab54e8031570fd2228 +0350dc90c603a6a28b1d9e388ab0d1660cfbbdfbf7f95e79f63355511afb2bb8 +8774efdbdb3a3a9691b210f0b14f0446497ed04d88c1c465b203b43bfa5cea7f +1f5d1f3c11c98f7db216bb722d40f8624e7df9c5fb3195886bee47babb8af0f9 +06558686124d99d038b131101df7239d9fcc320133c0b9d03454ebe5139b996c +1fa115e9cd12ec4d40e8d4cfa13c5ee616579cb08189ada152347d1750e65f88 +f4572c2606d59aabb25eeff5d33f0a7552edb118f8d70e333464ebbd2d25d142 +b8a1028744fd4e7849ad07863c4a92031023f084af32b426b330cda0a5db303d +350e1f1088247db1d4418e5881bc28af2f9247af217ef097593615be2801f00c +8c43e47d5d3237c861352b833fbb23615efd50da5b441c0e515e8923df0adf78 +f887cee7fd68074bf9bc6b3a05a4bd0e35a93b0540ef3655badfe800fce2a357 +4de7234af4234044ea009e397c7845b6d724eeccc02fe00bedfe8c13a244879e +5842e4b2215b00114409006b104c80c5e8c919d3c166d9a87a40522898348c62 +3e117a5c36e7d124b49b7a090401749f15866cb4f895584d210b74a17a14fd33 +d481c7190634f79caa4accf2b9a08165a28cf24f50afcfb6aed489af136c9e30 +0167a678ac6ba0dc7cee670e24bcd2bb67d1623c20254bbf70ecd99628e62140 +421ebd5111d64accfbb68d7edb422b98b984a3699d73c063e0970676b05547c7 +9176c82003c65daf926bbaa4a2f57ac03e5fde407d9b187b337cf275e37b09bc +0076b61112bfdce256a9a02bdf8a797bf65a2b4b33199b94f12a03a6c04d0b27 +ea54690a88acfbb9c8949d8324fecf03578c795c328766a15f0f6db20fd16179 +ea8cce693e3a34de7adee2f83905aeed734ae171a5ad9453e803474e72f97b96 +91edc802b5779853d916d04ff70d8854febedc4a40cc41831cb3c3a87b456cf7 +8984dbf9dd762681d728d51367f23a78b99158ed60ab16f3ecad7d71f1e43d6b +74012cb768201bb5c6e01f63cdf08c0abe76446e9d0a1822a72012a324da335c +2bae984212355479f4975d378b5457d9f7dcbf968b0701579cbf2f3ad4c1eff1 +9ba81b1f3960e33c1aa47041afca571bf5d1537b4813bb27301151e2d24f2327 +d38dbf8b98d323d15ff0541b58fb2de9fdec268f346585db3cf1dfde8578623d +6e064a9d3602e361075215af9e578ba7dd7feded74310594afa2bda4e96fde60 +68a821680fd06ae678b2fd0f771a71e0838389cdf884e8a902c558749e3a1c10 +17dd7c392c60b95901cf96fc58c69ab76b1b56cac576273beaf264486568d275 +bff6e15d9aeff4ad15a0811642773b375641e7b448f9c3df7f3b8147f1def664 +4c8dff01c4c646077d5841e3ca41ed43f3f553cbb470c70652532e689b737f88 +dd20bd25b26fab5f6df26d97d20195389db4d28e3984241d0c0712f34f4dafe8 +381bdb3a351fe2a40a8c702e55eaeb302b2468a103f933937dda6ec8d28f6ae3 +37fd88fe150ee7a849bb7dc26932c4fae64f8389f130ebecb079bb51ccf35132 +7b2ae34408321c96309247fdae90a5606ba18257757ab625d3b963cd49bc1569 +ff479c7cf46e3f78a94d87be60561206e49b4f488ff73813b5b27f031e0005e6 +016330b88695a1092c404c5dc99c696980c7cfa379b196fd5368342821cae11d +6ffa9607891a0c765c7c1d0ad88abf0d18c288dab2e1067104c9a41a0ff86c1a +ed17d378799ada3757c032476ed066af2a5dfc30796840418bafb7d02647e498 +b294f6bec1c33e4aa57066119db69afd2d54f8ea7f3aa125539b0134026d02b7 +e9fa9b3266645182297377f61196fb7e11e37dd69231507c79e0065473577460 +35e3cc330f6d6b63497ecf68f9053375d9dadf52dd81c412b7827297c48d7d85 +71b5226102cd6b3dbc2b04cee6c082f3358d0f8bb60ba9af72ea277abade552e +61d04cd53ff0071395935fa0b333a4a60578caa7442dced7780b3c7b5b667850 +5e4dff9e10041208a28223c20ed0486a5b8ba0ed877257ba40201bb92f44826d +166e7ae4da50c67bac45ab3ab50e1478a230dc9b26db5129b5a6126ea1d580f9 +4764da979229892ed1f2020a408c49a07d5b29437f21ba7565a901b3f281a1c9 +df32cca562d627c13f9ac06f415a314129c1d3083eb37191e44a56b9b618e3ef +fe4cd98ef7c0796e7ca6dc8271cc280f9349de366301650d3dc3379b7aecc05e +a7d0e5cbe0b4fdf19269d47d8a4c321f8623013414b9bdbeaa811af66686b285 +8192d5b656f8baded3b49d49afd8cc64e3fd0a38d58b04b1ca270e56e4b114e0 +e51cae45de5cce05faee4d0eaf3dcac47c964b85acad8849635c39de416a1a4b +5e013f4436f455bb17e812b5efdc82a3e4bb4a002d8fd44bb2f302124e7d7942 +eaad86de02cb2a953413c975f16a47dde600e1e225bcc48e6a9d8772d53de296 +fd9f4fb0fc98d89aa7e4d20da7ef85b6f923478052473f00ad57a646def2e1f6 +7d00c001efba0a5e60ee8bf845cdf840b9758e7bf16d2b8fc9a621ee882a8c2d +be51e025c994bc6b351b783e0cdb4045a5ae95710b779b912387e2e9c5eba3d0 +c87a9abf08914f0a5cd969dfb5aa00e38bd8b56eef0f97b04970dab8563cf360 +7a84d5061cb8db8196641e1e3c9ab23729ab282fbd7dfe31b81c3375c628d7aa +1d35bc270f33fa0c7aa2642b9c4a1bc8870c984a16751f539aea4a39a722077a +35e2b0aea4402fffdf438923acf0be7868f749dc3a98ba3e18331a7f63dcb8a7 +8e490f3bf1b33d16eefbd3346caa2c54ec1ee5c3225add1866b3a82af6aa9c92 +a172ac605725ddf66787eed498b8d57febd40a33ccc0c1d1bbb921730e163f40 +5f675c0c0cd571da71c220101a6ae858e2be1f97fa200d8c2bcee93453c3a1c2 +643655243d106d3260628c605a2efde4eebdda23d33874209cba019ad0999c2b +dddfef930c4757a22e3d4faa57960559de64d211ee465f442e21ce500c1b9cf3 +5aef2261abb287c86048868c45b806a78b72f1ec91187941c6e16b817afc785d +26228dea24f7b7a27bab3aaa3ef35a5392201f48554eeff5674e5f29db604d6f +2b5710b4ea2696a307334947f491fef8b746433b499465a28b1d529cd47dce67 +6389584170f66421293374b32d05da44d06e4048034efa895e1c840515e6e5c0 +45fbd5a6ab2b3a681ff7dbc4f7065e2b44bbe0f3bad1e0a747972a42c87b164e +9189ffd080646bbd9b3f3e01cbdb38f1a4e938b550b8be25283aa4cd704e40f5 +f5ef15f697ef752d3a8f721baa5b2b3ef18fd83e28c5bfb52dc91cf192156483 +adf65f925553e17ba9e2761afa2fcedacaefd8bfdc5971f6e2a20f10776af163 +378f8db936657b88c8ddd23983078590db4b6fc79eeadcdf01ecdf99b8ee622b +5c24025830365bda7dd1b649f0c59003934bd6015243bcbc5c0f95ff1b5f504f +a7aed86eb0940c73fa7ff01e31247c12e7da8a62253aef53d1278f066ea73292 +3754eeb8718d15f33ad7a0d35f90ad320653cc1eb29449b4aeaba74358992e47 +50a0eed920cd1977882d4ec05d4e40ee8b55888a5d9f9524bd4fb893b4181674 +f316a76b0715cba5e07ff2e0ecfcb59938b5297ebf923f9c9f5055b2473b510a +199cf6f73106d8ef16b088caeac60d91a15b457fe776f97d6f0b9566d4832e4c +e6d0daa20cba6642a73aafeac523c5e502fb210541e131ad6c1a404b797e3efc +ef9f18379da0e81b7c27b815f6dc3b090620edd62c84f2b324fec49357e6bfc7 +2282a645666e4232e6be523fa4d63e2d8ebd267cf16c04d164b10a97caffeb54 +056cfd380dcd1a12215856eb7ea54c64dd911156ffde982099c49af8b6c36cfc +ab722d24f27e5bd09d0b037edada055af93543248a686e82aee3751831e54302 +f1c4556dbabadf8994189fed2b5b153914298318ac0ff6b272591fa1c8878572 +42d145348ff3d277dd56f732c312dc708c0d204ad60dbebd82a0fd7bbe86df65 +9fb98f1845d76c409f39e671abc48de0a2d2ca059d7c926b3fca716455cc773b +b83f32c339edd0a3645e0076af7d03883f3ac156bfccfaf76679f20a5c21db26 +a157ddff3c59adb591da2fb1dfcaf553bdce3abfd88649d6414fcb1c5c2a6888 +e1745050b6c78428416ac18ebfda0af5233c07ad695c27183bccf8971bd76756 +2ca8fe9534e1f29d8cc6555ffc5dd686f3f57f6320190cdd63cf4b7d987bcc76 +8eb48b1aaa52dff631d9bf089aa24ae02a8e7d48f0b47b1ace29759e8dcdbe81 +025403557727bfd764f186b379d38716e3d2bdf0f52f086239a7093b3e6a4b34 +ce7851fc829ff96212ad6a9eb973c5a4fe652089e07c1daa40ab4fd26e6bbd2b +348b58324707f9eaf74596c61e8ca075248016627496a6de11054989ae54c079 +206f1a927651d90b14c424bb54a967e175680ca6f8e9f5d0794de0b6f91f6661 +8fe8269af0cc3cd8d45a8c770281327fded5b90de36b28c055054fdb2eed8611 +5f0cb1870d8628d695464c87f24c20a8410baf2f8dcc1268fafb92e79cc8f30c +6aeff9bee54d0ae678cdc271206f7e6457b410466ffcdf571331201e899b81d9 +17c109e68fd3dbef200cfe1e787b0ec962b6f9e6eed9ad2394f3e0fb1035b674 +4bb9df2a4d61cf9068c10c4944702213fbeda5b0e7a672825a42e0758f2b504b +d78dda8a0941f49092658f642f04bcf3e531742263e12c258546e4d5420cfb4c +826fca1e44af582a8f10709b903d5b3ce46a223ca68978d15d9cf8aae30b1209 +ed3b8c241b5a4b1e963aa2dbc42cf0cda773ed9d96af24b2dc88802a7b904d88 +ef63329d40a9ebc171d49b3458702ee1ddbb34b150bf0772900b07098d353183 +608d92c1959406accd5b8254bc3ea55fb74af830d37e26476988e532659daa38 +c1d7a65c22c4d74c516d35991f5dd0ed0cb4d23d9cea021e333920d97730e560 +bd7efecdf04aea4cc8c3a4ac788d13893bb2c73fa64b666560c662412d01d3ae +0509170f96c3e7a1c93b02764356d914af501e3418237dc8c237dc565eb9457b +19465b4938d5718acf5ef5a74b55061bab121ee1686dc5f2d84501e6825235e4 +2574f305c85fc4b2c58a67f80fe5408732520389fc4b4a694bfe7da1287641f0 +01680296dfc7f1d1eff315acb05adb28de9009a009a67bd98c358b85c7c2b96d +3ceb9f20b033f6d97fb73a8b86fa7a18434bf8a040c2e3e330c17f511713e5cb +fff4d7913636deaadf8ac5deb28e670447ec3b498699864cd84560b777a63cca +4e238440fa1bb5978845796c71d7ebaf164f96585e257d35e314612370f0c487 +f67fc3dce6f7253275f7cf8bbdb5b9e0b94f9f3c59668ab0ad0fad9de47d136a +3b363ae55e2652f82169ab386f6e0172af0dd12b99f6962169f4f0dadce32f30 +6cafc08c463c47cd758776d086e56b538853250e4bcf992429f6144befea8af2 +a991dff07e721a36ab4a6a2c09cbf616402ca96c95e8d1e6c4848cf6cf830daf +5f169fe87da7de845943de65a23224d596034b392b95388eaac6ad248b83f734 +ad437eae63e3588f48f0b419b88e6042bfdccf4ed25740677b2821715afd01ef +c01f40ef84854ef0a9c339c7da46428f8842360835e31b7a92e8d4239592e4ea +7bb41703086e2208b7872f05fae03967010f7bec7324acb4b2f9f920ffdef143 +d5b1952dd7354ea06bf3e2db8a593c3438143782f72ab1c37a64eb45c0321857 +d896c04474d07c85890e8de649ec353a43312338618ddd8a228e1e9d90076fb1 +ba3c7590c8ecef5691a80011fac019a880b00683b4022cfa0a096bc04c8f7100 +6b9e3500abdfbc2f7085ccc2c7b8c777ddc70977674e49d3b38eb0d6e3ad54e9 +84596416531b9f324562b04c695f37a54a3855cdb85bb296a7cc66cc50a54ac0 +689bed40b1d9d88729de6278fb2075df65238bd7a198982b21cfacb7446168bb +59f1f4a70fe8aa2149b074c92bdcde81285bc3158d874ed841be42d1c818c3fb +bcd66ea036ae2b680b24fa221c8e59d66311fdc1f6092f396270278c52e903c2 +d1b6f0f0b9045a30afcbdc5606d8ee0d1cdb04a0db18f9c39c4861443a0e7f65 +14107e250bf5cc38664363d2214a4f62ae75c59e538e6faa66313a5927d0ef7e +552ee465dac3242b178fb3d59bc6031b0c425933ad92b94e2fec552db5b317a5 +a2101ba4cdf7b7cc3fc7b8f0368397b452ea2ac2150282b97c870ae9dac46611 +963457dbec10e52c63fdfeb47b539d6eaa1b195a326690799fc855edd9f4d4c9 +50ee6040339e1773eb70943565be5133dd0305d8b2545d174467db71c69b7751 +a258811c82da4e12b634ef8bd212907cb8390ecd9e72b2b3c04caf41afed83e1 +1a6b7b4c7948be019f7dfe1f22d6651e5bd442dd1fed5b576672908e3bd2dff0 +23931f0b2f2035803a975d0a07dc11ae27e1aea7fe02d1827406c845586f7b71 +0ffe0dff1b5f1426fafaec5372a9d5411fb7fdd5503044357f97ac683c83cfc0 +fb31225eb378e16b4e705dc9f71539cfee3fa06ca7ad09c25da9c2244f4cb71f +6bd527a72c50648880fef608408506d40d86ac41f5c315df85383032181f10c6 +6581608cc5afca5b14c9de88e4d644ed3829e42006673634abef89f3be693177 +e110b6a9a1c20fca44decbfde8bc070909dee85f7ecdb9300286a321a599a512 +a857003d9767da13aca350822846c1ee21bea540a561ff3a64600a4726e52acb +4eecf9a699c94ee9cc9cf895341b3e4186b3aa25b64120032f17514bde58c0dc +cc5b090a6c8ed8e32f5ad67a80e0524dfa0cbaea66dca13a7a3a7df5faf45d17 +8c084c90173abca0921e3d285aec87bb68a89402f580865106fd3840fc76e142 +a532fdcbb20305e023ef0eafb82bd00d13cff4aa50dfe0949f0196e5b070a13a +8ad6064a4f4bca5a82fcc2a34863169e0b5f74ebf197175829809af551577d0d +32dc3039d2a1b4f5a4a449895ac0ace93859f4d828878f32a19df55feb96b2d8 +0877042b270c3be6f3c437671f77251018576e078e26966762e3517313fcf4ae +b7a991b7f6d3e272650903132793ca80b3dbd93e4bd6f85785ef91cad75ffba0 +33092ecbb8c01f0e2cbb4554db8eab0442d26c9a3e0e5741e05501ed5d404b74 +2eeea6138255652b09dbda485f9b6d46460ad10c804762006db09f7357718162 +d30d6af2123d2226770ab7b2a4a6382b390f7c732b0b8e1be732e29ce4503e0f +047156cfad500f36e8784cbb872d3b86285eead5b444ff1213461515e36be256 +0e4b47acd61bab99cc9d6d61f9444413d0db38816bc7e036af0e41a77bd529d1 +32ca6f6e1010b9f75f205b986c1df0cf40a57262bb366b9a52f72dc3503d94e2 +62c4980780032384fe8bb5a977da6443c9dfd47668266eaf12e0da45d3e8b8d5 +30c9f85fffa9cad0bfb1826d63290eb6d8f52a80a6ab54e2aff0b5f6d6abbbc5 +468ba600de1a1d1b7003d3f22b0e79b20624b399e720da220ed252c1a1eb7900 +4718dc361e5b975a0cf7a4fb2e85c525e036d67242f9222e1790e5861a3b5e5a +61f4176bb440530b009c3e5241d2633a0753c7d824355b2b47f220faacb59722 +1b4c4faf1ead984cf1141a7320ee72b0b888d6f992227ea0cda0f0f4d8045b14 +f239c1e11513036adca4e5ff7ba0a694a862a0824b1f615802733a1d684e7f31 +47d0620afa5b80453d7a2d70d3fbf36f79fc7f2aae8188e4390af62cb9d9413f +a7af2ff884cf1ca1e984cc76a1250350009b755a29e43ff526d0b3af5daa0336 +82d53b1d1e6713ccca39df94fcb073756e18c98df77dd3f12f92af5483b4d50a +1f92888f3fc9cbdf7ccc7ac4befbb43711d9059903fb5ba0f07f0fbb9beaa768 +dc9bbfcce70e18690f3c22f2011aeb9d06cf5a07e4bd7ffae17e4cd8415005fb +24b2c1e043b9fa568f8db61eb5f33709a52a8160640079aed217a9fd0bff44ef +3ff0258a63bab5b177ab5d3f96916873944978ae928da9a18ecea37759c0a9f3 +2147ea6af2e6c4ecaf7cd8090b3be349d4b3d783b4cc9bbe32ddec787d84b60a +80924e6835e8ec17c3e27248386a964a22eebba7cda45bac4759799efafd4842 +2d77cd3a4c9fb04757e194594524010f62d9e77088f76121046a9511e9fccf59 +1792253af92d494a059e006d720f8f549f9b1d3a5e3a057d646119ae8fd5a65e +22ee8aadcc1588a5781b3fd094d69e9a6e7c411a0b1375b8c110fa9af8118854 +22291284576e0e843cfac5efc6aa3e23b85f1b8e85146f01b735b71f29048068 +c31543c2ff9f9ac521fd92dd80251adcf7307ceaf50e97a72ab72d1e4ce62002 +2f063659d8af6f537de1ae36b4ec89838fcf82c4e5c794262565963bef6c49d1 +af2051989d01e3410175388dde44067ac24395fc8216150a7878b62748146895 +8d2f0dfbfb516e7f1f5093ca1b494d1bda766352a1ce47f1cc9c4e7e58cd72dd +74dd44ceaf6e2621d2451edb42490b638e2f9d68b384136b712d35c37ebd1792 +f46c5169e586ada8ad090fce3492e68328c74ee801b67d72770989cb1372da66 +c2a65aead0ef1716f74b00faa690a68d382ba14e798bea8d053581e8c8bc2ad6 +e56a6483da3b63c14bb678c1c150d60791a2b7b512cebcb33e2e80a7b6f242da +f286283274a0d656c1390a6719ccdc1ac6ce5f4ac9a4ddf322a4d098632c71d4 +2ae68887af7f95f431b3ace2ca955c5d6677eb7bcb09a607885c14f1e7ae84af +1ef65198934718f71a9d79ca0c8a1f6b326ee5b592b4c7845ae87500c75c9524 +5626dca335c53f6f301cb0fa19842c4e6cc6f9e12861be5ed3f5af95c14b8271 +6bab105a7a612f5afcc710d5f2ff75a008a2c852be4d02b6f46e73e629af3705 +cdf75bcc652a2cbc58ba7a2d1996d333976694b2993c5415ffe2da796ebbbd3f +e7aca36ae2c353f27ffb5e0c129bb01ff6389d756884d08756e4c783b4656398 +ad3c7efa6c90a1f4482e2e2f592e9ff95a1da6f7ac792bab1804db1e20be4b1b +9ed816037ff9c09331cabcb63359bb1ec07f419daef6acdd61f8c16cd3bc619a +4e706cebd17613cd4ee882a76904f129c9d6725a32d1ef88ef37875172d40909 +b4564175453e50f1df473dc10802c2d53be6e16b09f8b8ab613bd43a764a5d9c +8b681d7821449f9239e28befae9bff27d25a3649b220663a19c5f138022d1560 +73cc7c15d874028e626ff1038a9e8b04c7feb597d6cd260a3187aa52a09c9f3f +79f282ff37ae291c200831e2685b0bbda9da2713e2ea0baff4e77274e872c87b +05decd65eeb97b384e7350efd2ab269d1daa1454ca6b77026153bbdb7be71a90 +c61255d960eb6eb6e82a039cbf5ef44cf6ebe00f6a16441afedc0b16e921f51d +f103d53b17ac9850d521e5392ebfa94fe13d1bf5a569b1b9142fa696131f331f +e5bac6483f6cf24ddff78f2bdf171b28eb59b13c90fe7062d8eb32c81da52497 +0bcb13dfeeabf196ed89ebb6df6c9ce8bf9f3f6e987b6d18e6c36f22d4002fee +150f375347fee0360bf7570d33e9788423a4462f64790632c87f8400960ec2f6 +ac4f8b37ff88a0521fcffb92a93242f3c1a80d4acf6a9480caa920268ebeb466 +4bd4e43066625e02fc1f6f2058730235a61de0958675d25c85642bc212c6a917 +be6ca34cccbabc8e431e34c8996f806028afb4f55fda042d2608dbde53499773 +96c598a0f7b94067c7459f73ef7d62e7f98a1cdfe0717924ee281aaa345bd2cb +c4b732805397311edae3001dec67661cf546a67e67ed5dbffbb7bd9b06c35b09 +9ab14cd036253cf6c6e7c170fbd08947a29265e9b60d391b149485246aca7b10 +f04ab1d165a2e04665d2d5d8f241586e862be0e113f5353a67e1af163e3fd13f +8a49522fc5502ac1a47026a8ea67d17b4443bedadcf8173e605520914962a732 +54fbfaa208ba3c33fe36b235f345a8b3831618d9b9da7fa146c5880e42454307 +ba9932c9280441429a265a907e9bd0fce5924c12214f94ff1335c2623af7f9c1 +4a99ca270a273f85eec7d1348974b0ca2800112dedc0de2f8a19752d767eb064 +ce6724166fc1d343c4b844ddd6085039c4495d30494593c14b26bf9b591268cc +2e46520cc78d1c84d15aec7d940be8e561c52b30b6e07c7a2e41407e342c3889 +f931e47026447e753ae39c1b309660709306c588a41cc44e374921f7c6b95750 +1790fdf6c7acc7c124639843ca55b3c63e859d4c5d0dcf78712f4bd7f7f3d60e +9d31de762a8530a46424ab93c276e4c4e64ee4f7496c7f24eb0f421f78e37227 +c90844496cc632e960ec2b3a1dacb853f41c7685035db082b3e4ab678c7ac069 +e4a45409d1dc7ea382eed9cd9bfebcd0bd572d9f66bced8154b9dbd5bbc0a427 +b144c82a5ef184c75f291dd33275bc94c18b9dea0df4b19b85e56ea41272f405 +587e2bf935ebd8fa241b14b887c37ac5f96015528627230a701da317085e01d3 +17551455662c3cf9837957af4ad720263c0766342e809366a12edaa639a42973 +8b2b0010c05c385c6575ce84bc3d386710286bf24679884365ef968b5ca60528 +e53b8ebd04c3a1d9282a929a872ca68d185f3d192111d4ff6f79582eaf7c2c3d +aa4b042e6aea09adcba08551dedcea911f1412ce7a609448b72002522b8c7a31 +cb42f2e960a621ecb395745ebb46ed54497fd97529e8965e69a3b221183738fc +2fa0edec5ff13759cc4c71d99959c894834fbe2a0950cefda53312c2f6d1e04e +65274a7db35066c1d2501cff2e6ebe69df94949f716bcb4b4781f2b3e214c1e9 +202e71072194fa661eef55f2a725e09fe0ce22691663f8fd6152ff4ca012046d +5c740468b3f1de3ee4728c2aee1eaa1f5306c71fe5e845b57d12bd09089439f5 +4884bd044ec81efe7f02fe9950aed16ec2fd0d6652e4fdb994515f4308c9a6f9 +56986139209cacb23a0b5c7e084f1b64fed18f3dc2d9109194de018307b71f1c +560989bde7425f3ac50baec2d9ed9504dfeb20eec113df7972548194bae61b80 +519ae3de08b7e43e2fc51861439db829f63f55ab816e8a96c5c889805844e672 +b47dd7401987fd7b920d9433b259e6f03d92dcfcaef6e56843308cd5b680fc4a +bdbb17dd95017b665f2bbfc2e1fdb3e041da96fa5cc1631367d3634b3ec3146f +3f8cd3ffa145ffad87d769eb8ee1f35609649e0be0277ef33d5fa2bf87d1d073 +ece15b7d1a22a01c23738313dae89a3375ce7880c21f5dfef7bf18065623e399 +5ac03752dc1d3ed15a8047780a8c0ad1a3e261e7928fc8b39cfc612c381cc34c +10ecd3844de0ef803c0b5d4d221911211ee2ed52d121bd95447cc712ce7ecccb +bb15c845d9f0dfc60659f39c8feb0516cbb388a308b39dd470e427445a274513 +6d41ef7962fe8324a3a60d6e38ab540bcb83d05a53f5d9fda084d6f988854a87 +09c37d6637577e6b07f967da9f0418dc0fff677f4e452163b8fb92122e4aaf81 +1fded0860510241bf9fc86895f4d4c8ca3976bc0f2203d057ac2013d69e95fc3 +37f9e99319efab21026399540da57a12ba28602df68e5cb67f4c371639f62069 +ac57cf96e8ea80a05b75d6abdf16cef5a003d76b5cd1b76004fb1613eccf917f +842a71c4080439c683339451d91b7762d36a62945308e12bcd75078575944b4b +6e76f443df490efc91696035c1f04975c1509f591afcd097f4c6b43f3f928c47 +38f2762dee071a86f45e3ce74391087326b5bcbd7ab949f2285c01720051374f +7e496ccb00c2164965ebaca25d957ebc3de98c4eaac1470669fb2b97d7675431 +e0c1117721f2abd66ebb137e3dfb033694b865167fea6412c404747b0ac98687 +3a2f0a280edc3df301e91d02f40a2c4d7f1b8b056f5ee53f964ecd0a823eb364 +0266af8f45c74ed8d26a8f76004304274ca0167fecc25f0af0dd400d04f33552 +ae52fa51ba9fe0abafbf325ed68946c89887e81e0c82d733dd1dc6f0b16ee282 +5f14037f0afbc682f6a5aa6812e967b26f7a88b89f9db09ff3f58e454e32c5c2 +86a394f07ad0f8af29e77a51e8f32cd0cde0f4a84e3fa9b9c7a95473d2aad3f7 +8eb80e21c67bbbac31ee6c72175c41d6058d113bee18705ce3a1b699f54a7386 +3b20feaf47cbcb44bc333167009edafc0b6f5dc53cce8cf0b39a8a64171ef83b +09ba50e8c8f236f2423531608e8d7a8ebe24979ffd8e337cf4efb5a12aa770f8 +67f2c665d9f7bf83077f50c29e6021919a756254a3bcdad52298f0d402a32f27 +b20008bbf4611121a3f55fd71dd6f85ca45243eedc9fd9b9626a9bb89e3747f9 +090e126fe68113b2a1e0c0d7170c62cc09c02cf8c9265434390172afbebb5f24 +c93a68ef036259507575283dd3233756f8600f40562274a2ef5bfc92e96636af +7ef6d74acae8dac52370ef66d4ead517dea01e05eb80d2825ac8c76fca888a35 +69abc73040c12da843e404fb868f49e0154bac939aedd9740e3dccde6b6b3e6c +2c11c797547351184493fed9d818a2c6a43c714e3726d801a5d285ffe0fba2e8 +c19bcc3e37a51f25eb9e69e6b2c42ad1f5061ab5928837a9a13a6e44e8b8c4d5 +7d2f99a88bd79baae94a040114d942c8f98c103377aeb9ef602f4b202cebe80c +f87a9a186a7af6653a3b8d77d8327e79d79535cf7137b954d5d87b86477329a0 +49b948572704983b6287c811c9cddaeba5bbe210fe922f64baa0ee083c3ddd90 +e35786dd4fcfcff464e8a2cc2dd0b3adf3398f0a9e17734148e9e3ef9d4b5492 +4b482e1b98dd8d3d83635f26339c2fd1db76d7817003926f7538e9703d4fb849 +41d597124943d72f20e7682c683c653abcfa21b00207f440ca5c540a567121f4 +f68792c0998994d4b7abb5dd2b2c4197b03e8a8482bde77c8c5e3856901b1eef +b7f5337b7a728ea1b29602a4a05aecf20cebe3e1fba6f4d91320d2e204062d6b +657d45d0b41b11a0ce0d9271c24154afa3033d7e134a32538ee2a83e8a7463c0 +96601a3147454c4d06f7d446a945b96260ec7bae956668e4d2396deb1452feb2 +53c1f8dea4591fbcc93ded81176269a67d2fc07828696cd1466876af0c0993e4 +48d2fbe58d769a5bd698434be7a76189d926669df1f62489306a12ed155adaf1 +df5f05d3b84ef0e5d96785277d051b2cb246d3724e1d5b9e18b621a675d4562f +e98eb50a08b998f73a33e4b5dc1b0716d60dbec6bc4609df660b781af16719ec +20a189e09382ee08f6abc3da51c3795cfdc739a2da7991168442a59eec54b413 +0f62f2973334407c4d4faca1ec4335bf89c554b4534e356cf6afa7ec856f9085 +5e9808f17f98bee4c6e1e59f278c0d7a8be6ff7fd37c97ac12b591c1cff9ef4d +5546132a3f9964103689691e15dca40eeec2c62e306b60fda401e14a45175de2 +19f5efee9604d1d32f04cde456128fca619da8d8933b34fb76d7672e24124f9d +1f3a7da4ebc00e2aebc7fa7c5a596cac7b46f5b827cb9b1a688f68e2e003b307 +b7e2694cb7808db93e03fef1866358cc2530c4585a60bfe6a907a434d235452c +72876a2d7504387e63e958ca78732f65a929ea8832fd4858f6d8dae421bae24a +24406669af13641c9331ad86cfaa51dbf30ea0251c7998541cc79a4e55162d5a +c9779aa9a62a81411888c217dd01926ad77b285411e066f791f3623690dcd194 +9c9bdd92ed075f70c1c6761e97a78a999a16550f43c846a028fdc0b9d32c61b3 +09766f711258d1ef62be9a145a49e5d1a8163567aa2b227cf515c81aec424d38 +7114a2d907edcc8daa5c6d0a122ee17c557cbe0aa1eab15620fc32d0e679c07b +73fe481cffa0d587619f4a846a08dcbedb7a78a42849eb64a217a30257013ccb +efa4a3001b5ad1eedb4e444957f7f07d9f67ca67de41139be649eab396fca2df +c660021100dce0eac73f156554f1555706d51e01dc302364cd7039b635786381 +48c260e2eca890ebf1aa99104bd76f1eb2e0af16baac84da2e05aac9a1cd744e +a9c0e7217d95e7e65782ceb55637a50b125f9ea528c507b677e7a6e3ed26f49b +5b20da6fe09446b63c6f3675afc4ea3ad09cbcd70e4b08984e31aeaa24094015 +6a48986b6d6c4f12ee39a4f78144596748e536ce9167346971d9ddd7245bd194 +b4d86cb3725e009b9add8fabea3af078da67f7f4404872b05d1e35d9552a30ea +4d3814c7413207a62a4bc3f6f8344d7ff1dd5492122d8914c826753e4bcb21ee +4a46c9853d75391e195c7222d7ae720362cc50e4eae988cbb4b0d5ddd504de39 +8d340f7dab5c94597952edf4dc253e49b97c4bf061790938c5cf84bf7ac2d67c +effbfe5c6d546b33e85f09cfc7c490c590b8488b9fe8ff584dd70a3d3dfef7be +d263122e981e92b58d02e97731f18ef48f824cf8c1641f238c8b365e3ff185d1 +7ac324e1b518b57f5c44720d378d87969c62df6d6ffe648ae6e1e79e9a48a242 +a81e7c59e81725389c415c6d12e9c92d63b267dc21394f524095ffde2c746c72 +d0b5f69da99afad9151a38ab55289fc29027cf779328e8c4a0b0f5b88f263726 +b13e525c05ca2f40a033321a54eb5fc6fcdb1bdf0017c7bd490b5ad87525706e +4644b7fe711bbc02ebeb0294a6e8684ba1fce3ebb806ed5f860a2b54bd1ab1fd +51563e3afbee43b1d4697d3f28e54f3ac15dbacd58e8bc54381bc001fef09336 +1c5f7fbf9714771f280b691de0f57ea0142b45c2bd2367951821499da8ec5151 +62ca94fb27a7bf18e2507b1716410df84869c68c479c0eaac5440f76138f3f5b +a17dd9aa75190d65f8a1171c15626a6f5dde4ec840310a2876df96a3fa9411f4 +3b3b41d0e4a7778d1d68b90efbee46555672e52a775ed4edcb89b833829e601f +5473cf37fe6257fc6322aaef4bd566346ffa0a7aa595d621fe4c8f32dee529ea +1cac31d2af59f18fb0d356958c75bb10d282c09672f12ca6939fbc0129092a38 +25487dee19741e9d31a1c52867aa38447cdbfb48a0eb5f0d1b5a4174c259555b +391b3ea6068295eb7c275fbf807114668e6ec971c6d3ed71d15cf4978ff4cb0d +e43d892c3985ea992f034d70fb774fcbbd799e60047d84084670c7ce6b6d2bd2 +a6b80add573407198bdb0e7ebaa3b96c232b0b5e4cda0bbd765917414b822aca +a8fd79d2891ac8f10dcb7583d955652a6966b565cec0a6cccaa983c7b3896b58 +b999cdb4f638b8f46da535e2d9e2c49c1815c3c19235085835bc5037b00e329e +c0bfc4dd62b9559b3069e4e53f8233982ceda55c3b995bb858aad5bf610f2258 +506e9242afd41c6dc704a6ca1627ee57c28add6be563aff18f61961b1b894a34 +9071e546b839a23311cbe069cf2658a9baa1c3da512f63cd884fda9cdfe58573 +9f30267b632f24c5fdd445ef9deadd40c3241c1ff4fb10c459c3c88f9729c2f2 +d893d35fad358d6cc15179d42762109a6d1569ba1248dbda8d5b673a08f1e15e +9b4ed7b75b5adca22047e26cd95833896a45bca84978b05ef28cf46f007274ef +31513f1cff272420783b1815de3f61fb1ab2b26ab391743a03139474474e5406 +d2c9f3f137f70b431a1ed20c4feab3075cdb9789a3e4387d4b90691020d0c680 +32fcc93bb5f3ffdc7588c785e316325c68028941669e9071f56407c1921d4d50 +8bbe5c746c7251676cc6d13a722994626eb9391d71d96e68775c11973313fcdc +1d0eb5a3f3d87cd51da26b0ad5cf9b6b2b491e89a6c021f4e09cffa29c2744e2 +a1ccf1c84c5952f2e2e09c671fc70e2f8ee9be563b46b7397842be3b16912527 +9e41d2c0ac0b66a22491b6ce93573cd6d433a8d415b840305a8c206beb114c53 +b75d9f4171a76fb6782ab84745f87baa1b94584065b0b09265a324af521cbf1b +56904cb743508f55413589c139c898593e0f9eb461d29ae766dcee48a0c50295 +e3590d7149179e16e9238bf9d7d4cb13b30c7d4dddc0f97094e0bf158361d04d +75c7043f6a13fed84c17ef2730bd2ca1049c4d6f97f2173f629c6332ed5e0ab0 +e1f5dfcc0b3f1b2b2f19cdc5c4ce42cf74c24f856cc55a95c074222c26151d17 +4accea26b280dc729f5053f97cd74c465b98e92ec56eafed6a236d36735b57fb +9c4850f29a50a21b033f5437706cbe8326afeaec37bc3666f4ed2a76f49361b3 +a54ef09a8350bdea4288d9e90bf63ad604db02cc6bb8c118ae127298b11ac276 +32c32ffc30b0d9353156dedb70ff34f26b7229ae6c3aa58f53153ac887255cce +39435f9483653a8b8f7dc232463dfedee311b538c7599fba30c4aad3300b1126 +488f330a127db75b71d0cbe57b7799980288deea2a93edbba3d13c52b8a4d963 +be96258f63351dd879dc6c86ab64c5735aa9b104197fd4b6b9ebccb03391ba3d +8cceb6d5ed29947c72d89a20c8e62eb9f184e21ce797ffb64b328653d14cd2da +57e5c53f8f6feec9afbde69c52224098a1f22f828ee8ef1ed83c729d6c60f9d3 +a4509bce9c8f9eedba64b61d3555a21fb018d37469b8c94d15c1e7a59c14f0c9 +b05fdfe1248327fd02df92e72ae7b6c7ddf2324974e8ba4cbcd70c7b832b6065 +253210ee0a956bd3dea0c35b70e63a0e46accf10afa89b1782d27cb56f60072a +2c8646d8f65cb89f94cac8114178277cd31b78812e901a26616d04fe50b79169 +6f1792c5155010d47b8011615e24129f5848dfaa94bbc239c8ac8abfd4df8533 +e7e9dde7148fef51f2e448a74790204dbe5d46635ad3398496f3ee4f9f2de534 +203b98d452ff7a422b30239113fa6d7075349f40a111619704b69580263c4b99 +eb0a9c9e564834e83b251b00b64a1f527b738f2f8e360393420a87c0f1326296 +f01e0359b90336cf7e0ad82a3a9efcd06457ddb343055ce4c0339f8f2c2aee8a +5d4e0851e32791845139edd95b9323b98802ff5b2ed5d2fad66dd2ffc39e285b +07bc3d4fe6d71c88fc800abe36f2fea406c27f42d410aec089ca4d130ad17b60 +c9f08bf3807a4b8331fce38e6ee548763a752e8d5693f5d0ba544ed42fd47fe4 +439657a7cef3b84a4395c38421e02846c414ca5bcebcd21457f8819d6fd9b39f +55031a6cd479f2eb259eede710dbad6dead92263455982260a331d8d7414d15b +d5346d70472eeb6fd8220741ba8d19b02f5fd4a6bfe8450840b81c1b19d8a420 +96d8702a085d95e450108f3d77ddfea17372e0bf9af34748cbf298a5daf4ff72 +6dc058e8da303109d8dd6f755d248a15ed89e54fac66100a641200f27663a9f5 +40d672cba8d16fb2cc8aa97f5fdd2c3c6198c005882d02eccca0f1930328e486 +7f46f7c04e616ed7d5aa370824ad41bcc4766bd38d023efb7759dce63480a586 +ad52c393e02532bb0e40e0108ca08a6bb47e6989440409bedec2e56b3930d002 +bc02250c47ba9e59400d292e4eecd1ef9c6625941b7eff0db97105137ed94fbc +d5bc6f14af37afba2584f56dfa26b2c4c26891ce3b83231ad2f0b786cf629c9d +9b5a028ea567fd2772b152b88551679c583eb20058068d53923829aaf845b744 +9ce473e2176fd3ced9937d660a0813d3b79ff82805a882b4dd30b5f1dd338cae +09835cc8d2c383034ebf57088c3f0d6d79899587e7eec3272941279fcf9716fe +5ea11e2bbfd5c5ebf07adb4a7525bd98c7aeac6f26f081e1a445fa471ac85a34 +240e711881926924d906f42f9c57ad3445861042c63f4cef55d6a476c760a8a1 +1388bea307788a47b871e397436aabb1e753e9f8996ec23d8ad96f3e94236936 +75fe4f11a33384b83e3e7182c3a25eacd65d7bab51df0b5ad0c362df1bfe36e9 +e3c206bc6a364b14e5e53dda4cf5861a91838a948739e7e41c569a41cad87568 +64214e58b198be95b98bb214574797b5eca3d4fc96b32e919dfd21ef73b0b127 +79d357dfe42bf2b28690181dc7c9d4b9fb4e90fe4d63de4ce187d6d0e0d47472 +88d01ae7b6c1b1f682070a031cafeee8cedb042117ce1caa576322c074c3c14a +10da9fae977b33016fef72201237ab092f85c7932a352de29164ffabe42a7a3e +b1ff686e392db9beb973f2dfefc31386199937fdf6a9f09992d02e7977eaff31 +25be2dd7a24a2247ca5fc3abd4089d52a4f8c74687d6f59ab67e6d90ca604604 +f81d071d4762b432e14906dd5e69e8548236bc32af4436a32385eb898018264e +6ca096449b97305eb7f1b229cd6bed0b5d6e798fbb43785f926ffd44a3329464 +3d6c0ed68f28a92dadf987eea216d8772b4c18bff0331189afa1b926fe49b964 +d4d05b4a40f2e8198d9ca0238e67ee635fbae3e297a2770e83050df07b918592 +8e8787446421ce9d910f594b0bba614dffb4cd7b3f95134ec41b94bb5288b3d0 +f77d1e3ab9369e3b81088268dda60c167ea1ed3033e968017bbe0968a1e59013 +5556773807552a2146a6b844981894822a2f162a73223aa97814dc76bccc469a +2cf0d6c1ed90f6dbbe7d6cf07b73de9ec12e3a3327ec627265932a0ca6927b0f +691db2d01d13f7b8204256b7998e9c874a018aeedec5485b6dd078722f8a6316 +7860bc9820bd38b2d30dfac63b1cf10841523ccda4ecad39de0b964dff26f897 +5debf826ba7a339cde9e9238468afd5d418776f47dd82081d6e1a34597f02ee5 +fb0a246a3f67595fc41bb5ef4184382a156c977ec2221ec2b6e31a190c3f02b7 +4e01d05d89a4de59aad05aab9520fd5603db92d761356720280c90aae9ba8a8b +2855a4b63922a7c163512d4ae4e58f186f040b0dea179ac44bae1115f1da4114 +6aa78c763189938b2ce1fe7836525120193cb21615f359d1d1ab8e6d33c90e5f +994c0f17e7bb4699f25f15099ca354bd237b45206f9ad48c7ac3e803ee2a5e98 +9ee45ccd5f164aa131ae4ad4d7d44384b75051df8bb15c19a872a879bfacbacf +41ec44cf0dbfbe94f009b6c3ed1711a890deb4f5ac0df27176591835e8cea4db +b056b75abfdf3afa486f10e19da638a8e8de60fe8e736b456c76ac387d1b427e +cd199925fc8f30b0a706939b194c459e5cb8d71c128e2d068bdf95846670ac3f +a9bdd2570c879a8ff8aea57c60c8242e24f2813f9b3334a82d5f95ad5ec41ec7 +f56c50a6932fad840f43df670f065ad728f92e81a8bf6058acae470cf63bca0d +1d385458d5b7e49dceb269d2abce324e55e12469b4fe6e64cc4ac8dfe368a16c +4c4f615df2ee547dc114f29e1bd86019fdd62e018492d4bf037dc5f5dbb94fdf +7bd892db84feab360c86858c8a76642c5a9a754e7bae631d347a0c74dfc977f9 +b63955546a6eb96bf892921b99c3e0f8da26059d8d6fa92483b4a41e4753752e +6a28e2d13b6577e34a4b96b03ba8e06af8de7bf8c1e7c86ecb2f95042998e263 +a831b1e5bf0fcee21b41df2afb97d9d976dddb6defdd01030717d0dfba30bf3d +9c844d92213288ffc86b7a56a7b125e1a82281fdaa7215252428777f283cd566 +dbd2476d3d0fb751997d9e4b2c322c6df84116ff61c782fe7a9ab9abb3b757bb +94e6108e896fd42dbd90bc624bc18238ca9073ae0aabe76d22468121427dad26 +d1ae728f050a561271775b7eb4e038cb4ad81891ea37ac9709a4ff054bcea449 +c9fa0510a8f57d208e55e67675d220900b37bc244047562c3e01cd2d3a07bd40 +15659d9c5d8427545384ca9ec9324882a95edc6c00476fd2842e3f0dd4334917 +e1037a83f73d2c5b5d91e18396893097d78c60ae5f42163a7385aa231cbfa198 +b42dc3349db5c187f1890ed15f9ac230a644f301df83d9971f1eccb9518706d7 +3d1980a5ddbe8c8838eba8b155e13fa7002f4aa33362a0e870b5af21b929fe28 +1d2bcbe88e4beab34866ff3a0f28a9bb401e707e4f982d5899e79ce563b4518c +62835e336ce834dda4bfe3b95b44a4a28f4fda6b476cfc081f63665855a44cba +a764c62bb845e21ebb58bf76228575358a1e1875fbfffa38e8bea2c7141f2935 +d481439f0710c14ad3d268325828b88f8647070d210a4c3e544f3a99710c5d3e +9e8db59252b4cc4354b1d663ca8e8e85f73b6b1e3022954ae40b8ee99866aafa +0728f78b86cde5ef0b1d55a64690c4fd7aa93e7cf01bc859c9fb1ddf590b58b8 +fdb5fe5cb5ff0d2e6c2c0569476d86fbd15e66f8a556c6e48e43af906d00e4a8 +fe7d5f57d3027e42a40507406244aa221f002f92f3f322fadc22abd73a160a58 +c15fd11ef62c33e2ca462f2c2845845445e98c2e2b6e4ce42887e68ddf5c048b +c59e28e30cfedbe18f21c9d2d564a5a31a0fa1581a6da094551ee56cfc91b2a0 +2ccd1f1e8c4161b56fe14b22bd4509df1a939bdf0a6f91b4e9f74ab0e7101408 +ad5be78c154fe627a52a595c4f66d229eea77532d3899d02c9dd9fd55f46be93 +30c4b53fe446207e3ab691d514bfda61b56d8e9121cf53053fb76088370151db +67d46ce8ebdbfa6746cbbbc4ae882696c166f0c99ca72e3d2d115d65a41c175e +e2796ab9373fbf9f79ad40a65a6a1186259dc457bbd090e871cf743fc555b963 +b76daaadafa7ec6bc4aba8e88668a7a4578bcfc8f948e354882b50dbdb4a2520 +3b390a4862590506f7a97a1b51290680ff90f8b55891f8adb0843999084c9b9d +6a93eb73744dbf8b699e2794552bda0d566d2fe8eddbc10cc3e6fcbd2d138147 +d4bc28fb4c479599fbce3f05892bdb97026a8fcef3356b835c00a9cc9ea8b954 +68036b098419e310475a7792355e145c46d0397601298ac2ed8c04b35d8442fb +4f35e94549ebf16eaaca78958b31ec2262e367e15d9c6a5fefd5388ef6b249d9 +76fef26cc03e4c9f33ea9ff2aab7e84da8ac038ac5304f4c2bc555d26cbdd623 +ca8f7b381487e834e6726935ff4c9a7ffa4f2bb00789dc6a3d692a1a75890185 +b4fd6e839d61435db4c1ee0e9a59e3c67fb2531343af6955783025dd29301130 +d7faa367f26c28f5b000e2cf49847d048bc101715ad25525b66f0f8cd4088e2d +e7a0c728d42e0f1fbef7185c0af2e55f1c75cd7fe947ad71d29eced04338ab19 +85aa73d64e0b1743070c19bf6b194b3b846f154582718c6194c9ed59411d9a9d +0f82c4528201a3b9fb4a0e85777cc3b35181153a801516c81797422cf4e6188a +40576656865e2d388dd997bad680b258d010aea885125a9dd9c63ebac6c33516 +3d42ca24119cc6db26ac67a8a8e20187221779fbd430b134c8b3906d8075e7f8 +34811bfcfbc596af807a8c8e0b926193b2a5fb29469d1a0d6b3a19556a1cfb92 +b13b534f01e97476e5a3ac405fa85391bdff7fed1c5e08cbaec7d28b6c2e4396 +219bcc1e51c00029e4a10f85fc424e5491625c0466b273b8f784f6bbfb4d119e +6a0830e7e71665c2b387403692638e19cd67842106e5a3a0783ea1d82b3625dd +13d39474b8ebe46ce456f8373458f4b65033bd6a5597155186b391fa4b372d44 +58a9bf352395b0969ad5f4338874e11af548939e8edaa44a28f96fc1e08114be +f643cf4e02559078a04cbc519fdcd0e0b63a5ac553649f22ff161284211c6865 +5ccfc96415278da68bb447c6d74cb8d2e861b5808a08e8eaeeed3b0936bf932a +6f230c72d6de5f3128d06d8b3340b43026a893ee266d50de630660065c2cfc88 +2e164e6c7216fc740a95a757eb7dd9fb6c8e6b6bb48711c1ef081b4fd5b9f2ad +3dfafc9d90e6b09cbd01b352ec6efa97be64d0fc09a7ba9c6cba2a3e1fec7baa +525a254464476bf0fedfd6f05caaea85d1b3f9520189e20bec3d93c8461f9c6c +908599496d98dc0bd36f696130d5a3dc4c920d906c6eeb001b67b679508bc8f3 +43ca08432bd730c3f13c304f944eb81c58c0fd783c00760d386dfbd3a3887372 +05c56737065a7467b27cc2b0ce09ae5815157f108e69aa4edfe64056e5b3ea40 +04d030a723e2d4c515f2bac178f091c6ace0461b4204c74c761a7550dd880341 +593dfd3826e124a3bb409e83c9bb1cba83b091c3a8f32e5ab12ec3348dc31a26 +8c89807e9c7d592c9ca5bb64460fd0508ba2109df4b59a449eb2864785516766 +9ed8e2d12a018ba0a1b78a4bf912b5579f0c1eabc2964035cfc830623dc238ea +ca9a8dba8e4c348ca416a5e190c5a361aaca1d5a82e2291870b2be5570cfceee +1a4d758228937cddac48d495192ced73ee2c65bf8b24c2f280d5f28b8199aa7e +42725cd69180cd224122f71e730da9573a4db97587ee484060bd95af39f113de +15d58e4fd6261698891e5016b27cae9a977eb361027fb27494a1223473a28dd2 +d2d9b445c2de335bf17f2384a3f1051516d222116c4d9eda18db4e349ae1e1b7 +6fe5c017ab731a0d7521c18a3c678dbd825b1471575f0952e29a26d896c51396 +e00b5d9cb4a47ed99ce136c5ca0418a40ca02787a657e623a5d846f8fc38d920 +79c54875af17273179a96af0d0eed2151f8d027cf037a676fb8f832f6b3441d6 +ea9ae05482e1d99e29d949cf507811acca6cbf95b19f9528c3b1ef595a5272d3 +2d020e9c86f249b855d537d2f9243452f1e6e30eca8c8beb9ef2160f2c89c7f4 +4efd5ef92ba35fea08750565c279b416b30514ac2b3453e8ab654a14815bf0f7 +9bf59d1fee07833a7cffb865f72277f473d4f70694c6ccbb4c196124f5c89f35 +85bc22acafee5397a35d915e298f89cadd1a26784fd632602924767b939b28ed +3f3a4f994dd421c020e7975b17d0274641a53902c73b82f12585630bf893e243 +2ed9dfe7dd2002c0068f25c26c241177fa3b443fd03c9fca2c929985b0a00de3 +e4ae17497cc69a89a8cfab4b9646a114d2fd86bfcc95b89a9a579f397634621a +790026f17988a59c0a1ece192b5d6f050518a9c01eabdc6da1823b06f20cc93f +d178dcb449c53b9666a5e3863111778703c0340ac2ab8f598b0b5f4bc16d7c48 +9343d05b1201083c77764e733f2d489a121b71653350fbe79fe4f849109bb40f +e448a279c68cb819b3a359e55ad424213caa846a3ae9ff7f3da56c976fb9f6fa +2f2e174b7509cde8ab196946d76698414017537d372fb4002cb05266ae54774a +ef0a690643d00aaf7bff4d6858e825c81cd00530d9f0e057ce7d28f34f92f097 +4974ddc112fa8e36a5c8b0e5cc5d367d7c0c67b4cc75061c8a7c40e23ddc132e +0fd5a7661a09fceef657eaab56a5213c1aae65c14266b43943eca29dbc97aacb +89607dc776eb8c96eb0370e6465dbf05ef368c85a7e691f5bd088d246ba3aa4c +265d05ac27347b18e7e6793fbedd6d7293b2edcb57aa8dceb5f6121cdaf07f6f +fb7a7fbc69f23a33ba77492db0916ca3dbbec837c27af054ae03d3f96d77613a +13de11a6321c3d8f9ebca49934ab465d43defc9d226af1260474ef279c9b2676 +1d0302f5f3c8a26bf69b5b2b556502fe65e791416ece8f542f5279a31d031801 +addda6165a0f8dfd3ac01dc1a828cb2ce347833f3cf6ae6d179c63fb1bc43d31 +de5da337f6db72a03df2f753e8572da4b4be2d632cb34b5d7331c9f76776d97b +ff7c1faa99ec81174186bcab99d322f5d8148b2f4d2e44bb4370244c36a66c04 +fb937a97bfb86a92469309c512dd02de4ea116cf6b554aaf798f7c3ea44f7401 +6c6fcf31ab9236539a70bac365ddce4e3a30ff9a5ab06f970b86bc16f9233582 +d4e2280b4e23480457cd681b1ac81f0860998dd2353d0cbb0022e63fe1cc173e +0ca040f947e9d94cc7c1496ed8ec8f0595f09df55966b9533688e8f1188a2da4 +3a9fa8324f7bc45452e59c3015db8182592f554a146b76e0e9ab9b1af4162263 +a3a20f2e480d41a19d031288f006041a891bb8e961c8a7f780aa8d4648e83db5 +4631805502a3c110f072cf468835bc6137026d71d6284b1ba2bcb7c298cf75ab +24a856dd9cefc379bd3f52f28bd80f180adf426fcfe3af69d9946f45bfdae8b0 +3f166e6326558bad54833d38c8b50374b13b2384d5f11bd0a288e04a856c2c99 +6b0fd82efc7ceb1f65cccae8ee69405d4634918e1e3acc6e8490b670d4318b31 +e4393d403b9a750dc19ce848722494576fb79a71a5fb4fac891e183d16cb7839 +f3f291adc9e2d86f91f8f842450b1f331c17eea0451124ea6ae2522829b2ec3d +cec06fe504920ed6740c8796027699050a372bd64b3e9b472b8e982a60bd72d0 +00ea924bafd54025e06241b9a3c3ddfd9c6876599405aee3097f6a953973c217 +91f9106928e5bbc74cb7b403d0fe80d189d1254e6ea2b8d4a765a97515d5a22d +c5c1214fa6ea296450f792d7b1c8583c6accef3d4f3330c0173204c38901b154 +e4688314a5deec675c0a660e1e62932a5fb3dc1458d3f34ad9b1c57f51f6c597 +e146441114f2cc03ef8d06054732146a87e1de5a1b8a8ea3ebcfc07508dc03af +61199bc7ab26a92f64f17407db71e94975ee54b289a731088978eff2c8dc29ac +3371d2e8893d03f16d4b0be133fa0ada9c3eeddba4b02d4891ab7c9076ec1983 +11a8ef97c656e9abcbcd4e233e42962f9d5cc7861a9ee81d242123f8428765e5 +0016fd2da382c0258556a69650fcda31746e0813c0c69876254262d332254d1e +217ad011f9dbf218a679a5e06e2916b58cd0bc64f3607114b93cca6cb1be3aa6 +8daf898cda9c15ecb2ecad0ef9ce17081d4a6b1ccf2ddd833dbcb8ff796ff638 +60ef866fad0bb4f3e4ade2ea04db2613922df9986c09c172757cc66730085bed +26ac2ac1b5e76ccfb6562c160a7c53dc4e8392d4871edd785132279c1b1a8543 +6955e6e7a1f0eb2609cf63aaf784ed5b4c6502d279ccac2adede7d19c168e443 +3f9b00f7c5aaec03afb0018bb8ebbe289059fcc8e7b31c10a005ee7e4c1bc5df +efee4917e5cc569e082e5e0b818dcd519ee089923c9d802cda4f38943ee4d63f +3c6f1af5d86e5686079ef821b2cf001f36beb0d9c2542e9ba50edd1d0372ffdc +358d7ab5fb094a03082a7f15aba17f3edf2665597a12b4fb0091ee9e8f4428ab +1d48052c6c6524bb09d0b9451861a0a8722d1dfb335210942e753be72161a4b9 +ee60ed680aaed41e953e33b19ca265a909d914e8e224372089e4ad45b7a9e90c +c0595c42ee8d6f7444a1585a84bc22339473224222792aea593f9fce6341d5f1 +be04b12923756ff3f5668c2ccffd34aa24ba2be283ddb25cd5bbfe7b6e4fdc6b +1a78c2966998d123de207e3d628eea35b9087c88fa03a90b611e6cfa80aa848d +5a25d0c0f2164eed5fee590abc41f84efb676fc66756fde5ecb6517d0d4fbb5b +3217fc2baedff4063bb3b618e3570ed1b08c18cf6ffb8f2b2a4bc498a2e0f33e +e1b0b149c0c1ab231162e26537e503804869366dda101b585defa70301b8be2f +0aeda790b56d656b10c1f54beda0fd5159ae5dc266ec45e41ae7866d8145a46a +ffc05737942343923a227dda9ac29c7d9c935c55ebcd9c679d522460aeb439fe +aade95e77d54488d71bbb72033531bded112a827c96539aeaf44c76eb99b69ec +c3a46642be67b65af314b67e41c51397a9e9e0cf09dbeece75655dfdb9e6977d +3873985940a42d7589d834e9417b44e89aedcda2c18824406a8b980defa1a7b9 +92d7828c6c04aaefd87d1e48f1007614c636ad5335de10fa46393669933b041b +e8dafc0ca6fe15b5bdb0e3eed5d6d0fd884ad45ad99a5c05f193b8d98628c253 +9fb60c2c8a4068e739eaac015f866ec3b256144a1d3bba943060bf53a5b032d5 +d59a333ab3c5f83ade25319d21832fe2663a9eeae779555b60211447bf654dc2 +d3c13d1b32a72923125d82de84bff6e04119df00935bc12b8325a0ec27f8971a +4302fce5a5789e7efaa9ad466b3437ab1c9e4b8a03442ede7adfdfbe425d8404 +f00a8e39e4f3ba625e9c74bb504448621e8fddbd04313622d0c1265d9bfb9a25 +5f7dd4fc8cde3cd3c6a4f5a42f1a91ca7e69a7a0b426ed592fe4b4b0aa84bbc2 +776a8eb7956febef90ad8058ad9eb3cd7d4c04557fcbe1b851ba5cc124326e1c +b031ad76ddec5a4ededc9f072b4890c47504b53cf2c796d41e2c6ff44ee411ef +6a27a7a930933b32012d68c0cd3ebc12be1397999dbf688f33910a7eab52fab3 +8baa0ace1dce15c26adb6c834853890dcc537aa854d50fd1c29a53a825f5c163 +00136714343e8fe23db377f0647d62315f39a654aaba105c7a6e28807c2ea864 +0c3acfc0f64b56cae6146c930e40320e0f8c002f13253560437b20a05a749c75 +4d28bfcb12ba44fba2cb26146c4e26fd4eebb948787e118ca877ebb0f238148f +ea7bf5f54c7e775a042faae5e2e2b828e06499092a8c0eb6022b99252568c973 +4b8c7c92ca84792f39d7d9eedd678c69473d8448a5c3f3ae39aa6816db97f2cd +088bd70389d0b40cb9659f90b436fc30714e767d4faa5589cbd9d05de51a6d40 +952698082e91697cb11557580130e62cf404a729bfe0c195206af9d1fcfd02de +dc21ddb190be6c6c03029bbefe309fdb929d07a440a62eea1a6c7c54a5868739 +82201042bcc1b334cc584b44cd89c64602679dc17307cfab80ec86bde7a220e5 +63bd69323695cddcb36407cc306466a1947aa329b2dca67b14d82b2fcc4a50ed +568d180600f3487d272b4e901a53e8a32c75624319e80606636be67f4f648bc0 +89cda061830bb7570822862c7101f21d5c211178c1d8921877c8b85578e018ae +9d4599bbc761abcf6acec4a55d930e0d476396293c9b23aab016d791d31c9075 +5439db25af0d2ee43381469a06610b934b4e90535e8b7e60e9bfab721b3cd67c +b98aba87b1fa6666780ae686a5133b419c0599378b3c9d638c16ade19c76de16 +9ec44222c1beec0feab2833b8df8d1ba5db511c7363c8abfc86ce5e3a1770272 +18ebe7e3931e795805a75cb7d3124e8aea204b033b69aa6a10dbb093f12d17a4 +3cca62b6a49b9c9dd50516e9a2d84a22439f6579cca548331247e3d507c3c5eb +2ea49ed70fcea90d5b04e39a6b94f823165606f6d3e065813a1126f18ca4023d +d06f47340d2f8f60ca8ec8951996276668c117a7b3e96b95b7bf9ba203cad22d +be458dce1d0010e43f283ffedf6187fcec869a300bee767cd86f89b23cc78225 +5f34a222e1446629131afd41fa8bf6e0913213e455b73d0336aaf56d129da933 +7a258ae08027465b2df75091c35ac2dea7c46003e853ec64245e114d29c93e10 +42cccca313554de0e6befdc9f68b5d7d6ad2bb009d2fb171e132a5ad05cfb366 +47b0fbbfad55012c39f2f283831e1140d5c8a76d178e9a5079b74183ce41aa20 +0d70728cd3304da4e963fcb66c6541a1710b6f11def520f96b33c0a728218479 +24a41b887dec770a356c8c7775192837ff7620ab4152982c9084af91dd79b727 +8743dd9458d44a2182c3cf187d093835f5c8a87312e46e136f4fdeaa04e35420 +4efc0f7ed32ca5a7d74d7761a2085b2920d3116125785d6a2ba91bd5cbd110e6 +1a6ed7af93b4746c35045fac507986cf88d2fd27b64ab97e8f433a47494e09d7 +425d672512dcd71c66c1495e57521917e60ffa8108008d09f3458ac20dccaae0 +252a835aac3504f2959a7df2c9656c8a1fee6afb9a4cd5c567f90506b46c88ef +7207839c5195dc24a36cf5a68a85f2ddf95cde9dc84d9311d840244d8e4e98ad +0c8356b2c8dbc44e30d1d51d5d833c9c39f8aa8adb971bb8a1e3148b9a0d7a29 +5e6c55b8599d74762780078b5ce78ea174ecaafd9380a8b2e4011f42cafb6cb4 +c925777a09fa9bce3a3c189a3307c2aca8f8cb5f5cef8af31ead6a71a96f6ca0 +488c41e727e43c64f7d9ef04b9209abf607c1cd02d9fddcf75aa2cbe748dea0b +a54c33cdd749f65714675e7a882909942733c29cf0aa7c7ade6f9ef11945c66b +21cfdbd60bb7b48031f0b91295a9ed79c405f1156b371a2d9cc74da9a41560f9 +8bcda7dd2fc669bce0dae99a4a1d18f368019d71e606b009bc432ac2310f6527 +21a8a5ae2ba886e269ed6eaa93d94f670e2a5a9997b8afb95ae3a4e756cbb703 +6434d4ffc7fe7ba7e57c595775bc03de4015195957a9d4345fe605bba2a838d1 +75d781e7bec4f080d4cb91ac1ffbdcc536d2ea9fb2f25e8bbc86487a05c0641d +b733d763b4bc1a19c7a90356619cd2cf051f1bee0ba195d9f38a2b7aecb22875 +1b9ea2282c4bed492e285341cb5f984540618fb239438525b081a0072e3f7511 +7c6bf0b7a7e9ce576029081889cab66b58ff957b6bc9823432cc055d611ce5ef +2a9045548d4b205519b7e68b6724fc3696e1000c96e07448b8aceeb3715f6722 +0dfb84f0769cf3f0c9408a0053a271b6545d96c3f96811fbcf5fe45bd491022a +d9e7c5beea6afe3737990628cd5766f8236b8329c0f8b5d2b366eb0a92ff7712 +e1d02bd5ce6367b67ab87d8040aacc982d7781e109ac0e6fc1a671e76c1bb0a9 +b4bad6bcf8f454164dfdb72bf9c05c66b0da5b8615c8a60df6bdd4c6c79442e5 +0cff25ecf9d48061a36cfef145e083f32d933b63a8b770a94a1c78ee11e03dd7 +a92533414722e39cba36bc400fca49162bbebdf88be9caa5ee294c2073b378e0 +2c33fe192764a761c64f476599ab19697df9448c93b5d7d7cd98d63a3d9d00eb +bdac9fe7eb3259c45c2839d9664890889485b36847683963ebea7d01a6036756 +2d15feb6ec3e543f962b90fecf77903e4b6085ba8c472f544d690662236930bc +5e380346b18978da1f151b5b6a40d2e249c850989f54fd8873a7b5a1cd8fb02c +a16e970515d6a6b79dd51e48b6779603d9db42e7a1c5d21e70dcb5c2428c55c4 +d4ed617dd0e7d791163a6360cddef1729d8a2eab68b8fce833901a7c8a4a7eb5 +7500c6ce2ff822fba7631f5f2d73ac396011c28e1b033bcfcb5617fdc180fda7 +a73e81de8e85ac3d23351cbdafefabbcfbb64dc419836c53bd399a1b9e01c558 +b09ddcfe74ade1c204cdd6bcb9a3443e27fd8f523db6f22e97dfecec828d012e +7f285d4f20f94086c9af4da5b11e3a1a5b4ac8e8b4c8cdd0ec58e046e3427605 +c55cc0184ab80a46befe0c626e43f5fc2711efb0b28c0e9836be80dac14ea670 +c6da6d0342d4328b1b8457b87f80019ac9db3ad0bfb67cfdfe4a6307592b1206 +74fb9e28ffaa887a3a4753622fbb38f947ea616bbf89d77d8dce1edcfa2e8c71 +62df2c3d7ff61064c917343d54e418ed2135bc58965e1ad9ea3ba877e279b408 +5731353736bd734e9e64fb72ff98dfddc46b7c26904e105723a1a9211189f368 +533311f798793a0115782f403e83b40a0d838411526bd5555efc9ab06321019e +98ab47531581cbfc1d6070505446f8a0362f45a2c75c3e5f54bc246f5d37f9b4 +bf1db2322081d122c645b4151520b397dbe2de3a1239abe95b1ce891b9ec7087 +4a1a98cd4b88731ce278accf73b8b0f9674265bfd314d806b01d749d1f4ad833 +efac9335569d5bda74d65981da1bb3369d07f5fad26710098f3cd5a0894cb8e1 +818766ab0b464dc6c518e78cff98b28b240476a195d9d7877181cf55768f838a +08e9622fbf7ce148fb51a05714bc1edd0bb3b33c2c22f3b665a20b330b3c42ce +2976d7192929a067e34cc96b12a96bbd49adf420b1ebe5712031ca3c6370458b +55ebbfce160ab416ecb2f857d3619924ddb79d7c400981f0ae72264ac1710ad3 +e884cec5c414879792256a328648a5b99276ca80cce238f3a882e029f01db542 +46d5cad77641b8c878b14b85002c749abbe32514bcf278d6731b021ff144b5c0 +e4469fff4a390c95dbf884dfe8f7314befbfd0a7cda3fe2b22d00b27d10d08ca +609da7194c772270adca1969fa64eb0d9c1ac3a8909bccde063f36cf33b49dd2 +1620f3a4c8c6fbf87334931b1cdefcd02bfd9eb949413545a31f712259c7ea32 +349a8ccba3dd2ef2f366a1df8b2198a4959d23c00b6f5739296ef6916afbbc8f +20c93b07255c5933fc5efc89ce5b9586fa8cbf9b1d4f2ecc3d210912f2889972 +1192b7d453b04e2ad9f29eb73f13bd0dcfe9d711daaf34d00b8ffbba2e908cc3 +4bd8ff1b7cb3a39614a77e1bb1b84ae23a11093c46ac071d06c985e86057fbea +ea75778719dcd7d37cca87ebf25bd8ccb20b5b06c266b42c0dc64adba591f5ee +a9edfd8e2430d90969b51867e91cecccea0f31d60e5560d91ab6f05c10210e5e +1d7ef450c7192dac196b0aa2ed2b1394510765434b20cbb51e4b3a69e4b478e2 +397b9c1b6c59b15f85b420e86e2b75e6a2aea7385768a65632bb07609f32d36d +bfe5903e8db00d29e6fd3505a212bc1e2b1379ead610e5dc52480390bbe822db +20784167d4f1b9a59fe4609b23fdde4cd698ccfb284323d06d7f6a05c9a060fa +a35c7aad41d94972bdc5e3225c28729897b6e63e220a2341e184e8fc06e2a771 +8e94fec21a250f853d8f5f43b9a2bfa294691acaf7b40673810355bdbb2a1835 +b41ff5671e9bfd83830b41e1c756a1cba26dbf8e3fccf1f29adf07195a044b4d +5ca25736c5e9a59b63dc1f08595fdef56b77192dbab0724df9874c4bdd17f3bc +5fd3a865d9e8e86d6649c7a40fe5480cf46f5f61b51450020bec78d5169ab2f8 +b8b0d7547765c02a48fd6f627c61e021caa8442ad12a0a4115296454dc01c75b +1b0a839168a60ea855d1695075ccd9fe7a2c652de3ddef91b895bf9af7ebccbc +12ea6964d3543f906401a0a96136c995c551907ed536fd2dcf1ba9665a75cd7d +e1220d00c9275e9da284d41fb40582045795a297371f773f5cbf116b3e8a724f +0238b9bb089ed13fa1c34a1118b473d590940a7b1ebdf500ea7b312f4314e096 +1a63bf68389add430b2e6c3c2d79e3c050054187d9c20bfa3f99fb78d168e214 +c2b3dec5a7176110919319a2a9b0c8063481cb92e50c84ce9c3b9a5cc83d9eb6 +f69fc88ca6b49320264d8e7519cada0d9502ca280ea98f7855ddb1c92c5c5b64 +41870d84bdb8b99ef4adc65fcfb7e6481a7b3269f50425fd56c91c818f9371c0 +0f77a59adb9f6b6b1ff891534646397ce957ec8c602461bcf1b9bd928f464800 +83ee8bd173b3c2e66e834af411b535327b460dec719ff49457ed71b2e9766f23 +a2095361c52e6f9e8f8dbe6962c5934a96d67dc46e4f2b624060ab58c15ed8c7 +63e390a864e2e52e28f40bbbf67839ac759eb0b8021721269ad8acdfbbbb61f5 +2a8997a5e10dfdf02134a61953fcb5fccc44f437f717d7f98813a1ca95efa5f6 +f669ae658f1dfdfef467d8169a35e08031b66358cd8219e2d7f4c66f02784ddf +65328f02907f03bd0cfdbc498fb2e52c5959ff74572bfb1477b4cc638ba0ce76 +d6243ea28b7af519c555dbeb7d3e513cb3be28a9d1725aa671b30d24e6f99c45 +523d461803e6bc3b611a5e2b24bfc810cb85c791b5a3860ee67af429d9eb4d63 +cd3d024e7d5d71b1604daa18d00783ea99c4e4c05f7ffc9b23f9f0ef14413b1f +07dc5d5df6aafbf78dd662baa5168bfb5c5f0dcde3c3b4a25a7822cac12fcfde +91d2cc24f0e4b4c3efb081c48fe907e7868c4da13f90f73db8c2855daebdf68b +aa8c7e7a1ff8ec3d7b907ce11e6477a29ccd1756d5442600916c3760f5ee6ee6 +7f601f49e44147f9045d90fa971ad5b98219ed33b52014446eb84f947112a34b +92f330918459337138c6fec78454fad421cb42aab18ce61c24f233a7494b4a98 +6d82bc7e9a194cd954a5755a2e6d11e7ee7b1d0a2f4ee5bb70b3df51ceed514e +249374104f6d342b01133e37db263028f5df2b0d6ccaa8ea3d242b1de7967b8d +1d857792a2cfd54b016e1452ea232096c5a42786e6ea3f1405b610ef6a8e80e5 +7d49bbbe53e1a8e151d183ba0b3bfa139ab1ee34d5cc87a87f4498b6952db92a +51abf38b876fe4d3cf4d33ca543f5c4f2335fc0ecdfde8b5eb1b75a63ff103b6 +3f47080725e3a6e7584a6941b3dc0a0884765c05c1622b1b489ac4a4ef254dd2 +a1e2fe3b31e602c93e834cf96b344da033140a1b45269a0578c195441978d337 +0a1c2f794fd97de98d06a15e297078924f83b45ffcefc7df4bfa318b6b9d8d46 +619d4df47a0d3a51b770bc6962acb8653b51309a98190e24bd891679be436536 +4698e74a0a87360403b8b94d2b4df714bb9a1982804b16f78146188575a1e3d8 +d376865ee2d2a075d157852165f7b8627ae3d88a6de9e62ea257b352917e8363 +31fa898ac630c749d532b8c09a368962a7db1f977b9545e79929f8018ded53f6 +c3534b9c3e52a221063ceff891d9738abde57d9e366e7fd340061339867d1384 +5d75f1442484d1ae2d3492ff72d49c9271677098d2089e820aecd317ebe24c13 +7ad38e4622a36f0765360772fdf994d9dcd1c611a88829a9af1f68731bcd5663 +884bdee10f7a141a05f4c6e3cdcd9cab35f085adb4af67174d186c74fc89c35f +a6e128cb73b5f36476cde7122d8ce151905a285a4108be2a3721cb5c504b695d +a74b3e978bfb395b420efa9bd93ad9e53fa0bf551843f506ba6822ab54a43e30 +ac746dc4680ab7ce8b1346eddab7b5bab6d3a8bbfa7faae67b795815bb3e6dbf +1709b2e34988d891fe288fc545cd903ff8f14de553b05a27c602cb0715115687 +6192d2a23655b146eef7c20a2fa158ae1e5f0a6245ed51ebd3197795f5a9215a +5bfa63f59ca55e020ba785176a691c9ab58f4d31d54f0a175c328ddc5b299710 +747879e81eee3c10c8156eb84f369475ef35a8bacc5214d949ecf42b8a81da05 +ae35a79ed6b7a99781133b695a582f12ba1447213820e555ab7cf65c2deb3388 +1839d8cc5014db7e5eaa93e83ff2b58c19b6cb59e784736916b856447fe069bd +95b875506bddf1041e597c5e6a019fd0cc3aeaf4776a92c42d04b11ea2e41eae +dfe85da6074cf1b253a37b2c7aeaa1b850397a76a1bceeb6b7bf1a91088439db +d6ca65486d026753ab26c03ecc0ae6caee5e5c2c18d2dd4325be2002b55a8eb6 +288e7f766923eda80763ba318569386cea28a762e9c23f91d4fbad8b4a47865e +f8bb520213da10f6c1385fd47597dc3ddeffaa4f383e3c7b542528aec51fbb59 +83550befc000d1a8b9a15d5878e110448ccbefcfada2612b6be89a7f0146fdf8 +9e5740696e4a0cfe8f8e41d854c87cd4cdc1c3e37a549d62e92b276ad5c1b81d +219a2e9d6501a96f1cb47e0b131e46b4d6b38661346f6a814b971c69884ebf35 +5ea220417bbf208e1a4624abb0651c0aca5a530f42d05ff9bb6746797ba204bd +b06cfbb6c2a69de2e4037a7d2dec3b2b2828cabbf8c7fff0d68422b7a142ef41 +f66c16267e6837fd705d485e5805ce409121c737982169774188e040fc799369 +45d5010381c24da366e5e12eefdc0e1a083e6933ebc7face744491aec42322cd +938eaa0513eac09a61643729cafd3d4528dcdcc34701b93d7bd9dc3b0ec43581 +4f42638310d702d782b29846b9e144695522cec5bc7becb1664e517be5e443af +8556c53e36046bd6e724f42bba07bdbb31dd26e970f069ddda8ef3c50db37262 +c1ad235eff3e5c3ab842adecd20c5212af239c6c0b6d245f1d20c18dff220aec +20090126bbcad466aabc38f994f557f68400adcf8688e4d485341cfc8699e570 +27021b098e4ca667b745ea9da810161c6b2c494c829126c951f4f8d1127e968d +7bcd54cbbd9efc94062aaa1ca05d7b838bae677a62e7270f5b7bb03669e0ef87 +e66112e256956ba133accbfd831188f42e74968ae65a452b2a2b19fd94744b77 +98b85e138611432eb2ad9f66815b89b1278e9c5f0e5a1d569d0f43039789090f +0b9530c19383e05e8af71b4e1e22cb90d6562606614ceab8d314191aa34af4fc +1e8c12bb6c0831856aa603fe13ae0d7e4e2794b28a4dd4066fec486b3b3d2164 +785df22efb34e72e3c681167e0d5ff50cf560f907e287a7af13bbfc10997c662 +59941579010b6d8f744a5dbbfb353c65257ab12a4aa94a71ece4d006323a3468 +fd86b1b9ea1c4f8dbb127c278208d497a8c2d8325ed70d5a46e36879ebb4972e +e23ff67b6231baa3f5ee03826a7323a4800bfa00e3cffddbf5013de27c9c3d3a +67fc89c4969e0ac85af92b4eda712ddf1b19db583946416f9c8ccdd4f8df0c5b +05aea257c19d24c6e3d909e16031cc07759c3b2b84c4a471156b19f381d3fee0 +ca8cb1365c300c051e9c04cb0ecc9b4c8460275bfd41622f282019e847e769e4 +bdaecf5f32521b18f81e1eaedf96157c914f0c5a9e8d74b1ae60e0e694456427 +626912e349d65d9de1f08f8d2180bbc41d875bbda9b4b93bd5202c08ad851c7a +2535202e15d2cbd367774e54f257d7d30ab969897dc72d732f6ed3b14af2c501 +f964f3cabd2a1e4e19840a906952e173840dd06834f59f68728ca654736f307f +a50aed9d6883a92e72e3de61b57f944ba92eef32754a631c93088d6a1ef0e3fd +f4e3a39ee7db63e6fcf48f46d7e1f66c1d18de9fd147f535eca9b875f700a7f7 +f23c116e13b5230b0da1b60652c0e4860b22e53077fe76ca62343dc59f04a4ce +e43a6f553b75afacda6951f89c85547fc2a6682bf40df26ba59d419e0438df38 +17a9a5ddc0c44db6403a7e7b63cdd365d42843ec108dc411b0f975c4cc935230 +0bea4be2a54342f1e65481745d232e1d1f7b73508a028058a6bd8139509a9f4a +0771ec2d74907c5e74f0e2819ddca11759f51b01140dcc39c56047557ff8fcc0 +e470c04e945658bf8242304be2cc4abca92dbd8b92b9c681280722895583014f +e8e28294004f6aa61a0e0d1131786e2f8be830075bb9ed3aae967c1a4c114a79 +7570fa1e604576f78eb3742de07ccda21e0eb53502a8baac856a7c7404fa11fa +32922d4f6774102b716eb5ef3a79623aa1c71f1b74e967302d366a37bbb53a4f +b61915f7c6111e8da1b1c2f23e014f497042457e2a1634132f7db1af349c1245 +877cbedb7f2b7b68b71c9755a1b4682b82556100c6c200cf448960f540727fe2 +79e42d0b067eb08a5281fb3006773ad55bb6145f85e2fa03738a2d2a4ce194eb +4079bf0708dd5eb6f6a4b8cac5e7cd844691f3b61b6ae03713ee31424fe617ce +f33560c9eacfc0eb934a0b9e8da48c3cdd87bbb059c443bece1d2c319dd2185f +739a0f4037088cbf73cba079380d93ccb4f68a486cd8ae447a289e7ab36f7593 +5edd8b309a56b859aeb6d1d70044bd487d69bef1693d1abe6a73194c7090e581 +f2a5c176852e2791eeb20ba8c8d67f60cd8722e166950aa67a52b71670bb0684 +1f12548521938f2debfa604c977315285800e03f95e561359c8c7434a272b898 +9d8e73663947375365be7b89a69329a65ea79d191e6a366edbfad19d2c7dffbc +4b76cdae831c1675cf7c49e48616f60e9ad33e59d3dab78564342bf6f31c42f6 +d0862e077f64d8ccc71979e7d4f994ae78637d3e6ab542f107d2cee064b4a907 +024663888f94b5c951e0efc1686e1610ae0dd48e7602adb730412cfdf7805546 +52f8db589bf326cf52fd1159e3192b47af5f78f2f662dcd91d1c9ddd928258f1 +a222947ba6b648ba9d4d69457564eda65c16ca38897a6895ff7d5476b99c2aab +ed48722f135b8d242d0a6f2b0fa5f7ab9f4617fffd04c80313055780a018dac1 +d3ef6c174947733f72984de36c345de17e905730ae1a5cb4f1480ef080d6c0ea +9a45750c0bfe85d629c557c45a0cf4f69992053c180d8c6abe2c98982fc9a8eb +1cb66e62816bbe8a2426de54a18bd56dba4aa6bcbe7a56c529a7ded94664ac3d +00475f444cc2c6637d106cda219903b0aec3b1abfdc3486ac23e0f006c118946 +e3596e7089f0666a52904cc93abcb404cc814a8f51617f4fb1b996a21c7ef64a +1ff36e07a36bcca33d422e445a4745308123771425e9c135263483f81d23a747 +f31b476c363736edd3ce99d2015e0ebc3726aef8efa47366d1da23b9eafd5d55 +9f6d3ee7601a4d1b33db683a6a389bebd34eb70e75cf8e2f3053f72af3e13ee5 +d75af8668853d0c2d0328ae661a6e633b85883d4319e4ccd760ce433b8d75ea7 +b1d3610c686b7920f25f34e402f9fd190806c2ad2087dc79ca7552313725eba7 +3c006e3594c2216e622c080c9a3256d3f9c51aaeeeb706c598d9de0d72f251d1 +b3179321488965afa9b45c05e51dc8a359e2fb975299a2390ff09774e32e6b24 +51e1edfa6c4ccd8612b5770abe7cf0e143067309741b0c0fca9147eb142a387a +b669cfd8ff7c8dbbabb03e6d1a966d4f8e040b906218d674736acb6c3179a62e +5fc7a99f82bc88a1ef675ecddb727ec390a772662d84969c6c0f90f2699ca4cf +43caab51b7b201262aa9a08ca5b35cfde7780a65f2ccd07f84519c86a5dd183c +a0308b1824e86bb33915ed55115dbb62a9d35cc296e51b8048fdd30c691249bc +ae3846955b9cf714f0b46dec5b0f8151d12e1c7bdda76a3ae26adce9d6cc5e13 +0797de7f205a383356813e69608c9064e961b171012cd9d145297a327467609f +4a692251e89d3e04b41912095b3e87212617cfaed3e99032ea13dc99bcc391f3 +3a1bb27cde6cc583abddb79f3d59afcd1b58d22beb67a649ef79dbde6402f5a4 +49e9893171d273d9989288ca8085b7db54fb4dae43e86587b8c51b313afd5fa1 +f7fedd4e19192d8824a5ae07a399980891accaa497e1c2a1686476225ac9fb86 +6a4dcbc5eef0d44a5eb1e58245863989c5fff874ed079a6cc80f6358e1d298f0 +eeba3c1a69689d7f57413e19db6606ef97ac6b6662018be29d0f3fd3312d481c +048a729274e40c711e428f8a6be3903267c0e0902b961c0ff73e1a66226a5cac +d84194c6e5f40c9bad5cd6065814571474ee832b08d301ab27fff828b31e1705 +f2c114d315353f246800f998309930a33131823cec8eb2c6e759585b6726c819 +6d8920eb9a742fcb3da6c6fd7f17094e18958c811974911ede1aabddc869bba7 +b2eb3c7d00860b3d448e5b02f5f80f952ea7edaf0dbf6f3367fe926d5b9977a0 +acdcd3b63a44eebbee55f1f361c35e5d76a8c0a73a19137b8214b67c738bef38 +b1ac102b78ca868e9bb39124e802388fa4251e6434a22dc623beeed278bec2ef +19fba386eab8ec9ce42854ee306cde29a4f479e27443939695cb658fa537a137 +7adf79151765a3f36852390923af688ab76cef442141d2f424bb9fd71bc7f8fc +69d4fa4046f5aaf5d8d6cbce167a45a0b06eae0236dec1089c3a0aeaa50aac45 +2cc373c3eafae1455555daf87d9136635234f4cac174d9eb43618fde837bb583 +11e3c81285e2042420c6bc903e0461dd6ab582803a1f9dff6b7e70368f079c5f +0217bedaa3bc0d30cd9551c917a7f2411ffaceff55d84328a8ad9658636b60d0 +4f6b9e8acfd4b7aad559fb250e5a0b7e2ce08d72450e57f13b8029a0c27e80bc +39cad6785af23bf8fb22aa90be6e76b188d28c55e469eabc3a40fe020735bf38 +4062e7bba24869da636a15f7d319af99502d5a2d9ba13a047743d22e6a8cbe9a +79080071874ddfce107627012d1dc74fea86b2869ba18aed097f699aaf157c51 +a6f78a2ee07cf308467014a1292da262f87d1728b36b8c0dcea58855f2fbd004 +e46f277e9cf3450874fa0dcac1af789106dc86b38b91a3346e62d929c5f411b5 +0794d546cd59c278bcef21457de542c45fe5e93a8f75e09a44dec135a1d0d70a +2b700b121c945dc718efa967e06685a04cfaa809a7f9df0def20d2511045ec25 +cdcba7fd222c9c0af479e29e0d2f4a558ac566ed62272729395dbba68f6ad2ab +2260a4a59f266bd561780821c6a5a37be204c6c6363de3b27789f153bcb6301c +3796d911d56129bd367905fcd02938dfd5b6859a147b194d6b44c2c91aa0988d +3d082fcef8ad9219b7108005baafec1709b87d1e3688e6dd0a1ac6c4f0182b84 +bc716ff723f06a215f8dcf9f8e765d2b686add8d98f96b0646b66a14a37df495 +90edd201e6ac6efb4e1161ea0e044cea1900357a7fc5b29d2dba677c82d0f6cf +8e49b55c76c072c84c214cfb35be267315df5caf43fcb659a1e50e509a837dbe +20077349085f594154033bf38c7d7ce397b9d90af20188909dd5d8f645ee4e45 +f3dc8b7478315c6b2a17cc85852044fea2f7aaa599f2347609eb342f063f8d9d +e9c05023e5fcab2cd6bb16ab0073aba42eb42b9d7008a63f40acbd66e9f3273c +cf75770b9e232bd48cc0734182ebeb91863035e2660c3f5184ab26c5f6ed255d +c0f5099c0c8b774a6e0bee0b52aa599347cba6eaaba032ccd8d011361c460eec +fee0f5a7e277ebb5374cb028cd49b1662a760ef55be55fd89da6c83676f17d9f +073b9f619521981a817b0859b83c346b106de80d22b28e87ebdabc1e840447f9 +1e02c0176335040a45be102813bd055208acec82ced08a6afa7279b44182aa2d +e91750decb777c28772c13823d8c0db7b9aa74add0ff4b4361223348b4416871 +405f369c8a8a50cb0c0d2b07653c5c91670277cc6252be0ef1706848bf4e0405 +e2caa308d7af3b223c8b072e94cae50dfe544e514ba9657cf9618d37c6e8cc87 +1232cadbcf4be10ef954b4a1555fcdf5bcaae70d126c0158c553fea6b6a01649 +e3dce3165757ae3b018b02f9b4ba7e0e421c69ea2bace8b0856d3587b8d6586f +fd900afb0439d2b1fdb1bd25be56ea6b18b3d94e33f57190abc3f0f0f27a2164 +a05adb02550db2eb477633689929daffc8c6890fd2f6719d194bfa716c92c18c +e6741c1345d79c463fa491f46293ed414047c572f41f950ea572283191b8e899 +ec2e0dc4b57f559e0fbc17afa55ad3858844abde11215567885017df804ec931 +b29a4c238479c29be7b79bd7875e88bc0d8ff1bbe676c54ae0b9955b081536a1 +15e600ada957868cd8f2bd9a0a6f8bb22f618d0654171bf1691140a7b272440f +0bb053b85fa8c2884dd52cff42a4557415596435eb149f7e090e2361ba8c415f +e30184ab1ee08ad6db7b991eea221a2ffe27cec1de54108a42d4c53b606e0a0f +9e3124889f6fdffae5d3e3fa42660e6f187a0b71617434f6526720fb4a1aef38 +d3240de78471bd300337b5f1e5db0346af6a0912702b869a6e7f3c7991007eb9 +a4d33b8300b494c9524bd58e397cf0cc3365eee88ec2b739835e5245a58bfc3a +89488a5029faf359318aebc60c24bc204639a0d6234f9bc96b3c08cf34a1f701 +5d0504b4b850474bd73b7984d0a1a88b6ee896c3f2c0921eb242c8d7020d8c3c +302c5ee1f9edbfd469e4d0a7ecb004a785aa6b3c21e4eb4c392446250e1d8418 +6ac57e583c2c3a92e24dc2aa207048aefa1968361896c96b06b9f92c989def6e +58621ae6fbc029d8238d9bb527a7a7585f699f848002eef23e0d5b09df035f87 +56dfe93709b62f350a13f11e0554ac04c545d18be2c3ef5df730c845527f8dde +fde5ff9e37266a18f5678a45c31152006c3c10aa85daea11635dd3e26c6ed594 +76fc0e596569be8e64763d21043e91324bdf87a7436074c14fab0d0ba1bd382d +b927e3aefc75b6a8c39842818e748e7b4910de56363afd2bc307693888f5c174 +880d2899752e7c49912ac47fddc7b1436c3217e9ea078ccf5d85fc971a4c5d10 +78ddbbaefa16df71de3374f6a8e616c18762851753acbf6a9b678914ae586de3 +edecf6486405b7081807f588c6458fd7ccdee867e12f0429aa18d6636e614c18 +048fc66b92b77260d655e22ed66d22b7a35a62e14c3e0094cc982f4f2b84dea1 +dbe13019d030d5fb1611c8e608b827c2a2011ed4c602f15d54ca5e3c7619f793 +0b45208f7e3180cb440c44fd3e0b8459be91b3412d27f245804262e3bbbca769 +1639b6ecbdc11e6a0bc62c9cab831b76d9739971df24e500467508075179289d +8363ae2b87b07dbcaf3370df82d550e6d43c522f6abe3e8222ac36aa472263db +312cb4b9c7157de548bf65e29f91a3832745dc45ae39e47df754bb83b1c4c5ee +0c749f8f0a4354826122ef7127ab97039d72d772c4da722b5de13325492341e5 +35ec52b43d945dea09292bcb033960d31b315a5621b706db56c41c4013a8bdcb +e79fc245136d6e444e22e5d3adf662939b5353f999033e25826d2574a3174dc1 +340d9d8af3c09ff878a7b20976d9a3465c23aece9ebc9cf65b163880859809b8 +eadf3c04a54b54ad096dad878450a7f43e580ad20bc7962c27019869c995be3f +b65e4bb2f468b00709cd876d0ed5d4e5a9296218a3d76c85cf8101f7c33f2334 +baefd8e82d2bb49cf75368fb2f25eb1d3c72467772442fe6c33f6ffa8665ff57 +0861ceb96bca77630d86e6ee517b0cd170c845f68b2ff3728d5eb2517fb01138 +db53c283519c0b7024179c5f5cd898df6600c736cd8e1a6ba13f361167342f70 +63f2388f7cfcdd6086349974fa4bf819ef4fe017a3af30fbd304ee505a94a4de +c59e6d8481e6628d7434aecb3916616d1a25144a7951823327a495b1d274364c +306d6e895f29406148973d855dec364db897f73552c96896aa3723bdd88149a6 +1308e36baae7b562fcc3c96a137e6e4275f3c7a5bbc5e1a8b8808a2aa3d53fda +4822c6d8092a14dfe3daec1e36f8afdd7ccd52fe8816e4f32322882c88b2540c +417932c1731aae76206a49eda4d86c73649b89f24dd4b676ac8d339851bf55d1 +1b5ad1427a5e6cc49dc619d68582b3088a4b026b5b42a0d880320588ced18fa1 +8154985fe2b415c06d38222aae0df0ab1fdb2e28e47d5337ed3c3cac116c4647 +26bd2c26fe7ac37fad6f347c948c107234133b738110a7d97a182ec723e6cf11 +6092986a4f64c7773826de9c28cd38da6ab95c8f373d1c86c9621008a193c50f +65ddc1904c177fe925e9bd59bcfec4186dabbd8b6bd8d7e7731599d27df3c4fa +00eb1341f78c78b49ed315fc6e1d48ddb34d51538b9d5ea2e563f038f6864a09 +45169a688f735050b6e8c6cbc7f224c837fbe8c855b51673dc948544e8d310f1 +65606deacde7759b159e68ada02168d6689ccc22c73bb9606ba8b8aee5407df2 +895c1adc6e9012aa0345e6a7d249f682d31c4f97fc687a61eb03c931562d78b9 +47858b1fbd76217e9361b5a6164f026d5adbd3b613d7818e5727333937446148 +02e2f4de1c6c78d8ceb8862f87fe465d838c8d7d102ac748b470e8e4e48e09d2 +72dbd487fa6b5a8b8194bf07f46e2626df6ec8f95d4d2ffe63daa9b21da48ab1 +114ff92e1cf246cddad9876237e8f8102f32cb607dbee9107f996ae68790c6f4 +91255b280982fa5653cb21d55acdbcd30c654600a80ac0a628808fb1ce588e25 +c34d3942f5b73640832eef6bcf1044db5450da2e2d25014e105b717d4acc6444 +ad3a9af4b85fdad1ed2f46e105d9e2f0c28d660de11ff92b7ab129d919b69fa6 +9a4fa2e74782888d4722afe991124d2840a960f19c26873eb78e725cfa882d92 +fbafd61318a74279ca3c6dc3eb5346329508f584f83e89fdcae38432950bbeb5 +fe5385916df4207485d60c4283f374e6c7bb73a53e6d9fc69bdfa9daddba2f17 +e896558cd716a4e782f6e37a28d0ae2c0394fa1f8f596a0a8cd0b7335d28bcca +3ee0ac311d8770fa17ce4f06d861a5590310b96d1b4c8eb0c71effa35bd54851 +29622fd5ad12c03a45cd57b66c2e1967183e589c5aed8915df37f762f921e508 +f4d73a57b803fc0c7ed1f94972df6fa2ca80ccc16a5bcd5eacb8cc2b625055e1 +fd63111b3037ab101aad1f3cb53f96ab074ce9d424f2ccae45f3250f87dedbb3 +a5fb67f95ec318e6a872bf789d2c9593c6e78170bc4469b5221d60417e3fd413 +89cec6950e60c748d9bab05085af4f5ff234c3bdd713d4a8147c7ff7a9f94c76 +212a0a6cc556812ea7421987421cb3068d0182041726e8b3529959f65f7af266 +f825337bf904a5453f18923aac2ff73e96232faa1377d4adedb57802a4bc02b4 +38f3a39a6d7c7a4ba9ba76dee39524431e385445657a46d4dfc7659bd4748545 +ebd104e0141823ad469cfbfd89abf9d38f0f84dca44deae04f36a1f5fa772c8a +16a048fb533ed5b429892e0c5197ff0e31f25e6dfdee72a2d2cf95d154680c71 +4fd10e86b0e86cb1d7658199ff5a3bf7b86d42d863a5a7fe871c30ce2f7070a4 +c9bfe650e6e19aaa6e8974c92c5da1323739620edef18b293fe5bc1cc4c39cee +134510792a8a4b98499c339f9c3745f3530446571470642f6cc19f4d5b2d9f0c +b270b61cd389b54b33555910c6736b0e3ae6e7be9b7f6d228f2fe47237ba5c47 +515c32b00a267a157ea9738730587e96850617ca3ad37d9cb7ae5082eca1f440 +25cf735a1fb6d5111e23d171de727ee4f4e67490d9fa0f34a87608a6f7ea368d +041f5b12fcd361cfb7771bd22136ecae8b5b14624e969f1b4ee4c228cfec9394 +5430b10eb1f7f3d4feb3e526461f06d11d2d36abc2173285933733dfa2a86196 +3989fdb1a4eb6260a2e5e18011714498d75ab6dc0100bb8b231249b310443ac6 +118e22878da09cb66d8dfbd74ddc43491c4a38a7a0b89bc64c27dbc49ce27337 +29fdc15fc58408394fad57dbb5abf0e9d65d80fa3b6ca2916db319714aeb9ceb +6b3ed3196cbd6da86a097184d82454a5b6ae89f6ba41892659528b28afa3db38 +40f2df5c3616f75aa3a8b3ced0a0439ceba0447c0ac96171e81c13d54881aa85 +14ea46b4c75e7dd6397ab70ac9c610d3710ad5fb651b88a7d0b2dbbe6417592b +5bf07bac997caa204bfcac158a06a3ae1f68e8127ca24857f9097fc4e3591a57 +b605fca6114c39a0a8efcfbf2161eba06d98dcbc9a91bd96250776e720be87c8 +23d18464feae6d6e1c253583bb4dba68a83b8f1b7919326355678fd7088fe8ce +f26146934573b5e235f757024ad22dedf52a0d2af5fb8796360b16be88fbf501 +19bf07500c266d619616cac3f57c286cb4b2f59268160cdcdba26d70d4f5825b +0c5bed25c667cb0484c7ff619839598384490a672afee859144d10df808c6d0f +b959d2251e0e201a76c0ffd5cf12c9f7c1af7f656123a65b8b741f72489ee9aa +b83182e5efd72fc771fad967090f5feb4eadda873e9b0dae04371df7f8f9be61 +3dc692ac3522a73f22ecd2f81f59e20193f1ff7c2bad20bc72be6778c826df64 +3b7905bc7d6c20a8c1ebec301621feeade6270e8edb10b00cc9a6467ce214bf6 +75ef8a8a38d9b24881297f6c67a5300379ef1cfeeaba9ab6ddcb0ba17fa094d8 +e75d88e1d128078dd518acc2919a0917e88a7b5fc0e39b2d9f65f1c0a05b9cf0 +5d49411be272423f95c1b4ce9b8207c19c0f53d7550e37364e23ecd18f61211e +2e700620ac46b9e396e73aaa8fedae9a0f4c810211e37bb5c469ea6c15097206 +cb0d46b3ec7117ae4568c4f851daf26e41dfc96df531e47a745c03ee489fba5e +60c467c28ddc15e78d05646f88113705950a826b38bb83095aa1e5287622fbe8 +33193ab93310bfff2ef712fbf9c8e7a19c8647a0fcef86ebe509240a5018e606 +a900ad3c343fe9c1d91c73d838eb21eff168684c1677859b169a2b16a3157ba8 +e880e9c7e6f5430dccee39c988dab0c538d209cb52cea09ed13e35064487c58f +1fa3c616e3431e90cd910ef126adc890a18d87ba3217074d358d779665d3f6cc +c020277d8c67d3ce4a87f0700ca100d82d933b23d90a261f1abbd92ebe24e5c1 +8423d79e362d6c9d33146405eccdc32d76d166c127b11bb91d66ccdf84d232eb +16a2cb1649f28bc113f79643aeec645000b4544bfd9173bff12325fdf2b8cb40 +56de45c8bf066bb93e7fa051aa31feb1b7abf81232d9069b315a0ba4cb496474 +5de16e331878eac6285964b0d331b04dd78fdb2d14a3a10f47a6103c20e2e3d1 +a4882c8a58da590e191652a2258e67dcce1ee6388d0f1e1b13a8a8a7d1b0cf9d +7174ea67957c73bf9f84ded6f1fed3977a56a89db36dc153279e4d5d03fa0263 +1c7ffaa2800be662cb6f1ee15138c5e4b69dfcff143bb1f401a9a9aef061a295 +5ad3b34c99cbe4ebe7f73b19eed49e0e90176ffa0bb10d31c31a7ef51fa051d5 +cb76bf8cdfa7a3d33334289c660dd703756a8876c0d1cc2c78e1ac56b9c8b81e +4282c591f5f295fae05de320941a3390d06db5f53eda9b830b05799030a3ba1f +cb027f5b94218f0727e8a299fd663c169a80618582532e8ef0c73fe3b5c2ae40 +51d04a4b98e119d219a5e0a82281f9364f660c925ab087b7d7517333280b1b0d +93c7a007596bbb71e5476d81982f959402e09b8a795cf9cda1b3cf3d76400243 +d17962696fdb9152d67d6a42819f97268e2cd0b39ee76a776c65bca9034e2fa6 +1f261e2eaa96a7b2bf46386fe89e216a620b77d9ccae056501aa3f88e86cb2f7 +2c4aa92d3c1ae78f00e41a54c1fc2d56dd41f013f877116d4b7f3becf092f430 +c2e94903f71bc19d35bb7a6c5571f99671e726ed2a921e385451e57ae196d76b +98d0a249a8e4149860684130f03e30d791936c71c30302ee138bf812c180e24f +01f581e20c69d5dfac0a4111159d1807fac055d4beb671088e0d0257226f2aa6 +4400c0a19d7c87aa291c96249fdddec9e3b9254a6eb1bcda654d5a93545db556 +74565c574a06d680ee738a0c0bf32a0cc0d106fea5a03e9a1ebef20b0f275b1f +ef3c09d06586e326b614e51cd6389d83572b97903f825bdbe715c8316e184afd +d9fa82b317071e82238279751a39970f1684c112ba56c94ad54295cf18040bae +8d38db9f977ae38a1e9d707912064a2759ada5a089bcffd80d53b369910fa03c +39610a4976383d28dc205be1488fa5038e3d88e74bd4b449dd056ccb8fefac7b +73b4c70d3e87adf2f634ede14bfb68a95f61607d7607f86fe036d2af453e7689 +24a0e37f80c06ecbc3d1944a87f3de2e2ecfc43fb6d58b64112c88406dcf233f +297a8b6e2d1fb179c3ecd4f4941cec4342db18587fe5896385aa4dc774c60185 +b8a044bb1f5274d15d1318d69ca6e6eb0fd9edcdaf1bfcbc28f04e6937f6c2fe +fe40874dd16f9e094da9400b86ef9d7eff5bcb45312aee92ad365ce12101cdcc +5d06ea375ce1bb0407fa13790f76f2168ee27275541fe37f9187fff8f78fc40c +49d783f861c71dcc6697d191018430908801082acab2ce3ba72dc2721465a4f4 +3ae09ab1294f3619bde6a169595ba44948e6e34299bcb3f10bba07988a1165eb +497a7ca04681e91e6f0a21bfa71253a675176fa54c073acb013e5ad7306d111e +69a89a63c8d52baddf165abab80776007ec9d2e66c9207245b6cfbd81346b5e8 +7c5e70a526e02574b6278ae19a51f1a1b8710cd51677520fe7beb07ab98463db +5f2e815e0a874b5f21a44693212fdd00067c8ceae20c5a3f0a8752e9520d5f44 +29cfb29e85822084cd5d5e850194a2a42e21c8f2e6535d34b18f87ac0853ae87 +852432b3208304e7c1d39ad5568e43b54cbd03a46c2421834b24df2dfeef0631 +24f03938712dff0107d4e739ea99a0cc5f886df2846cbacf560daa651ee5d2b3 +f7f466833f04cdf75f79fa96dd3df48861b78103a67ed08649803b48abb608a8 +cff047aa281209f5a78be7c6b94e52f9ebe9f60659c81e30355378c11d51f917 +77cd7a382fd2bbc019b297bc1d33f196c8881a799eb5e7f8fbdf4bdbccbd8102 +d288be436309f1372a3a1f3af7b331aced20f220ecf483e309136670b1d69b2c +73a42be3a725ef4c590cc41826ae979af67b896f33308325309229493307993a +6045591e745ed60260073cabe0ec93d4e5c13a471393c60aafb9ba964df167d6 +2e3a9695d24ece61c64743e97ce1b6be2826b3f63b72181bdd0c86db8898258b +e58507072200aba56606ce30adec943f2a7d5332c0b3c0bd27729a5ae924ea7c +9be45d23a01716bf125c4dbc4c5ddc2af9a7bedc6697e64bb6e745ad3ba5cfc0 +690cffab90cdab034b23d2292caa9abdde41f44c71b73da7a926643b20bf9b77 +c3af5886db2ea27804871896a50df1849df81dc4e113c85fc84734502a414ba3 +c5e19e5450c10716ae4b72f6a1990f2ecc538a17d72f64c62e132ba6d4511496 +ffd2da49cf940b9968a7c0279bc2d8ba3ec7c5526d7f20b2f0070f9841ec6f8e +c1a74caee0405ca2ad4fd7aa3f2a99a0646a0e7a990b278a7f73f1fcbd6b59ab +bf3d3dab71ad5b004017e0b001e39de4a3006da2b31145adf8c321452c105231 +ffc559a36ebd7b3791a0f0294ab7a8693beb2982615d54fca7f621709633354e +df121f13b5f1a9d9105eee57a602ae0e094cd3b9262e0ad6e063e71a29b6365c +f68300e86739833e3f3a671c584f0b413a161c9a4bc3756141f83cc8a920630a +c8d0e1eb2e1d77f86e9cef571d3f20a4ea8f57e214086c6f70e7f7fc8cf23db0 +fc3440f64015425f92aad7bcd6bb566d59e24906856ebbb7ae83dab676eb9162 +2a13cf8c329571bbbd03c5e93430ce68290c4a62e62bd024adbc41eb00f51c0a +9812b9cca859a0c0be41642aa903259911b8ba082b21a896513a9960a6975d5e +f33ae5bea188b97139809303e2194dbdc8388b7079e12c61d370bd9a7f14a80d +0c08cc6ab1d9881c4e79262939e49065a4d7ccf032e731e7cbe27ec358af53ac +41a8882751ceae07c3240f310385f2c0786a1b26d717d18f0916fc8bce2832e1 +9be9d0f23b989ffeb6051c23dfa145296e425dcf1265eb45a728774eca9d55eb +056c6f39e7e6f0688d7aa9913e3283a31638e3adf7d416c65ca7c4e80f51663a +61d1c00dfa93caa9e2b678b0bfbaca46411e8e7f90ee3251dce2f054e9fc403b +91821e5372e47b6f4cc257a337be0abba7b9ba44621387868348e69dee099840 +d696d31e61f34be0650e513fee046e54c4268b7bbd9e9ee475eaa54ed0476d68 +cfcc1485ebb5d22e6d55dea90f5793e4cd2c047861d82b8c5dcbcdfdd8062c2b +5d648bff94b6b5021a081c9df00979b2a1c7f643beb3819427928dff9c70f3fe +1b1a10fb743e6adb28b4ed362bcb719bea93ae066a4be81267811021bdafa7a3 +3132347f236b90fffc2e52fa9dac23dc9991a52afca196c5aebabb0720b76748 +5b67b8e9c79789ae9686379f6ca268859ccdeb4afa4896f0228f7d6eee64faa8 +e2fcd2a71a7a7e11b0eca9dcd8879c0f0b2ec15a10e6e22a27b99d3309df5d89 +ff2ec8cd62f48627d8aa6e0a6f170e9689cc19c03361b3802309e7695cd4a692 +bda44f5b2f67ad3a7e87ddb35e01f41e2b8a32f724176d39e7a6ba5036c02f37 +f3ab9659b438b1cfef827d56ce6f2c3119e7e1bc925df420b0264b0b433fda04 +f9c21f9e8a4e7a54b034f4785fd7af492a894f6d2ead7f10cb65d2ae7858dd67 +fc3b4f410d4da76d11f9ca2a4bc96d0bd0ab500083890f684f8dce5c13cb8ddd +86e4eb5010f503e338becfa9bcc1416eb6edb230cec48e9fc9125fb6023dfacf +879ac524cb765f632c2bf1f68eee98ff50396d16b83a6b7b9fd40594ba7270b1 +243a2bdaa4eb81ac86ce42aa5ccc7c37bcce6c5b678795a8d29ad1c053151b96 +bacba9b340f939e70970aa7e218dbac77e0e3887f5f59d02e6a0ee39212a2e60 +269bc701e21bda02aef6f88c5ca5bb859ff6933e93c08f59913def5bc4685e34 +cfd8365e5ae19668d857f3a439367defd21709a97876c67ee1ab58219262f016 +113521256fc729c33e2b1daaebb77f4a0c29f942d1dc060ae58a2b97cb5d5007 +3e68b8d82f872be908f5709f0916f17574bc03d3071913a3cf6cc44c8ea7dba4 +33afa2ae39bac47122293a6a9a6cf06abf1aa46a596a8f10d1e272e6dc38f511 +16261d8101d7b25d7a18bad19508e4d405cdb447a571b27d1718e38006fbe4d6 +1f8bdca83bce164cd0c1de477dd6982bff43c8de153a28742c4ade12decd19e6 +7ed9295d4ce93b3ae91868de9f1892100511c555bb0a017c52e9f5ab58fabd5f +df19c089bd7cecb8a294d7ca32273be11b91fe3912ae6a7984bd94aad94f07d3 +9e8b1bbd619f8a72c19f4e0c1e9734bb19088825757f70c20682a213c8c8ed2d +09125361eb2751408875255e562a132b8410a7eaa716679a3cc1caca51a74c07 +b90710873414ee149774681bef6760d0767591e2e45c68a4004285386abdd527 +c2a68832f3c5c05dbc5b9afe248f1e98e27f3ee8757be4d32a5c2824bb58c0b2 +3936eb4c7b3b736c21644b95bd008164d071f5ebd622da383d4eed6f63896eb5 +a72f8115d005c86fa9a5278a8e8b7289f1e1f06497065d64806258a8f65816cf +c2e32fcbab40ea158114b91825e55817efaa69f4438528333309bb8040175fca +cfaf8fc8e35ed3faf40fa871a761df4f638ac20950a0a9ce9bd692a536b78403 +db037a7188e255e59227dbc7b786139cac0217b7bf14801b683f14bd248c4769 +681e7e8a6dea869df0ce9c572213d2f1e42382eaee1683016a8e6e873081b6a0 +739b2490213ed3ab4b8bfd50f5a6cb1ff32a1903d9ca2278e970f8eb61fa132e +566d61a77cff264a76b061a81235e20154c319eefb8c37b33c264466fd6f3b8f +225dae93ac7faa6405afb2a76c3cdae0e00b1fd94fa4df003b5dae9a17ed5a7f +756b2be16ac37f41d2e269cbd44865ab75dd333c69208b8d8abe139acbe2e36c +a898dc8944a8476a0deedd6a9bf0898fb36fcd4373f7a55ef3294129badf8c40 +d4da9ed04f8462850692687234cb23e6217d9ef668513def4fd18e56df5f1b62 +a7d40d05922871a0746cf591a0947fc6e6e3115799df0dd212e8e262c28258db +01f4c9b58d8dfad0ed86eca8413383adbf2cf144ad7486f9c2bf2b2e762af039 +6901b11bd00438210bef1d76c297aa2add7be2569c82add283a0a0d4da813db0 +540d491826fbfc46a8bd3aa7f3036564736a7c913950d4504e5be8e3895bb217 +c5993b4bc2dc9cc7bfd8670753bcfbe8c326916dfe6a2f2bca016b533d510b97 +fbde24bbe92c62ff330c54cd06011c0e9bbeea350cedcad12a7b027f9c048148 +9912ab2cb1b6e373fae57baaca6b59fca15bd62837b4530dc6f375e20e3fb3a1 +5fb1d50ec657dac9769addbebfa66f313a775c653c049de9b7457296d2230c78 +841340614adf194a431c1eca8fabb0b848d5b81dbaa298e6707eac1be3a72114 +a5db156e2eb3a4170ffee4bccbd1ec57c5b388421fc901b52cae0dddc539154e +e27b3a1794982d7eb48a305e65ed6968833baeb45998d3388bf08d178f096088 +5a9abaaa40f97318d9282d1caa5a4b51c93eb23a0963245a95e755ff68e26c01 +259614f95782028825efd018cdea17b073888159950ded21de9722b62f7b0158 +50de7655570638d61246dfa8c8d2c31458945b7ce51a4f297072118155bc8fe8 +8654b963136c63ec92bf1c5593494861d39eac12e9f350d1abf8bf561d9f5774 +b90a465cbd8cea4b9c8eae3a040c1f3f543a413b96ef1259915bb6f67bd7881f +1995c20eb38a136f843ddb79d8232f7e83c76ae4abb64ddd7cb9bbfe0eef580d +dd67963add4e826ad92ed63b15bf34b35f07dd9e200876836f39bb8e3ebec1d6 +eb359096d22133d50861b72bbcc3a3772541ef51939351b071b651e448cd6aed +88c6a881ee10eb1e662adec5566d5f8460421e1e4b054c817d45127a3f31f6ff +43fbfebf51d83a24ca4edbc332a2dc2510d760b07126be876ab437df8437256e +fa7d962c53900811ddf38017895f289a1589489a3aee9d282b12f00ec0323241 +04c597a29b3cb32e6f1e640927ec84e8608a1aa9f66a79a2d15b4e614ef74ff4 +baec6340295c070f7fab222e23071eeea8522043223a41a7ad1e461dd1a604e2 +24d87b750762e612935b4a774ebc4f5c9b724856061640c19c2dcc49614a296c +0e9c6bc3b30863ebd0e4f489b390c6a42591923f6a6aae30280a3141fff79647 +ff869a250f5ba7683464366c742dadbfcb45db279a75526192acc36fafca46fa +5a227e303aa0dc87e9a94d8c17717e2e0de7ecfbb997565733fc87c766d14c6c +ac00d2c012b8458d18858cf928e8b3b7d166b772b8bfbf40fcf58019de6e37ee +edb2ffdc0810a2692683bee41082af0ba522d2f0d1af9d32f464304f9ed2e2a5 +41043c778e6254ebc5ac444e6499346a9f7986dec944eeb0564c4e0fd9fb146c +d08df585c04335928d4269138948d3eccb80ed77780aa51236fa16899dfbcae9 +879a47ae6b15ae2d76928d83da02399a6cbc77b8968bf97c76cba4d0c789195d +413cde9fca5728e2c0b0de83ce1357876d05d52bbe8b576b713ecc05bd9827e9 +0769d7f06c492c15dd961583e35b1b360bcfcd2e73a09c9f086c3f16fe333a5a +bd6a9160f6bf92c68d2c4c546108d8995b46c514b8bd30baa37e2c657bc48cae +a2bffad5beffc8c59c5d1436da72b4a288bfcfd34af36f43f788d8750c0bdf67 +d4b2e3aed208d5c32271a04c00f0b4630ae3fdee87edf78734465ccaf711ace2 +caeef867d5657d7d853ba59c1319af1c0ae3eac1be7c456ff263a7071fc4039e +d5498c99345a338b272d912a54aefe9c548a24cd88ce227d65d8d243e430cb1f +8a4077c688383cc66fe0929a765ee67c608263b5e8e2e7a74a3493f83c877c89 +128784387d8a2e3670ae3eac24a7f0fa089dee1b5921693a2838cb36a54b1988 +d61083aeea4c07af691098979d33c67614347af8a915793bd0bacdc24c093c2c +7610b5000200ee5e8d16be72c0dd44ca31dd12326b833000ff233dc46b590556 +2c99d8bd10063fc010ab0bbfc6e64a2bda763b93c5ae33188038faeb01366bf2 +ce0610a296bc4a7239b8f66b6b0a947ee488a6b4d8a6f94d08eeddab0ddf45d8 +f8d6d04e7ac7ff407afed52fec1c6337fc2c9d56d0066d6c58340c41a08f14da +1398669a0d0e61aefc5e417c7afa9d308e93063ce153843ce0271140473d6fa5 +0fe53ac716ffb4174e93dce2b3462d08cc0acac648533c664cddedd8bf47fee4 +6367788dc64a837df7c441bd928ccaeec3eacf6a4f57541d3baf784f43dea319 +04797f5dbedefb792147d0d19df83bd0dd15c09a74fdf37f4812105aae0e599b +2f1d401e8f695b7723cdd7d80d23e41e7759d6fb67daa98e0f4e3453a67ba4b3 +bce561362540d9c7721e29fb8c3f9f471dd5b20af603a17606c4512d38f75b94 +eb41710051260d6f448cd5ffc1aec446b3705c8dd90ac42777e95eed6640066f +c9390c0244f38627c85f9d4a86a095d54698d6cafe1c27ab3d3b55bc7215f20f +ac4ed89d3690b21dc43b69e37eb0396d88e906ed38cfac87637bbf7cd8ffa7b0 +1de123daef89d0120521dcf54edca606b5c2054c6a6ca61fb57e0509feb8a25b +7838a8838d8c2f6c5eec8350752fbbb38ae70a1d9272b70b7503672145b04722 +15d68c1505e5bc8dce8ce2d45483d418b83656b690c11a149d3661820a4e4305 +f33bc62f0f061da3962e9cf44ddb175490a9218a4267d367009602754c033c8e +63f9430ecc71831aa081b0b3113f28db3fbd9ee79f2bf77fa8a4435a2c6b9b15 +076486f68a5eaf80c2f6602d7bb1a0e672e63d0ff3cdcd0824b535bbabe78a29 +ca8711d40f4ed13508fb61ea1eb58b0241150d8a531d7a41db19b5cc4542f6c0 +e2f7be7cf35c95e088965201aaba184d0e9a25f25507481549d7bd624bdcaf65 +771a19a771cc98a42b2d4a183beacf997c38dc6db8571fbc0b8c3d24a235b94b +fd9d3403d42026e4bb99729c79a152294480a79ddb7ade064828e29da6b16424 +bdf0fa6aa62e456bccc15645b79055c934c14371b33c5c5b9cb376b0fb130b3a +82569a0300d1bb37e3e56120116f9d798568e04a86e7498f9e324b3a143faef0 +4b8a0074467a1409129d0fc4a33c189acdb28cbdd6545d1aa79d1d060c184b27 +e39df37ea26141d86b37b7880aa6abedb3598fd352402db4d6de9e22da63821a +674dbea9ad79dcfb541deaaed29e2089d85e5e04c557f6c8b0d3238d26fafffe +3341d6bbe5878a3c49ffba7f71909607a6991ddd172cc9d33d5c07832eb6846d +4c73151d18db6290806757abbbe6eac4f00f6a536be0ce9fced8e067d2a0210d +3fc7add1aacc4996df378b6190d97a5cb9bf4ea33f3aae50f7153cdc2ebfbce8 +8d3659363b812d2b2926cbcdbb900cc97eb676262e4902dd67fd8c9e010a3f3e +7e2782a488023c6d75f5d277b2b71cb7d06c57cbfe6c25d26a79a4b6a30dcc4c +0ac2bf144e60c22d66c64b003feb51a84edc62831030fbc7c4daa34dcb189a7c +703e5d3ea6024638a0a1952cafb1eeeafb36d6b39c02ea6c8f3678fd72938528 +0bf56f6766a38e40490921aca2153cedfa7948afa776e8e86255d74d8005c16f +f8850bfbeab73a9b57ab7aea0b7f818c11a766f6826f6cd6fddab937d6895bb9 +3317e58b7ba823b246c823ca0265b6fc8942e964c3fb669ea56bad27e9b3f906 +f458e6b6680ae5b8db5e0dcd73053c183104d27e26a8cfa58bafd8f9f07b650c +052e3de7acef0b5d1a77b41fb6091186476534f685aceddd29d3e7abc2f91219 +87f392094a5fc30600a3e3e61bf78ffcf1ddb485c0b23ecbfa4a4beeb8f0e4c8 +759e92b1ec6eb46162554f04e2e0eb9118e5a71f14630581b5356132835c0793 +7704b2214878ac04175e48e863ec89bee3362139e339cbc0345174d4edf97c7f +8deca007e40c6cf7246ae4b5c689f363adac1db80d157cb8fb8f588a3c69cc8e +ae2d5232a736b65294d42659d153538f39c3aca431ab373ef6fdb60f6800ac76 +af44145f566565282d6b58976eb0efd80abac479267aa27e132259bf8433bd21 +d5fc48a7c65176dd13d43cab7d87b59aae59f476e00ed82a9d0630e0b26b7045 +d64ddd7cc222eb0676098a1762703f546ea5dc4de01e695c9043abd6681a5acd +82c4d82794f4e9ad67f4b258d111d0301fc68ab6c68f06f69ed437bf95c6de77 +2601f3db4b572e3fe5566081d51e7a6a862599f97336b928bd6a32617ab2970f +8aeefafa82ef7516c443ea61ecd353fd8be6cfd7b599a2d6569c6f2ce05eea45 +fcac07887de24948db62cdf540b47340096b111faeca913229e86844f286f866 +5f03fbef994bdff07ee538b08adf63687c521cc2a773525eb8c9f5f92d696f18 +ac73e7da22900009c2424c64d9924aff29600c7c39b17598edc07db669b3e573 +8842625fc0032876a3ddb3affedb218bf9ff32769cb4b535ebc6ae30c3b4c978 +4f5398c50921c92e80950f6c0e891b29e71e6c0e058558d5c55e2be9e4d66655 +c879c3bd583f65dbb105ee86e0dccd94968ebf8dfe67c57c9581fd8b4b403ebf +434a151d6adda2975503f7a76b6e40927880fd02baa85720e8ccd55897526dab +89e3c1372953e8f643a89338a0e6fde3892288ca79fbfde79b6ac487cada1bf2 +36b50532a5d06dc4d0223cf10434c3bf83e55f990c61b2e820187e6b1b9967ba +a48a74cdf049c04159b5c3164105d00cb64bbbd615b6d83c2b3b669bfb85b699 +678e2d1b34bc71dbf3a79edc1e30dee63220c155e05de9ab8c3e7b92409f0087 +03f2788af8f58628eabc811790a51b246d9f5db8d2b2e6cca049be2e0b878a00 +8c1916c6e676026e937a05654bb5c17192ba7dc68d0102ccdfee737f59ce96b9 +e6ebab0fb2407f75300e9e70590ef8c4b3a9b5910d39491baf62ff6b8837ede4 +23368796392512511262d0ff9d173e2593a23c886956228c6b83b4af5c504be1 +bef230f6e510d79e5a2b6dfd017492ceab9428dcdb0d61ee9c2518f62470a831 +c25e7678e54910345432ca744003cc8f45e3026e16392ceca50990690a7ad1ad +bcc0005528daf271b29372778824795c3067fee2b86efd3f26b10e15d7223551 +c50f7d2d355128c727ec5490daeed5f3565897022828b45ac1bb1252f64aec99 +8f50296a784bfb74427f6fb712d6a1e228a9c9db8aea236bd16b1804bfcd757a +be5cd04b418841f0ea832edeca375a6a5b431bf7a6a18e98a9c0a167e895a5c6 +d8bbf1e80417d381483c312504a7a9fe89aed907f6a7df8b1a616fae0879f93a +c9f4406dfa6c2e03a2f53ccad47c45d902aec1b75d09d36e7f7521bea2be7112 +3dd23ae360879328cadda62d78713ed7b0d88455bbe65d3f6b97e081164f97c6 +ed7ce559fc658ce8fba435992188af124d3c46991336920fc54e627c3fa32b72 +bddcbeedaeb67a0d1a2346247534c92367dda01a1fa18b0d8b10df009d0cbc76 +8d871aed1236cf0e4192a1ecd515dc3241f6e89eb82e43fc8a94d1f04f759584 +dce0efd03a33ddcbefdba8a466f2aa1ade5610ec336148fd26141a5b6b70482e +e3bf69dd6fd92ef7074788fb4723fba52f01d538e997615cf6ece6f214f7e08e +c26ff30f724d4ed09364644fae1a382bc78966538c6e41806c538b964ed9968d +b05ceba6f2b63852e3e2f922138cf8ec3a587c5e6644fb8cc10eabc83aca1add +4b28d8eac116f9b6adf47277dfbba38a994a052ff26ff466f309ef0e9afcf9bf +3f390b874e084d7ae33fff60fc6c00597dfcb49f09a9ccf61b87171f62d17257 +1b643e513b42288e1b6f6a1958cdb7fef3e69663927de1d8d653ab0bbf39b135 +f2782c0e27bd66e72b99c7dca8a8e2748b485d61dda0c7d6967cc082051b5e09 +ba0c3dbbdf41833c92c3116c63ce6bc46c1092c93537b67f4e1559f85a6c8903 +e3cf40647f5906544572bb0e63378dc5939ff637a404a482addd33bc3e7b0162 +00acf26c0ccedd39f45c7788cac38faed41ebeef7c741aa9dbf7d1addcdb0e6a +76e89c4352dfc2bd2611fd668f474f192762cba5cd8ba84366370e12e2fca90c +1fabba6ad94db326f7dbe5500d60fd85ebb68ce7a3bc88db184af3d3c88554d2 +24e70ca576e575f6cd1f9390425bec3233e632031489339cdbd197a4149c38a3 +073f6f56e48270619d3dc7bd935a2fad48cce51adad44b29c6daa07301571f77 +aa50911e0852b5167243f8ae0e2c9283f266837ad47bd3971d6ca04c8823e5b5 +04ec4846654948b9da97a34c3ed03c46957392689e9160054daf63e558dc45ac +0d65b9483ca42500a17c3b73449056a594ce043b811a60c848cd2bb6a86913c4 +281cdf586128bb3f22d4e162b4cfa111df3d2b94d4d810ec6e1a57cefe853660 +2cafb4fe753efe7b8474679cfa2c8612a3d430316f5d5aa819a76c99dacf1d8a +8f98d96313cc3c440d9dd165b25371cbc510d07d82841848023efabb35f04ddc +8aa35518d044c4782f3596a14cc38a6f1eabc97b1b0297b28324940cf4bad2c1 +85ae11f41e427138da6ea941e10d8b251cbc50f67dcb3b7af0bd76ccb489cf79 +98918a4489336723658db46709fbbd6242e682828bbf20602270d26d966f6d10 +1e5e39362a03cf8f084802a9773f692e3a96e94c22208bafeb5d653e1ca8d100 +82638e743a9ce85a4b5846aeb8e0725af5d1096655784a881b01ead9173d2481 +800df0ad373daa9791c7b6cc47a8f14ab99eff36b04c24815dc8318d151037e6 +cff02cee1ed4e315f0f55a60cdf809837cfe57696ab6ae69e32c4da8c64cf645 +f34141a589c45a1db57bd191de3014ac7cdaf14bb92482bb6c258b08c010d0d9 +1e9cd2103effdc1b171721a65c15b38a87bced09277a8e264351e72ea79a7d02 +5939df57ac6ca59fb527e2f13c9fbb5a24c583bb4b1ca2acc8462e5fff3f4066 +9027f3c697dcc250ba586445da776c1bd0436181f5c6cfd5d9e045c5164c7c4c +31ad833187761b084d869440ad1b1b7649d6ba9ec1c246fd87147fa66297c094 +1b2893e31fb591e5d1cddafdc4133d915c4032b392fd92adad1b06d3744bd77e +8f913aabc10d1cabd049a48d9d1e6bd80379b4487739f261c45742f41a50e7b1 +3bb340f583b3f21757783a3c788f0cb2b2bba8a73c522b249daf8d74bc634b56 +f76690b6f7d955086951e6a4ea5727a9bd9781f9d8c4ed66e1d2cb98d6ee2d92 +b2e01188b890663c8346b34a753b673b2cadd3851980767902f1355f03072f51 +0de08c303e2faaace933192a1d7dea77396063ab9b40613efaaa796b2d1cabed +b2f8a92ca1bac1e9cbfe3013e0fa220684501654b45218b58e51230bec0d70c1 +ec600f32bc631ac5cb0098c0ff1a3eec2e46dc9bfd8c4702ffd692a9ebba7ca2 +1922b67a79c68dc52ab1c22dc1ca3acabcd428f9bd3a571d365cc4fdeb7375a2 +34781ea599d66561e21c1f38187050c5060d4ea6ed5cb48896b85af15adad899 +9fb13b8e27b3e2f158ce98e31d6a7424b8472d7fcee44a115f544ddd161f9551 +ff99760d71ea515bd16934dd0b78d681de58d31067397bc390cd4fa660f0ba94 +6afa001a378bbc8bfe575453a556ace07a45d2019e51d6b81391765dba9a96d1 +c9f84b2eb53c6f8cb4f0dc488226982817baa6f98d9aa3195217994f7f1a857b +b5b37b461f2e9b8616bdf0087030d23d7ec15583b6a2bbf339de365d2f4204b1 +cb3aa69958077171c170cdad81324fa9640f7fa9900995124dd00d3b0d20d838 +cd36fdcdb7943784f9b2d5204ce27fdced3dae555c1bbf6243315b1aaef2a286 +7947ba5f4b3ab88391e0df2cb6cd293751c5087da667d99183e8b18511785667 +722e3590103d66c7570de09ed40dd730d8073100c0358503723fd1494111ab8a +4c34faf80363b96e110f75094ccc8979cf994775085f9d157a50510ca261a412 +80d58721e4cd9940f8d7ce48e026f894a40ba03ca0722b89aa93c458a5ac14a8 +ef35961eeff6353c08926f8f066bb8fd0becb880ad233297aeeb9ac6fcb0f26c +73616d07b9842258234e9b42adda6c65186696f8992a475c94eb377a99439f51 +1419ee74f6f3820e9a2d7801d8218f02fdf480edc6a386b54ca18f0536049aa5 +d9f5a2b66be4c8645c315d63db1b5528d25c9eedba165b1dd40b6a44b1a9e8a8 +c9864d8ffb81a4a6aeb0598a256d2777b681353a4f91377ffa07b6ab0a7b1d54 +d711c81fa7635452b2b9692163bbb313009ebfe2ec164b3d2ebdf20c06914ba2 +948cd07d2b508a4136233b4776b1f2949a6558fea405c29fd78d1e818210c520 +27322e8e294a7a3c2ddb66e6c6d9c09c25e7afc2b09ca69163900e1c34ad214e +799c00f04ca90d15a07172166eec2ed6f76d5c7c6044dbbd12babacd1b3c72cf +047ac30605f4ba37f00f4d0b39ba40cefaa48717e37265ec6b73ea9169c95551 +425293bd56aa554262bb75ac4e728388d21abc3cf67ceaa369226f1bc2df8ad5 +266090e7bd97f04ca04e5856333f89363677b159fe4fdbcbb80f5166cf50c412 +42c3054f71d0eff5e30b45b648e98625381e72d87cb6765150bcfffd88ed46ba +b1905c13929da0933aa88fb3c4017f1abc78fd69bcbce09afa1977f607baa06f +4f7756914fc137ff38ec0f6c7adf8ede154489fa9f757b3f2ca220b1e686f9f9 +07fce4332887cff5ac2600270740a11363cd9a000ef29362ffe00613650d8865 +c54ecf113b5a4678000d4bb0d2d959d4fd48aa2745042a1465e46dfcfd94f8ce +51fd9e5d3d9ed73fa475392269a5d0287970301eb8ac011a9e0df7c2048e33af +502e78e523f1a5af73dfcfad5aad103dcf92e396824675930291369170e5aacb +ac0194027b3068b14c75d615d851ab18c2c0b0357350afe64cbc557061424e9e +c13d6d6c52398590edd130317b4ee0ebe7e39c0d3cb7d7985c15c7b41bef16e9 +fb65c3cdd4b0e08f942bc119670b6cf1023d92f13256b5f5c9fe65f4134dc145 +8d857522b2c966abd5309b38a9484cd8fc8c07b806263a693f56d0bf205ebded +10a375b70d10f9fafcd489d0876263e8d7ee6fedb558f0d2de75f4e1d2b53581 +a8b78cc54947db490e7a2347823cd173a1309cdf33536af97d23dd4ce8def305 +e391ed1cc7a0c89dbc836288cd15cfc91d6d7239b866b74771a338b5c89c5ff2 +add07eb46bcf6fcb1aec78cecfbe93448ee7b87e0307318818aa69f986cc508d +11b2be214546d60383c0ff4a1c0b5735e18702eb9ab1d42834503bbe9859089e +2c929db89fb73b8de64f77832c6be55d607627c34dcbed32b3e856fc71cd024a +954432d22f133774155ab2a77e6493496e719df960b55394e74f5cfcb14d464e +67140047e6b994fab585ff586c3bb726bcb4b8916d0dcbc3e9e1df063ea0b6d8 +002e5bd96a41ace76bc12fcdd446fcd2efeec84d33f16d2237c747f8c904bad7 +9b4b708c6b4d6d5b8b86962401f7c08aa0850089ed89c67737cee80a01038d4f +7350be93c473d43a08367be59b77bff6fa9d777174f3150c7deb6bb8ca54d36d +0baba75656b5909f4a47b393dfe21a3c7f13dc83ddfceaadaf729136d190c573 +34061d3a7367922f37ee20c1f9cf24141edd1f95528d379cfc1deb104aa5e45f +536782120ba71bdfa8dedb0574700d9a206e3ce12ac8a2cada121e9a046d98e6 +c4c6cf25d6c5911d9a8699663bf31bbca95f2fb9ef88ed67665b8545a688837d +02aa40a481602a7e7aa3d3359a142576980a11d4b0c73df67a0b1363e42d8ca9 +b458ea91ff608f39c4fc4ea12a854141efcc6a06cec61c918335fc093662bfff +8d09037c16c73395265360c943b1342e563948fdfbdfe2d9ba9a863d4f5bfdfb +e9e2f8e5c3c93dee7f0ec0d7424240a04f84cfe7a51f5a17a7bd52e9ef93d526 +2c6bee41d0ae63113db9bfe425edc6e4632789c6ca1e750a15908e0caffb894f +7f2512ac3e010af77785733d0b00785deb5541c178fdb392a24960e0ba7f60f2 +86ee35b511764544d74872202d5a328e80a822fc32de893b96b385594c33903f +88a3e432116a8e434df6a789379bbe90b6917c1b5a3906c6ff79dd701a98d69d +7786c53123031210efb45ea49b0715169561dea0eb9fe2888a95164c632c8313 +a882682caaea0ed23baa2c7b17730333ebd5552e4f65b2c826394ab9d3fa166d +bbf622826c1901ffdc3ed23813a63467a9b1bb8656c826d097091097b77594da +bf5e3056432beccec5ffd93725d72505b6a8ecd437d40aea9451376e7f9b8f7b +466d50a45c974cba4495b674d71ca65e72dd2d189bb45dd0e529c3073e84ea74 +d4e7e87fc98bc5325d09f0bed11bb31e755765d47bbe91f3bb021c4978ecbef6 +c1b6af1620eb398223bc5a8cd63b8565334be22607ef6e3867f98adc4366b586 +7210e61617eda6fa030a319e4ede16692c9ac427fa26f455e9c18a0a83fdc568 +85b3aace1edee67404d1d50f0d40985df64db2c9bcd0e1c62daec5cb055f23d7 +e0034f4413a55ab38f77f747a884941a6be8d2b6082599507192560192fe78a0 +8351aa53f98ef114f91d2f87b692bbb4e1ae42d8bf6e67fc7e7aeee2b1147cb0 +7b81af2835cfc4393d94d08b17796f3fd588a2148d4e619db674d3fab1087c71 +db2581d4cb7cc0622ef731f550dda2b11d1c2bf861eb7dce10e285bfce1a727f +368acfc0fa18e83e8b31c9a07a8e4b5bc9766b69e20a327ab082106faa512418 +1fd1e8bb24ae66bcb2a5425746e4277ece4c552df7b4c3fbde5693ebe1bc4d96 +a08721f0487f24d5b3f2520b434e98ea23f9527c5ff66d7ab69e5a01cd4bb74a +2595f2c1fcf91b08cfc78c928c13182bd4443b0607024ac050c91b4ceca69a1c +2f13d70e71333c77b075caef758b3c9c4445d4ecfb9b290ab897d3e83f6a7413 +880c6a9eff2b183eb85615a1217939d9502eab0db0d690e143e702d8b7795570 +6b6e69d16f274f58eaf4c9eb67e4f3156cb36eede20ad677f61cc4ed62e9a4fa +0bc6639e898c95c1e7673f559201c8233663c9bc75ef46655d9458acd6e5464f +2e85fbcad23152d7e76bd3c58e0943c058805102b65ad4ea24487ddcb79195bb +822d4922ea49d77fbef5b4512cfa3dd903ec9ad7b160a8091a4a3fef1a6ccb4e +4a6a44954d2763560f8c91fc9d76689597e5605bb5d6b8a58fb7d1b66118550c +af061b65eb422757faa9cd74935552e8b911808cc5a3b71fe4b884fefe0267cd +a807b9bf66312d02c631a3305aca5a10abb8ddd9c825fd696ccfde25632a92f8 +3168733f12dd4ba7cafe4f82bd76bfc81308a1362c8a13aaa7a892d62b073ac2 +623670cc1a6c7f90b78c7127b03540afd3654ef47a997efc9e14534ed9a1ac49 +9f17df2d925bf4bdc2978d606765cf50e664fe11d953e3f7d4aafab81044ca79 +5e3729d1845599f742f4bdf35db539416e78cd65fd58db0b5fdb2b1fcae5ca25 +b8aa0b79dfe22ce48fbc2b5723f3354ccceca4ca86030cbc6607dfd1699a54af +fa5bc8d5509055b7b85308fca8da4f225cda814ecc2da16592f30fe507103974 +ddeb9fb74b0bc05bd216abcf646c17f6938eac4d6d041df4cc9a4508d1973077 +35ecbf9fe1152a1e17ef7bc0c87ca90482c83b38fac48d60e293f0033491d6cc +bc76166c79e2ca7b839e4c79b355e5648f0325aec24379162618d8958dcbde9c +7e7a4f951dd26347acf6fd77a09f5fed87402738024cdea4633179df7d5d559e +91fb87b3d6bcb6fd61dc447024f92f6f03dd064f819e176511865f394d474bc2 +88610e8a6ee3fe80c26c7eda857319af84b5c19c5ef958ec8fa97607b8575e40 +e0c6a4bfe21d3954f40c7c65e6256293d4e0b6f549d90a062935e20e61e05078 +a01577b9fc2879d0e7272657aaf168d2ffd7375920b702b74c8513ff2d69b619 +dec7d58938c34502f174fe058eeafdcbf6266949c54b2df7a56d53e2d779e1f0 +e08486b06125f615e73f61ff57e54d30e40ab0ce906c8f83ca0ae2edad4bfc71 +1ad0ea18e4e858792f9decee343f23d82864eb1ced9657cea155255e92df3772 +0f9e2ae9486d11618644596c33f643770ae82993bd76a493f922b599810bcc46 +42fc4767e08d921257a06fc6dfa94755c0a496c6e80b17031cbe579a633aa181 +c138cc34f86e7242fd764785b808aabc944e15f71caa07e57394bf9e3e6daab8 +1d7876ee40ed33b27a807b2430f427717f7b4656b833e6797bb189638226ff16 +ed9aee73288499e8076a9e4736b2a5f76fb157ebe42750c00cbaf5ee5002d8b6 +427a130da7b2fae41d2a40f5636ed89e0138d007bccda171d96b8b0f6a6d2758 +e2243482edf46a62d2dcd8614b0c87edfbcf4795d0eb08e1738f43ae1bd73ff3 +6622f0e657f23ecf9f8852c4e30c6165b21625224d65e456ddab183dfe5aa2c2 +770b46a9d94254436b252fa999b764b08fb48e09ee952199ff578f6eba72ea8f +df5516f9bc0461b51c270ee09b0434e961da53640f1c34d230a1ccf7b17c21d2 +5294a764835030ddfb95cd545b38bf9f3d5f62b41059adb88d4b41fa9bf13321 +32d984285839df1f27bc5bbd9a4564ba4c3935b0aad7a7bd9180523c24afd281 +15d7f956cda54180889cde39c2f601797514b0951a0dcfefa153b3f6662c4ec2 +b2317cb834694b62f6dab704a140897fbe9cfd7c508267822d6c9a8d81c14027 +b3f02de3e3b47606bdf09cfb6ac9c83c709e1d3d9e5523b692ce26c92247ee2c +e390c6ee7dd30acf0e3586aa2f713c104eb36563540b94f5e9035f6c57493663 +1a1c02aefded18a7d4bb92d7eef1fbd5736d88e93951445718b91ac0fe12fe5e +9a22d54df0e453d06497a5458e360eb7ba8a172c2578331a8f9f7f264fccc514 +980fccbf8d17b1d7e2997fc439d664461539045952ea1a7af2e4c7de1039b503 +d859fd2fd3aee84d684a092bd4678e37cbb8808d767e805c6bbf8a4638e33ba2 +946137b29d529781ccdfba3517c2fedc69ebb56694382186820a6cee135ff2f4 +32e8996499db078e8254cb42c0e59043889a504d6a692873ef20e291e1ca68cd +9aae7210217884071c8d9d50137c0a053a8c836bbd53d21e9d588ccbb4ad8189 +5cbe1c3dddca1e5d4962725daa6bc84c87f9bb41f48365de573376be1829f875 +f3b0c0181cad4f5eb01919a86899d7e5d1539990165a4235a7b6b72e75df4e17 +79e044faeb3ddc1d0adb3beb3aca1627c8a9c6561dbcc4ded9f961e51d494af6 +bcf5d5b292408a9289e34a0c30d6daa7bdd7303737363a931bb1cba8938bfc43 +b3f741b709ebabf5b4c9287a22e1c1443ce84a0e55f73e57455ab0306f73ac06 +09ae33559a4835bb13d084a3cff153bdb6e2b1da04b321e2609334550f7b8eb8 +28eacf742c65d971813cc54261cb403c357c00992d21940914f9a107d92c99b7 +34405c7f6509e8835d5aae93dae993f098cb9e3dc802b672471fb6cbc0b71891 +c93887f746c663508712d3e73ff14437c4b457197cf4284e551dcac9051dd4b4 +981304c1b85106251f1a3d9e6c289fb2cdeb6a5145a6c4f192baf59fcee67ca6 +0e91fd1eb26bbf6d3f82b4cdbde8e4fb62f774ded069525c2366713ff7017f9d +8f1187be8fa5ebf6edc0892e42905cd5bc66eeb9b5eaa256e0ba2304d577b627 +c1d9216ddf4f904a20e404bb5e97f78bae8af6ca55e11944811a536abf0803ea +5fa2c361d3ca422f2dff1a5b788c5662b6580220857e383496d4876f5c352e95 +1b1b9412420c95e14cb7297955925a1585dff6e05b42ea1eb8b56317ec3771c7 +4cb88d8ce746b4f791de95a67fd5b3ce4985f30e664a9c7dcfaaf693a5f9021f +080f3b4a9bd477ffb0021e032b3d2114876abbbfb3dcdbe5c58900e7cfbf5688 +b3d041dd9d7fe7bbc17867dc67a4d589ac7135312890d9ce0132c76bc14dfd3c +ff128a07625b270c71116b67d5ee03ee550613009afe938cbfb7d2a714433e66 +dbd4ab3f421f1760746aa772078c75aca97d8198b644fa08a1f5ac7af40c7ba5 +33687c4f4f2079e29a46fd0f88f37c60d918177c6304b1495c52663d3cc503f9 +ba3b9d1a9bfd4490d6cf88f1b1a00983d9b36c21a269533ebc839b70e9596145 +dc9f72f5111c2fda74a24a1f4ec36438dea3a6f5abbda69c398f7698fcaa85f1 +e4d8f64afc92c67c2b1fb8c1a2baefc92be3a26f9cf54716b35781b81a838de6 +87addfc9e4ba6e3d9fa994c412bfba1bfef1e87ddd3cf8db05949092e66a7eb6 +0bbfca3767d4790e6c77aa0b3e0c2853ff86e9a69548c9e74d281b1dd750d918 +cc1536d3315e3f563b1142dfd20f6d1ce8a713a7ea5823b29ec6bd9bfa5bc86e +778103c8c3ba21d9e1c89dcb24bd6ae9aed8d2595f9d35271a7bd22a85186ef2 +1813a777ac7ed384678fbb600020874b15f2d3866a1b7844345ef8d7fb72f7f4 +8fd55fb8029ba06f22c44361da2953702e9a293ef3918b1391fa9efd12eb1273 +9e41948881f580444141af8bdcd0a6e21f3aa894fd3907f4bab09a0d2021a1a9 +99e6ca6f35bcb4626de13996e50632c14dd06efe4f3412e92bd22b16d1fe6a04 +35b12f07c4609765de833340d0c05502071c7bbcc5d04bb6bad9e94b4641540e +58d73bdfdfdf36dbe4f2215a6582032009a1beccbf08ea4f037258b1e3084cb6 +deedb4ff782f6dba50826a21e7f73cb119e6c62818c2194b8d69db971a1d35f8 +5ed0ec1578a2547ecbac37c173ccf611fc6ad8c5bd27a0f43606a2c30d48452a +57567b28ef8c70adcb408c343f050f7ee9c1eec4f7941f41bdec0c1408912ec0 +604e6a6c5f1b2bfc94837df75f192bb100e5d678f65aef13ad47025c9fdc5858 +dacd376ad95d90f9b6604df08d43052e9d793b1f86fd61caafe6f0fa66212bb6 +03aeb5ca523f7cef433efbffc2d0ca45c009fbd7dadc090fe25297f75db5cf22 +b32d6a293335dc81138d05316e1e7aae729ba4910ba9138840170d6ebc266159 +0bf0019569a41dbf9676c6301bbc87c10499be27c28d3f3a54dd09f0218be575 +d55e316fa62969023ec05645d511c67dbf18a7138bdca4e764cd1f5055a0089d +f707cb2dd40acccd2a43662d2366f91af049267e51893d387cf5069adb5e698f +a278c2b791c80ff0dedaa90a25882e14b869a45bb13107e627e1b1fcb1909aa3 +440dd159849fd9f438dd226f5e6c5344a967d32b2a4d1870e2bda998546059df +362563c927075e27290af0cb1d66a38426ec5e47cc04e8bfb0cb1d8e562ad8d7 +bad5fa5cbc043c25fdd11caa946f9f6f39dd7ca746c5af91e7e3ddb3a0a1a97e +7509e085bf0305a84e02d185cb423dc9db6bdd41eaf7e2ee75cdb77f99891a50 +1c2d9a38ec36dfa688102e30fcc9d59d6c0607b9f924725d55cf5b201cb0e1e2 +4f266b8911443b987e1c901c47cd865810e1b86a65cdd8b49dbd538efae6d38c +92e2abb5400c63b3decbdc0d0a86ababbf7a0fd71147cb97ba718ebbb2bcb5c5 +1699fce65b0074bf1eaed69bffe36e98f3f45f3562791840d18ced331305e948 +ee085807e4cee0513ad472016dbb481d4527267a20314e7c214ca402bd4f2e59 +5e51c01b9bd62451c1538bc4a14e5d16749840775aad0298d39a5b5126197171 +f169867b4f7a98a94c241978870cb71a86fbf6b14c0ca18c2b5f188145471f47 +2d1932a9eb4d8b2c338824194d2062074dd287dd8743ee24a6122def1ac6a6b2 +cb961bde425591e0b1363e3ea1869dfa6ce5fc7b91e1714f34d5ef3640bdba7d +773c120c844865e2ebd9e9ff226abd80dcfc006a7cf96909e180842d09d893b2 +f4892b61216224288223ffc34674f8b08e3453f90597c960a683b05c1e7bcbd4 +5647c423c89061498ef842401e1c585926d840d34f393ce9b7364bbd06f8a61d +235f06ce24c259607250caec30a28902ca9b48031cad3a8f51dab5495b1ec9df +696936f1f2a94ed7a0e19422d4c120a2a97f50f8efd6947f66adbe9794f2519d +1ea2e823c42795d52ec03f19a0a82d4c18f1968b9155afb3a47ab91abd586297 +2a05ea0f774a6769836758dd9af3ee18e91eeb91800db191aac33e19654603c5 +acdebda3d49892d9abb968ba6a3844d7d65a2978ba181dd877b5a0cdf2c80b98 +2f74468d19449a8a93fe37dc7a9fa2d11fca7c22c6679d960b352bb492fad3b1 +f146d65ae4d98f368549d18c20ce6d5282a4127938f8461dce416b0a898fe10f +866d6afe3888299583333fb76e6c5f6daff4f94eb10e23d5b48532f1ffb1d3dd +e3457567f4fefbad56097f0b1e6986c1c462aa5fdd884958d7c7c0cade19c0bd +c797ce00b8fd34210edf4ccdc889b1d3f96056eb27667bf76cbebfb139af7bc7 +40cf12f94ad4d177909086510c9e95b1dff7b47c74bfc6ce7ed786909429e307 +a061b3f3e4d591253c59b6bebd92055a4a4728aaafbd33f1d42685c383aea1eb +9593b8f8c54f9567bac96e87820681a3cd45bc3c3758d9ea1504f96917e3e0bd +c563fd264d3c4bc552b3f6cc349acf309af8c8549f53f30f0c3244c02670cfe4 +ee577ac093ed78efc121f032c0abfbfcf9abea4850df7432b36bcb3faf639803 +23f4db719d42575cdab8e89165aff5191383b2df3cab8c780b847f7d638f6052 +ddaf3fb01eb09ac2a71bfd66a045535540430daf3d7f3e551c70c564913a58bf +2e6147238c454f65e42a1faec6cfb8abf022b0db7ee6f5ca8a8d3524093d67e2 +eefed6d5d084b6d88be79ea44e4d1dd1522680b190562097344e1965a6b18177 +137ccad49c76ac71cd7c0f8ceed4614d3269d6904ad0871ffd2ec7c010f6c184 +12de27a258c3c1696d45cf4ced6f100623e46618499b316a0cabb2397d4ff375 +4cbd9ed121a10d9201f2f3ea86ee75592c538d3c5cf5618a3bb87c5c527955b0 +2cedc61396ca5173a4ad81ea6aee731a24d7b3a1d98c9fff0679305383643722 +c70f486b8e7f24fe60dfaaf0ab37ad95a18bf43a76b0b865e03327da659c4d93 +ba4dd23e47988d071c5f56a0a09a912eadf00f71231184160791d74f6a68f880 +4ee4e045acce79fee3682e2c870b72f3bfee990bc6372f1d86b23056cb051bd4 +2641594ddaec4f5d2dfdbc79f8c09e940857c9155e447fee6276e838db4484f0 +1846204ab969f9a5925aa8a7ef3649712709c71a0f8824f16eac15131e7bed99 +a47add64c99d74d6fb385075db4193fc75fba42b18a2e28e27c175b65ede2a08 +4e4c51ffafa03efbc244d58df412f7cf81920026e43129fab20257bb4278080a +3ff34b016d163d302b132d340548513295118090f95f071690ab2e014b9b2a39 +9b8b034690778d4384cac693facb783f5f597d5e5fc76e57264c0c3feb626cf5 +c0fb02f69c4adb0519e50c02f4810e7318749f4bf2fba85449b84a953c8894f4 +8382ac14424b91b0c8955261f8e2418b90b28fa79f9cdcbed011ae223fac4f80 +017aa267f4b379587715f61898823c0abf561dc17c5d7b36aa843a9547f50bdd +409b99491fb884ea6528d32f7bfaf1ef459803826fdad78ec7d71d25c4173ff0 +e60e80256dd32b8f71ddf79bc661ac3604085f4b199ad6c3d65a55786778fa24 +d26e8c5e8a77fd065430ebe44cd7a4dba88d0809867508cb71965fc352082c4c +3ff3c3b582000e41b6b45e05575193feadc0b6c495fa340fd3f90aab549fc504 +c2bac7ff8d5300891a56ad9a7c2444de2d1661e49ffbfc781ffb274e9ce762fe +818e6c8e5a6a97f558c180342be385b0b8167d97219fd6495787ed5fbaaa89d8 +23c6c2131c5e6523599f33629a6939e7c7746cb0eddf5c0d64fc373f834dffe0 +45ac133676d065fd4ecc6df94a8e7f59dc7403042289eaffddb77095c8c79cb9 +e258ba7c41b7fe7f1d0c980e5d70a77b7c16eb0e76cb393d3be446bf4dbb5f72 +d49dc48df199bf97c292743c7483b61ea0a516e8e05edbb38736b093d5dbe5d1 +b3dd64ed39db7ea02a2deb7cf6fc6fbd3144022468ca9e7f82eaf9017b6202ff +ba5e4e94a1cc0255186663771efca4573f716aaf763f1c6d57018b8d30ad995a +ccc9e8a2857ed250c117c88080f3bc36458a09fac5e24e2b691abedc8ebc0038 +23eef4a51375fd949c94a886e643e1455db95f1d411fbe3348922532185bd636 +6009a0f261d656bc98a3dc391c50cc6fefd4a57b299363e9a14e6fc4910d0853 +54bdbabef7ef08e478ab5a2b457d578568ec6ad6370b275edf5ce900533f5033 +0acc86cc3b4cc2c05406a1f71c2cc61a68ce690735218cd5c99e133a7ca9d608 +5def16610ba59fc582f726c5b09840be1df13ce895f7e414d3fc30e2be1e8277 +933c2c01410694720f5f7d46522452a387f8a953be57b1ab738caedc9bad78b8 +0721a42d5ffa461c12b2d8aa4c1272962f95a2907696d56c97ffab6dbd1350e4 +566debda96cc7952aa06965e9c9a5215369d24faf1c9a4e0e4f2679bbc186f2f +bbce2647355d27c3a4d2b0807d0d5ab9a36ccdd50abcd8b1be296c95161fb1f0 +c4f63a9b31938bfc2fc6fac1780ba48e152f98ddb784f6dff27e37368e337dc8 +5debd1a7a5564e69af74c0664f39273aff61ece92b7040d3bd94835972dc9d11 +4fc639594ceedb3374e481d40e11864d2c74ee7ebfe64e756f8fa3048850d974 +76d6b74f34f1da9e456385c9805e1b22a876c7c6046d2b30ae398c3c1932f0d2 +b09e009ac930a146323e3b3d7817fd8b5589e72b10fb82337f3a899928efbee3 +02a11788471bb18a459cecae05c36291b187fa11e05bd307d04b624987affd95 +d4cb334d3593d3a2b9c348042d753934e3dcd57eeed8bc35f654010965875a37 +83a4e148828ed7bf708440b28cf21edf50b92280962942ecb07d2ef78f10525a +d0f953df0b317a4bff7be18c910b6d50c46ac2c9f71fca6a0c5ebc4b055faa24 +9a7b5e174a185e308063ae196ff7436d2e349aa0c5961724bd49a92e5cf37b01 +cd5952086653a38367bb78b3a69a3d742d5feb0fc137bcd8c438cfe7b7316357 +2072e5b424c696ad32e4335581b973628426ae67ac169c1a12d02b04567ebf72 +7833c459ae97f3c7b5d803faee15b2baf8ede9c9e8fb4b8a311a94d26154d71f +706c389d9f7ced9584ee05611747f3b92b41d7abd7c199973010eba591a4736a +f6bd04cae1b8ead15b216e55bcc9863c2c14afe9ff33ae240d7a67440607b296 +a1da1fe7221de44143d7b80fa624485317d51d83d771f5a0650f363bfba9510e +fc294bf35f0ac394ba974a35a90b0ede7be02eff19c5416f0ab66a764ef93b55 +a68cdfbab79f7621f5755d8dbc16472280bf378d173c17386ee9986b74d27518 +47edaef34145576839921699850e359be8bc7d8bd0bd194a3f063c1d959ad44b +556050d97917bf0d501e2090229cf4045bda44486cb8c5ffca5af4a86da999f2 +ac8e7d35e99286176f8bf823e658ec97e716553b9dad3c97389a252a64c0b2a8 +23fb26921f2a469d072c9c057493cd55a0e737f2bc8a8db3332ee92d83226182 +16b174c29db5556eea90cf7e11061698998e13e8992f99e06679f2d442707b97 +2f9c32bf9bf44d23f1345123d282ec1b6b29692076334fd1774eec4d5a3cec3b +493faabf410bcdfd343ce38d4a64eb7b6a6cfab26cd1a288b080c0620b1a6806 +f60f8674249688fa0dd424f132bf99ad2a5714b9106df18ab68765f5b17163a0 +05cea9fee805b513f4943a6070963a07ee1561798a57c1f6a01e6902553c1ed5 +e430b62ab08c18238482352375d67068ae6ce8b60225564a485f20bcfb47cfad +010ad9c7b6475bf3faee7ebea5f3503c900da7e8523f49f1c9e8c8bde8337524 +2b86e0f41628ea9369a32781e354cd70c245ff7aa9f59ff0dd198b8a11f168fb +a73ae126b67447774b553098755d7ad4306bc5a4c991c9c18cac4a8a96ba11fa +2b6a1f5a60622b1fddf8e1c5a77a1abcf7ee67883e0990d41d5d1dce16ae8c94 +38aab6560e2f9576afc10a783108271a9622f1d286657ec1c904cc881fc21f08 +c66db759b5253a9d5a416fbd9318583172a20cb3f1f164e3efae0bff55687115 +abfdc5ec959f7b510b9761f639300eb33d7c760ead987ba07a13433c5b2ba12d +18567608e6d4d650642a7235dac9ab87d9965f6758d8637128347355b3b643cb +24753991cb5a347710cac53f411bfee0feab71ad3143a3cb7951bda58ed0525b +4d3f337531c9ead4c9f5741d4587f336bb463a6a15e4f9370b841c5d3f762c9d +d516ee84c244885c35006f4f1635d9d5b4413560e9ef17321e7ecc8c1c23cb31 +48eb791f65614385d989e02fdfef6d3f65b7fd4ad980d2a70d431deebc8c041d +876da0015eb1734ba715b6de6892de21e78b6a47b210369f7fc8ea48602326e0 +c23892d74e190da52b376c6e8aa8e83df43dc70dec7a5a7f5320a16789b83c61 +2f434e06d896a1194d62baf8e9dfd9cc3f27fa0b5bd6bc6e7025f1304dea61ac +167ec7e4cade4fd5a3b6811bdebbbd47dd3eb31a18b9e25602c6c850e4d827ee +a041add74f2a030639ae8d271d1438cfd7a211c0b5b6e973535a0d65a399224a +a2fc7d762d9be1f8757f7b2c8ea66cbb928e31eca996241a74408336ec8b8b8a +899766e462a6f07cf7a0b9815bf91df1dd8a41e7b2596f981ec527404c75c296 +b9b81861acf8d80df1cfed3219806856ec80f6d488e340d85066176ace4a8dde +f4632bbc694321cb30093d599273edd2b67890c5ca8b62c973555faaabb7b3d4 +5326498e88db6f90443b421156b3ba3c1ac86fe8b2cfea918da2d0a936bb5f29 +f26863cf617167394a6c65fddff04e2ef3db4c27fb67587e0291b9599f8a7ba4 +065472c5548b5bee46d186dd00125fb1438cf4eec22b348fdfc9762f72a76945 +3c4f97ec50c3775f882f8ff31e6c34dca34a1fe5db444d51a88d445784ffb0e7 +746d2947d07b045f3cee9ca2ae82f63fce01c3348b878ea19b55eef7271b41dd +357a37c926a2378fbb0688b95b542775f6f38913afca6840569346b85054dd13 +dd68290cc641ec271f5b77814d4aa1c88ec09d9efb3af80eafc12676b145e828 +dea6deb56458ba18a83edc808f36a703d64b8628e42d454eff85008bacfa5297 +2ed903f73c801a600a09fbc2e7a332bff2c2885a8275f4289d63d8c2de2231c9 +7886da41f37e80d6f2f9f677f416b731c215d3db821145de726f6bfe5392da15 +ce938c02b4a7f9a32a8299c4802d77014d106f4194bad9ef4d800e93378dda33 +bcbd7e1c27ed5db025cbd2faa9c1262bd42c3e1c9c1606e1200fdbd8555c96a0 +b81fff339f075c8b6cff6d23ec970f3ea756a209d514ffdff446ee6875d9f975 +599a9af7659eea309907db282b830b29f79a332dc3b6ab63cb47e976d1fc4e54 +cc41ac3e0d0b1ac056816f69bd626ac3a8e553a772d6a3f12229408056e8ea19 +ab521a2dbed4be58de0d2164021e2e4b3b8a00b17c9d9b3b0c918459458548e0 +1fa2ac645a62e31034d94cfc784a9194f37273b8d194d8eb16ac453b2a72eec9 +369834207a3336c93a9b2a3fd4280df4f0382c259e895ab69f674fee593813a7 +4108ea105b81288e68570e7e096a0d43c66094b57a60e4c32a95461514575a41 +df45a8f9ba15e8ae2bb139bc8952d12563e3023ced84b0db95a8980d401805ae +6044c77d9f698a97988331973b5b0bb91e35cfc8808b971cd3f9232ab3cd664a +ddb9ac3f4ac8f3b98c4948b6fc37504fa3d7c9a6627858ae628039872845baf5 +7d5db4a6f12e447a12beec77a220dc7ad07dd77b406be49e824ad157e5645d3b +af5f77e4ca8fccc862d5af99704aafbd11e31a63854acfbcd4cb091cb43d7df7 +1edc5a60dbb49b9efaaa3525cf1b9b68db23910a4157870fe6ca964cb7656003 +44faf01538759982ae3bd23a1b83466efeaac5282553e72265ffad3743fb8249 +820fa6b67024d9b02e42065eb110356763513681afb82a29b44919d18ec72bce +406d0fb667e8401eb53dda9afa2fdc3cae73627f7ae4f4636e8e12158f82b2a9 +aee647daa716eb5e565f38db2407eb20b36b444f7ef411c9747e5bf96829bb5b +1cc87770077342e1771dbac34b7cde046534bd71f9c9190141e5087db57e9159 +0195ce361e33b0ca07438fcb4e865327ded2ec43b60a999bf047ef6c39eb23ab +9f4676729d42456f5197d34a67b2c42707be83fdedad7501648baf9e243c2a84 +f85431ac06cf5db935f282d6b178830f2198f53a06e3078780f0f9a64ff9aa36 +44020f2fcb72cb5bf4fd9234254e6e279f47d9996b410432d39a6045c9f6f94f +c99a0772c95bd7c865164d4ce8e86ea53d12756cfd69f8304f04eea35bd87de2 +95d5b592435fade7785c2db38ab4f807e55c7bb8eb1e0260951913c754a3e0b5 +fc4514f28dd14ae22c86fc0bc4fb39aa344d36c9b42e1f08ec86f1fe26d12ea5 +348620c502607f8f5700ae2d4d6266deedff606e7c69330f56d1c9de9f8858a5 +ff903e8434cfe42169e9fac050cbc54cc187b5ca2f59b5853d1c17bcdd0ede46 +84c883a1e94b7d75152d56e56b4f03a421bc226a02dda714a48b3c8bdd3c38fa +75a26ac18ab43e38425d199e0803fef553b1174dcc743b03615ce78d704e5cf4 +5a33dc5ae6f21d09f191fe03935c9c177611c23459c1a913eadd37a27c73e791 +716ff134ccefa772ac0b480395470b2376103e9c20ba95496858821cb70c2148 +463b3dd98492a0d1a61eefb67d2acddf3577696ab3059e7a00046e1b6589c8a5 +a048143dcad405f7e5bb6f675416558c61a8d72c2a9e5889741e054ccf791f4d +2318136e390b24b47f345d9544d3afdc17cca95ed9d35649e1bb84f1d4a60ab3 +105c6720fcc6e8a503db552b9b11fbc7b992d19011a775ca47505f8f77468c79 +d02d5dacdd17ec0bde9b8fbaaa3f76e52cf32321e885d98fb3942c2f8c0d241a +3a1c1f5b9918e9c900244203b1fdb87e5a7d183bdd75fd0a18a213678e6199de +58cba2677840a1198b244b989804f6fd3eeb7fa2dfd816f11305d22c891bbb42 +884fe64ac4b08410cb0ef1f293fe7cfe6c72f17421f8e7d793ee965e34c86890 +d1ec7d3e1a3b18a7e7caf7a1351186464e30d1408167c42c81958cd25004f24e +90025a4cb14c445fc6f4191a6998212637989b32b1dbe6caf16d81081cad4200 +fabdd8723367253b3cdbcbef4070282723d1ab948cf6056704221a3cb5ba73b1 +d74006f62b225b997a8d350a30bec5dbb2f99c091384b22b43f5989e021f8fee +98796f1599d0e0faa1f0359f185f011a73afb139ff7a31ffe28ae4f997162fe5 +51e8f21e136217552807df98aa63740d3e589ddd7eae90e39905faa7ff52fb3d +34b7cdc8de3c8f9144b3b0bddc52c5f61a474c56e334cf0bac330b455bdcccd7 +869840c0f01562feb114ddf772cf37553fc95fbbf6aa13cc0e42ab406fc7dbd2 +313e53fed02f5ba73d765ef7c0fdf2b7f94c5d446740bc19e4bf3f1e4a986f1e +a47016c76f9576dd836bf88cad3cbc05e25102f3385a1ff76c3aa841e5ac7024 +4ab5999600a7f6e87144e63419de7ce27cdfa44b65020cde69a06527d708fdff +1db40abba3b19ee4c209d936db02093e814807dfbe4bbf70b22020d66dbb9cb0 +b4e94089af63f3bc6f227d3c4a7e512494b37d9e46882ea8630a893c813f1cac +ad4c6e2db4eebe8e70120feaf08f12e0e869dc22358a994787e37ab1f1293032 +d4e1674307233f84b8bb0e329f7b11c311ea76a853f9f12e1b2c971d5273fc42 +0eabd75b4fe4a2dafa11c4c13a6577134085d50a74aecddb99a4728d1d44451a +fe9f27e892db50ce95429586fb7d73edcd498ce34422550e0e459a1b308ff96a +1377f41a89ba5947e5204cc1fb5f5c4ae1ee135257d726994446cc6a64d65bb5 +d19da9caf462aef2474e8b68fcfa12f680ac5a36fcb3fa6330a3da4073a74429 +1dcf85a23c71f1701ed9ab1d0ad8f1c2152426207e2d2cfcc13ac40f39c569b9 +705e3187ee641ddaa19593eca63c910d0446e46fb995af6db6cfcea1d8e8ce5d +2b59fe87fe5770adc50e155ac6a9cf9b4d151f873c3b8d55f8adc366f1cdff11 +4b2b46ef18980e7edcd0350830a2682cea3b9805a2e2ebb806979a7157a1fc5b +81a6429925f6ae576ad6df03907c9fc5fcae030a69e581be1da1e0ff154a701a +c753a6fba54b6f547b57538b964617eba85b2d63598c1c8446a5f28af56b2778 +e4afda2de968857c0fba38133b6e32a55eee49e6442ee62a9570bbbcafb2c206 +cdfb3d5aa4e2cd750523cf774be4e449cbf3e20f0e59914385c27b553baafb0b +de1de419438e8bef017dc41ee658d1d6b9281fa49c36a30fe2b89aa4203671eb +a6f830fad54e78422d84f7e9b2bba392b4ac39778a8cb4cf0b27fe8176b25667 +bd01dca40e9a8f6f86380dd69c19f81819c4a8666fbd023edb50bf07dd4f3e6d +20003409fe6bb8c3440f3738fef19cdb08e110298ae4a1cf3893fa3dabb0c3f4 +bcee1218cc1d7b6041a7121b42000c564003485929669306e7cc3a17a3f5a596 +f2e3ab977b669e19fe4bd1091f90a4caedfb081f59d4a288b98282a0d2051648 +a660dc17198910552468cc10d7b3ee284af502a6be9242df8bc8fc7ff1abfb40 +5341fcea87bf4f9e88833bdfa8fc8649fcea02bcc2863984863a1ceeca55c322 +effb8c44a0e494f986c82a134dc8f335bcb22c9b22dcc34f8fc933405ab78cbf +ff5bcc434ab720b9421f149bbb19cbbd3413798d476e7b050ffcfaed998a285c +e2ca73c7163da9fbe3e7e9443d4dad836c7bbce6783a50211b1ec30bfa1f9394 +ac300690ffc549125d251ef66ab67c6d2a56cb4b9673020d393b8f2a52dc2428 +e4e8d5bb51e192246681e85c48230905bc295158d0dd1973349dcfdd88dbabd2 +84ef091d19c3dd9bc51bb23e8ba33d9a37295a49a293fcf2cfe55cb22cb10f62 +5f83e471fe89b412fb2e2f8a7277ba1cbd5a7a4d638b004ed5ec97cbc82fe0d7 +322eeebdaa828454efab361bbe8b6c8d11ae70fb599969d8a4d567b786df7f5b +876ecb502fc45ae18fd9fcaa026a043e91c05046c6e13ec40e9ea94aa2086e78 +2519d0caf55225f996774d8e78f1e6cc2a577fc1a0c513c6854b6b5b63604d55 +1fd7e008440b9a991dffa9b00351418988ce7d6996f48efe1934c6c38382ce75 +957a764f971eed5a7e1525f584c374375be918ee59af3828d07bdfe051e8d52c +8d1138c448592e567699bba9dc8586101b5f11c902f21bbc7a02b7f8374883f1 +6cb7f32917f2404bd8cf8f3c1805d795f5d4445cb21a8b88975f7dd72e019bfc +f5179356146a154ca39ec0667bc49c537d66365b326ee3f978e6bfba30b6fa60 +9555dd8ff9b9f7141d5218594af2357a9550485517c718e328112e22f3cbdd1a +14f31d388e0d2087f4b8925ec84dd7fcf32211ad6ea9114fb554dfac6604571a +62c6e2c7572f8fa22349e55c667af9c142398c28b49c57ee6e194c0d16e9902a +724771b31ed4ca2d98f73bd3ba6b250c0d428e86e8e8a094e84b7bca1303e782 +8efbc7d726e26e286732fa5c291fa3df7c5f2f1a106f3ed129630570067a6fce +e20cabed05232ba55e32b75839cefe9bb5d073e435a263f7c9a99faf6050272f +132639f2d1cccf4276a136af3186cc55cdbcfda588c1bb8e1042f8f0d971b36b +24490f00643e3d12f06d9e2c1dcf6354c43c9a679d55b02b803298222ae35d63 +022913fe88cbb965f7cfa25d6cc0127822cf2cb49d583bcaa518a44475978aa5 +d1d80df516ba119e4ee13d0022789a6c28002f2c2873b74b6ee5592d0cd80e50 +bf4a7865a33acd4963714a08356d28a8f06c2c42eac61fcc1151e214f97f89f3 +88388d612fab4d9db3e9576f9690ccb6d5738d68e72f06468d5326b716ef1239 +2421a6c7e1a37caa1abefca517322ba3ea82be708f7a37bacc47d1291915a1eb +db60b094706d13a1878e654e407aa523d36019a9939278e3e8840e54ea2610c0 +b80b10561c0268584d0d370ccf27514a495ef27076b033807a8855cd80012746 +2a471cae0d3c5129d3da2182d49c6d98e23ecefb06f397839f1d27ff2275f516 +77b5a84d7be1f9e555b8543e487eb4c4e0856ffb426e1af03ca0d7787502502c +553619682da06645623b52a8b176ed83f67485d2b5215db76a63f20ddc4bbb1c +2d5c581ff6d1bd85eb58461bb0fd47b5aec07b7776f5221bfe2c83b368468eac +89b3fd8bbcda5b36e4b2f4ee686972d7d330208582d2d5c2e0ba1023d7d6d41a +21e801ec0bfec459954ac538bd3656ef45771ee49ca82e4952708a5a526e5b85 +a1cd1b50044cafa996774cedb00b26b8dd96859dbe36c7e94dd6865dff586c10 +796f6f5123d74d4498c65cbb49a14adb218f7a021433071d1f4c1afaa7b692c0 +4fcc2cf842c152cba51c41cb03f7e88fc930cebb3cfc1760cff0f7de6d171e16 +c98fd96e14731fde068e5ba94b3ad16eece8b582357a335cf5b986f4807ede47 +433699fcf7c93d3a51f89380649a614228d6bec42a7db3113b31da83c9f4126e +8deda047e33d1adf8f5217e94553659cc5db118c2e05b8fd7b8d24c92f59e71c +0dfbf0ea94f698483903a7388ae5b63142cbc5356facf925774e74538a3f9b58 +6ff97f8b2c646be61c4c8f17279f9c189c189cb57ff2be987adbedc9f0b06aa4 +ef468081d2d8d0dcccc4c9f677543cf07371914fc2b782aa6f2d2cb3522ecf0b +6bf55edf109bbc4286721f37ff785bc929492ac17e1120e09600c0942188c1aa +bc9848665fa96caeb626b7ceedb71086ba03d23bcbd3d417bacaccf4e2e2f952 +ae5985c35556b69f8063c868b7d1eb1331d5884a9413df585b5417da7dad1282 +583265ed3f91b1b62082ce2d0c490406de700722b2428695cddfb557444ef465 +3e393602fe29c47845211dcfe5235581a1869555db15bf1ec5a79d3a5ce601cf +8c05eaa55a400c203278721d4a2ecf0f531796504a981a91a642f16b5663e6d5 +06f246de1921ff527770dd87fb72c06ef208ba7df87285c6678ffa5ad77834b7 +2dc992d7384668329793da4323a2ce41704ad33d58c7db0a629c41724c50ad65 +c0983465e64d56a0bad9a850c9532c10e48fe2fc09ac5b4ab14207ddd6e15a96 +8e39e961be569fddbb26e955a7d16aa62179b57381475f66742bf79938ed3e14 +e46ffb0bfef453137c9bedf1def716accbb025d8b332f9468137b1fcd5dc64d0 +6d4da32d35b90c3acb6b303aa470e514026d39655cfa8f15a2891f07a238fa75 +f2025fb55f2d09069e0665e66d3e98d6efd8462d31e3f97aacd7783ad544a2c8 +b4911529d4ffe3c4c0400a5de1e57cb995157ca4a2bccde33f2727db9a5d7218 +752eaa6f5e43739858d2298697157a8cbadfcb0d88adc6231af5de6a750ca9dc +0d24a065e909eaa89e70383c4b6d675131450536175de648b82dd131c3c5c184 +4c1073b57bafabab3eac8fc6368465e88c6fabe3dd22bcc64cd55769a80de227 +08528320dbda9b4cc38e36cc8b69604445f18a243cb828f05270d960989176cd +9eb49a3aa771e836ad7082458114cec87ffa24f4a0ea3bd53c552e2193b33378 +d5ca9f2f358cbf752696925031678a1c5289f124876e3425211aba69f2d4caef +7ab6169ca481717a21c5d073ed1c3276605309d6ac36f6d0d84b4a627b5728a2 +3935d1122bd20cd8b208a4a330bfa58817da742af4b071df17878edca5335d05 +b9d455931a3300af75bf0098610aaba75a43ed3bc818ba301abe0d8caab5c6c8 +2c8dbabf239c892d8b9dfdc9badf7efbe608545d24d0b390d99945507414d6e6 +800136d709feddfe9ee064d44995e949bfe69a968729d596047433ab9e07a7df +00ed58a49847ae0d00ae06ba434c55998d8d3b143fe8ccd68bd1c61a6dfbc363 +714fe2ea207d67a552ae17236b47c01f17ac2767a80ebc42efa63b1958b2474e +99ae94fd511d3c09fd514cb0f0945d1539b95fc3f11664504da92f31d52650b4 +45d60019a4e785df467351f81580f44a3f23f5583290523e46681e7151a664c5 +f3eaf742a9af0a0fd91934c16bd4384b64c51719bcd71716831af70598bc3e02 +60b2ecdc00437f8188e53af13c2d522ddd4758c2972e56f1d2b599ca1b2af198 +c6d004d64992a9995f3dc53c6ea7402b5c5d852002313566f0b2c0e6d951819e +32dd5560b0337d5d12d80fb3bce2af129dc4bbd017b98ca2aa617cdc94364fd5 +2a744326046bf67147e7596aa99a97450d8048bc4d7a37f67e68c36a2925950d +db180b913b9bec37a8f921c9f42f033224dd4babdd7983c6572a7ada0445470e +50e3b367ed89db87de9e78fae0a3f88f3acbfcba68f898759a2b44731e07f757 +1eb28aca41759e68d84e4f2ba33e4b1d7abacc907497bc4004953733453080f2 +8cb20abcf58b56fb16bdb3903dca1f0a9bc2d9b1ab109bc5b77cdf299818feb0 +13876e599c527295d7a33177429688c72176cba50385ec4e9e3c3221b4515b12 +0230f325cf351ee78a69b125520a27224e5e7aa1d88e63316efae7d6b709a8bb +53951980d7eb1404f1dc3f1d763f0f861f5eae3beebc06060ce072a92821afaf +83f444ae0dd6f92a5887c9d88673b3c9ccfee3ddce7d696c00087f6c3180f1fa +a8f183b3bcdc51d5a54e56ab3cc428e60dccf93e125c10b0e073382511270ac5 +6994493d99a7b09bdb3277edd4ab7090ee50a18b10f66b5e65d6a94f1c9f668d +1ae51f29b2697355a860110198f92f5343595317f6f53e9ea2d5ffef253199a0 +12715fdff083fb8052d8f4a09f3c8bae94ebfd774ef5d9217b691d17e4176e4c +57f16da58d1906b2b39c0e870f7397caece49eba4448aa1e7d69c196d0feb560 +34dadac8deacc489f327c3f2c8a8fa0700fba85499925c77c549dc75299d6eab +80d143fbacae56a53dea53858ba75e53dd599f2d21e8eb248b1b84dffd3cbec8 +4afe1c6a6051dcdf3e1eb352fd8f8390b230ccbe74bad7dcf6643276af9cd950 +9bff2e12ce42d634ec2a737c087e8f5e26f167cc12c1b08e32056e0b12d998cf +ad603da9244efb3a09258bbb3960b381589b20d128467b51bbf7fd5e52d6f2b4 +b225f2e11e7a8811526631cb1faa04941105b56d12f95deb8c3f255231b0c913 +5d15eab0eacb9920852d120cc9d82c47c8e67c6cbceba3980fda87f724b54cbe +29a6168e40c248baf1aba21db51008dd3d66fdc00208d1214f64f29a6039b460 +0b9f181cb8ab3128fcb47c760e3167f96ebb0427c58f9df13f1bafccb1ebbea0 +9e2f84bdbc16b80bbc97a29c6881963e95f2b7a401206ec01329b32e4b3b45e8 +35b2c5099b133d1813892cf7c029f40a619dd7fe756c54aef5e2ed486ef03198 +d2e8c7885199e186ce8595b763e4b8a43cfcd42f4ce4e22a8d1aaf5862cc71c1 +3fdbc087137bbbfe912ad0c8251a3c5ba6554c4f3110f640ffabb8ee524cc8ad +c3006a2f859b880dbee80236dbb44bedff2a6de9ed8cad12bd85b8973a4915d5 +fbea20f6a946fc58a08148a4a619d7f384e6fa47e2a649b9986979d76f778ae7 +83485b59882c1821de101841cc59c674ab883edc3eeb23a85bdbc645a816dce9 +b5fd334f88ae085ad36b18640fd077eeb2900803918f2879c94006b3c37150a9 +111406941a540a4ebb748a03ecbd3e659a0d4224155c67d01d463b9dadbd8f0b +4ca94e6578ff4dbb5ff7e13ab9bde64cb67473353291319b9b34cb571e8f17bd +4cf80ebd41c022729cac2819f347189db3b221d9282d07bc64d8e2ec6a67f9b9 +476ad8c19e1c449cc7df3afb6c88db263c507ebaa74bfe17780496867e68e0f2 +b4252bf245b2a7a3c1e4175ef753d223441656159373eb807cbd253c5fc76445 +937eec38fbf6079ab9e8c3b885eec1c050414a783225c72238508edf75f4afdf +89d370b3bdbe07f39097409dbb043fac22a858eca0a0d01e3295f4eb83b422d0 +3921e794991c0259cd5d6cb799d924d95e5afab5045528b2a489708ac1756c97 +4d39ba8c2e21fcab087fce3a39b0bc09fd75c495cedf096b27389abcb363efad +34686b06096af4b87d79f89fc3f09c1d2cce7bdb4925343e962a07436265c08c +30d15dcd2be70fede7cc885c40c541ca6c660b11a2d54bc9f6c6f5d9463d6069 +18f31695e6ceca707d6cfde30309a8c831930c9a57d69a5f950ca7af4dcba0ab +b7de0f4f2f9b4437c54894d81ae74f9864d2980b36bb0976db284dd060f4b72a +9d46c688f050c222e64304457d97b5e399c3b49c0fc2567bafd34fa5f79a5e5c +5421b37a452dd99041a1061416e5c03e5e06cacc95e2b815a5e226726c79518c +9707271cda441b2716bc959cf293e63ffdbb34aef6c38a5bc95685a5b2f55c84 +27b231613ad9c5cf08c6d5af5599d1f96d266c973bfa04c93e702dfb464788dc +b195aabc579a78faf82da7ccac6d6e17368844a24f64e251c2d2f8d2949596da +ff72c0ca3261fa2dd4dcdc1e59f92c280bd48ecd6feb8b5a4669147900be7702 +59b26a462c9a75d51b80ab7dbd38ba81b7fe3d074ffd6fc1a49a163344f7d074 +4b2d2fdca5adb0f77f32bac1bfbc7ae7353e2c10ece3f9a85737e03bcd73908f +0689cd904bab30cf82c5d582fb4c6f3e2f4f4fe4225d5680b6204beac15454e0 +b7b57b2a0ce892d36cb3a1f09f6518f570f1c0838266f594c11dbd4a46ca7695 +f102efca5b5fd529eb52cd79c066bbf5855fc8a97bded0d2e7d9ac67585ecd27 +098b7e7509971168a41d2b46d6fb1533c890aa9703a44098faefb719ed1aea64 +796f2a07bff05de2d7624d2d1f0ade5f6a0e5ed269065d7e59a18479beaf3a47 +8bf81f01804ba6d611fd3935d256f8d50ae0e747fb1a39c8ad44d27c4fb06c91 +1cd6b8647a3c7ca7fde1a10e9bcde294c18f31df8366bae4893c19c1856fce53 +546dc4a9d2370b3e92070aa8b3d3897da89b80726830dc24986d8c08454f632c +aeab24a0c0abf6ee584bda5237b4784dc89a0fc3f4a7a83956a90b25da4c2704 +f586fb771f8ffe1642d09409d5403c34cdac825e452f21798726c9942068cbde +39ea3df0c43348abcc9b9908b6ae1f5b6d158327a4aa7a65dade72b563e214d3 +581443b78030179a573ee4eb35426a2202f18acd53b2d91231d3feac18af7b55 +af3d433a7f6e1c798ffb6add911841ce599d836820ddd943dbced5c8f6c960c0 +3462a7f3eb5b3980553b7ca1e97ce2585690e40e52b226105632d030824d9abe +6575fff3c067a290f3768d44dbbf719d1c59d61270d26ba71a9f512da5449b23 +90ae165f32049f314c7c6fe9b9aa038a71823acdea3b4f4e34e32675c172c98b +d90571e772165df8ead83092a4048001813a0ddd2a7d52fff23c791ec9ff51b8 +e20f241992604af072f6a2be0909c75c90d1b9c9965526c4f25f891500183a71 +17350442f76ac1e22f0fbbc6c0389e477d7c14d6957590b65412b385f554da2b +55822346637bab07e36f4005957dae44912e4fc96a43d5ea15c7818259595423 +56fe4d7e7146522b1c4c7e925bf89729164ad3a480b1b9fbacf5cc2f2925a7ce +dd2c499d3ab39695840ec4a44ba88d981b60a6464dc2b08e72001341771d01da +137516d043c1b49cffe67f43c0478bf64ca4e09ab5b8e2eb084e2390b292cc1b +9b0c5d08cc859bcf63ddc6ed51a835917b5a773125ca764762cf99aa1b3b3698 +6c88c23d67f720299da4ca22e23b1c84e62963cb46a0e35d64186e6cff84314d +56d2d031162bd73ca3ab001ea94f4fd76cd4e00f8f4c5f63bab13b7f1a6f7a1d +5ceed077f6162e7854c44a2de0aad67aa3a1446432c3fabbb5d4d86dc7d65e70 +ca6c6d72b9180c2a0f34facb2d638885e8a4d4c936bc441fb8a69862d2e2267f +9305072457173a6ee940cc8774d0a3534418135f903b3a92c1fb144fada16160 +d6f86cce8121a0bb97ccf15780ed882ff4aa7631784835233730e3eda7975df8 +181780ac213d632dc6a4d502976149f184cc3279bf29427bb614bd976d1a4d97 +ddf099cca69497726dc5fd9b415605d507d3effd0c599bd83ebf4e6c1677654c +fcdb42663c7acc9a0165f9103e9ae93ccbfd766d907dd08d364be59df10a7ce0 +292c9a2517fb27d6f211586d5d55f0f10d33f1f3b7bcc71eef04a1bb7562ff4d +706f7a9ac8b35b2415b0b60687e51de26a0df424549fa7e1666f4d3a25da145c +559700f77795a15c5c8a1553db5dee04dd0e0b20ef2a758cb32517e301e8fd06 +c3518e004a19c8bdc1aca23b52d23c5b487c10c7dab669b67e5c5124acc99d7b +3111158af6fdef04f3876862d0595c517a0720718834ff3a6b2fd235eeeb3834 +d847a6dc45752469c852baaced297e23cd6147fdc879250487b3c19113c8d18f +24bfa6a96a2336e221caf29945489f3d041c0bb4bf2068e6e1fabca18c82dbde +8cb6dfc37c05fc3da022c2f3b72d265ff70c0512f4447aa4c635bc66e6f3127b +9e842f39f93c8416637ef7739a4b7f2fba0d68992e8ed47e333daf67ea5ab6d3 +d8f1767878a55bfc1167df65b4edf4e31538b3a1403797c5950d1e58c432daab +d8316f5fca44cf392d939d28559ba060dc81caa2a025e1461a717f228da2e586 +3915362794ac64c790fe6c127f4040040bbc319c69251519abe660938bcb7093 +5df6f48e0df68b88a0ecd053f29b5b04cdb8f2c528a4d50ee5b540b03b771895 +18c531576e3cefb897a272ef89d7b9c8cd101599b27e69d7ec0647ad57adcbb2 +1c78ec0449b81280cc3889d6ac4a5e9504d4e07189dd120204877eaa2ae66fb0 +e54efabb4fd8cbd301e2fa8531cc6a8201d14d18fb6fb0a26d963b2f5f40c891 +3310d4acd26ba9dba8b6c27c8c4f9412a79e61ff852d8d794d597f7b3157973f +76b6f3ecb66416a5846b160cf3ef0a7fc12e80691a8d798ba11377e1ad2a2f2f +c41f949eafd56cb01aaf572f913ef7ad05203a1a8c0fa408fc8583e349896882 +2c6f43108cc4499cfc64132cb33c7668ea377f7fafe353aa98e7ec049b10fa6c +c6e670463c9c7069fbd11dd6a5739f058e3de6c7807a6d67fef9447b488006f6 +baf230f997c62a9246259985af50907324a62543046c95af030c9de0976ec3f8 +488589dd2019e996538dd000ca9ea302cfb886f516e4f24ef1fae7ea3d759d17 +30fcdb827e6bd49c66415dfba1f31ca8c759b0c75c80293daf92b8e3a1d4863a +68773921803f24b542c780fdfd0da573a658bb23f3fa1de26795da07c4e8c16c +eafb740bca451f2c88dae124a9f35c437ed4a14db363158c3a0f6b4e1b383956 +d3045e1b25248f12a73eea9699f499c670f234322d0ce2fcc1a99acceb6dea7c +bdc08b9354d7b7c33386ddfc75bc6504a8026b111778019ef15ecb206f5d847f +dfd34faf86ff84c6ca94fc67c88e8abcbdfff5d6cc8dc328b91a703e289d6c09 +0e2f7b9e06b0f45128c2302b01b9e5281276ecd7eb50c59820d573f1807defc0 +aff9634a26c23ca160b222eadc1aa0590765bb4b8407755e5abe6322c40f9f70 +9cb44058189f88da649de95a0a0144b1c16a2db753de8b5cc9505e93106c55bd +889a3265a12c1c2d1ee188105faf56969b6723482792729d1e7256eabca62275 +4caca2d253383d8befdca514e71b5d92b1186772b8ce6767756e12eb2f9b5cbf +00fb6bcb180ce0e6b5ff1140b351c0ca16b41570476974bd45b187c83786093c +9156cf6672cb000f8e28043afba0cc18f9ba0b12afad66920467673f45322ba4 +ba4f10931513c7c425064f4ce357a4855ad9d5fc4a887b4f833d47d3e01db2a8 +4f7a299bce7595f01f45c0be703635065174e127c2653fc036847d548ade04ea +e05afe5ff9e6e512dc4fc4452ab652e6a526947bc4fb203b8451f30964863b9e +3308141822cdde70a577c877d909ccff7b640d7979d9b72cede8aba4a3a62636 +22a7692b534959165c2844d2db05bf8b25479682b67ecab5cf40ae1d5a4363f1 +77d02f579f58975732a83871d6fb496cae2d0fe3ea2c260a3ca5c2792fb1562f +7a7499a2e0a6162fa6e09842846051b9673d23e1b1381a3d44add902961501a4 +aa6f52f2b75c775b5d1ab54248476dabbe9fddbbfb35c086f65a5048920593a9 +641a77782a12b08a1d528791e2fb513778feea2eb033d2411d311c8ee7be2163 +816f35500ba520109e4d236f5ea6dd422c79106b27eaa6c5a2e30d876d06da0e +d6c89b0fbd06e6ab25533c6021d90430e066283b29cb79373f3d92b96131ad08 +9a473b89446950849dcebc56b0e2460a78b560efc21704c67e20014adf4d2a15 +b9cce984b9bd4ba77e74b21b1c6531110edfd3f8d732c5d3198765526ab89cff +3d9d7402709046e68b2e6f9625cdc55bc9cba2088e5162bc21819260c6874ff2 +b1398579c275a41ddee8ee8126a69abd8ebd08eb08112f317f12d467d2926c34 +304f4a0652ed7501dd1c36235f4d20fad708c01b832f0f934dedd4a49d7c2dd9 +9d593f79b4c6943259f822048015e4c2829542364924dd144605dadb88d6ae4f +5dd08e16cf1f295e240fe41dbcefb37ba75242cdc7d1701df929cfceb51441f9 +80a497b354da1c7c68fb27c9568719c2f757b6fd0c91440c1a76af2842221b6a +43fd2702b7596bb10af180dd0142ba0c667087b18762f971827e67c7467dd0e5 +7c7910c70943192a1f2031d010753e131f3875794bd8e39cb3ecbb595cdedfde +35defa0789f81d98a38ea96a4b8f83eca0f61dd5e2695e20b58255f117c292c4 +0beab5e7ec4a799ea4ab4f2b7856cf2b723b7f09a1bfcaa0fc93e9fba09a2266 +687b008cb426319c8841492f293a2244c862db425f350511d0cb6762fe46a032 +6d2ac611f69050fa199fff6892227314d3cde51370d3229d96b92b66ad0b28cd +f92b3ca6e6c4c5b4d2b3bb99221ba5aa83f9b5355afcc3f6981653eac2ba46fe +c8a19b3e62791857faf523f8be697897d9e0cd6a005dd4a1015421c5db99d42b +9eb3d4b84ed46310cb37f10addc675f235dda41cb580f4ae417637f661e74f32 +02e6ab286b562d97c5f9521a21d7a40731fed2d52f3513d048822d06c6f87e3f +9e3002c2de50a868da279e9c62726af8f26bd3249bb949b599c612d0ff9bb454 +3eef8150f2acb1746df015b23c4caa7331495eee69b41d2fd50485e29310caf8 +2ac20a50942a414c5cac8e7771dc751430ad9eaccdf97c486c28326ff9319ec8 +aa0070ca1d953245ebb152e0c5b96e2ffea4def42a413b37c89bfdb74ace3dc9 +58d75326703993a80e92a155014cebb39a7d9153fbad34923cc1d6c69e6d460e +612d0304d5034eae9096e96f1d4659a5bedff84b64a0444535be0b43d10efc55 +82323321765ce5d8006ba5875167f46ccd4b63ddacd94b250e00ffeb7be046f7 +d669bbeb86539ee0d7923f981cc91b934ed2f91cc2c21ccbc27595055b32eaec +1fa4c596d699cb54d8a0a414c6be0ef1f0c83a3b1626f10560baa8d8c16b5ee0 +97e185ec70394348eec060bc6600f6597c002455999ffb5f524d2df5c66c6f61 +f61369894c02c450c4f86372de7d23cc7f5ec99174106ab385688ce65eff8d42 +29d51175110eb1b1bbe950022bc1cafbc006e6832b9f90d6d6137796b3198fee +86c4a4d50eef22b850bd2bd14c9987b283b2d51cac88e1855a0f9f1d2e1ae9a4 +e519f51d0a485848886293aafee34058134718c728cd9f8d51d575dc0f464031 +db5f7ba0ec9ed8a369003350aabebf3db68af367a04e4636713f8df3d743cd17 +77a0cebba1f142830e2c76e9869df4b5863ffd17e902f6830c421db31f3d3bb6 +d5654f2583083b1619596f672c071b93cf467af17669f8590dfba3958f238654 +4aff321f38935142ce9a145c4a56c4077478571212c69552c3d0485f4d7bc7e0 +8c0e1b8e4bdc77a1cc84160f2426577ca36bbd080665a1db2ca01ff09a80a0aa +794e29af32f55288df08e4ae82b51f66ef95fdb7d820fd5c6deffb0b4aba4026 +af7f72ed5e28ce5ae7c73d20131ac9ffe034c3010feba86f804011f7b3d49d73 +c0f4f8b74668d55301649b253673425f6e318bf8bf12fa8393f480d4729696be +d302aa84b10a8b23dd3b607c953ccbe81df0946b62f3ca6e675b74b4873116cf +3d6cec122d242b6803f0a90073d3b0a2265ecd4da20f4a44219ea057ed1f42d9 +e3f207adcd5a9ff38765410cb7fcc818c77de1c83fa36f85c66c5ab96daf8467 +a9ae2d19db0f87fa86454e26d7327148688e26c30f8b9933761598d88d017c1c +e9b42747ef3608847b150f9f7e242b33a692f57d423503f7f9468d811f6580fd +2cfb2a3d78d687c541caee5b03f5f886f801ee117d3a08d682afb211bc189c18 +73efe4d8b0bf3e147abb8b6fe48139653cfc688034df1fdef2244a20bbfe4c57 +2f42f968aea3f9196ca4116a23b3f6147e600083e5d61facd0371497f641e38e +e06c5c97edfe3ddb41a062c889b8422acb1c99254e68b1d9ce27d29962ba4b45 +40d1e4a8126e375b6173cd6bfea03d6672ae56c06579066a463178cae3be6002 +2cb2d8879192e56ff81dc83af7e9dd4afe87e65a554f843aa4d800c2a1140572 +8c59692e25110c7e4746ece337fa1906f1f5c048ce7777a1fe50d76f2b7a2b7f +4b4105a62ec1666b06f393e5e38f8df20c8a3091b0efc85e32385dbd600b5334 +64adcb75a419e6ed6041e69f73d42475b6e0693602a2e9915f039dfd27cacb39 +79bb2a33d9634a6885e1376e868bf72088ba17fe6cdac53546c4bbbcb812703a +3de5918f28b1bf3e653ce11bea3bfa0f5dd55c85b4401d83e26d54fb245368d7 +a62c3cca7b5f6e04981ce99e4e0b0c40dee7fa54d14e1fb107ad3ae74703fed2 +94d572ac7f3cc4e488df2e936a65650a56073a073d1ef4d44fc0574ef7cf0e2b +db44bc3ba1d4123255af0ae69f5bd824695cb58a57aa560d6eaa2d77f5c5290a +cd900d7203afb1d41e99f0c54b4466240affa9354f696d351eab5dd3ce0bb053 +85a665235ab8ee4149ae86c63a16ddc6636381a7014b00218394d8b9c10050af +faaf4cd356fdfd32f0667973900751e5017440718dbbcd0f1703a59682850e21 +6cb7235cbbf761339cfe4816e6a035efbae3767e31b1c1889cc49e4c4cc904da +1dae0d76b6b8414d500ec3c82e47763ebf092de56a9274a1229bb18b18253df3 +a009ba4fa6c19c0098f8438c554cd8a3402498aa8c333b042c1f03d7623289c1 +59210250eff396c537ef2f88d87922354c6d0ef41bae5f5f37f1f5694e37476e +d2b1e6c23224b50ce014b26d8e87ab6ef0de51ab4a0889ce52a0248261adceed +05e4b1b4358f40aae4925185f2ac0644940c3aff8f2fa089dcdac68d33cc2bdd +005b70c315e11c5e2c5a7cdca6305378bbde250d359a5e8979a6816b9b923e7f +6157412c3214e07c8db7997c5568b69ec1c19fe1fd1d70461c4297ca785fb472 +9acba717ee23a8cd6678216e70d146c3c7c99def058f0c92a63d0ea99c5a6860 +185cb2330b5ad7eeed34c0df0500a5d4dc0fda96a6c83be1c8503370b9419eac +3d8999778e2bb8ca7c2340dbacad552130c81ee2783798e78e7e7ea6fcdddb41 +e492c55bafe4a6e73ef5e23aad1893d2ca5c2a744eabb60ee3adfcd22d4d6d93 +bfd39e23c9eab144785eeb7b50640f0c73fb375c859da4b0472385c50d460bbb +4a02577d61c59f5a687716353aca5c97ebed7c833f3fbd1b48810895c56634db +3ce6991e7765ca6cce2020c931c7cd0971cfd3c6cce784eddda2b8a788a25eb1 +0397664cbdafc31aaf4769186ac75dfb9495d9187894a8e32dc530e4599c921c +3ddca2071579afe0d6c5e63b29af416beee39ad251a0dadf0fb5d604ca19e9f5 +9ef14ee9f75d60d222053c9854de6c4b8ca821d2a4958b0b478f2005381c3750 +7fbb078f6d1df6f0fba565f760722b1867d921fd011e36dd068a0f550a8a4a79 +4ea2f9dd0acabad0390cb753b0dbea1477e84111f0c09dae772f01a369b74a53 +10e7a5d8a1335e2bffaf8f159072190633374a5c53cf123c04768e9bc7e9d77d +3c9733d8cb73a074c3482ad961b654ab3fc36b09049e7684337d46291aaf9598 +c296e96c89b81c71784de52e64b0ad10bd67c285f894a7baf6ccabe727fa0e13 +52d7db3f00f41f13337a1f7cdb0b12dd570c3055d309e88faf00e4c467bf608c +91aafb516b4e1fbfc7606ad6fa7d0621bb331fe779cc7d91499374b530d34e4a +a29d6ca13944fe071ed339d2c8d5fdcfea51470b37da1bcc040a205ddecc96a5 +3d1761ec206ac5c42f55aa987e78bcab3b7f397574d4cb96cd0eec2e726274cf +da566276b14b4296a37921c807346017aab83e6dcb0a955ba1b6a4a4edf57195 +cf102e63fa975983479cb296ad5ff1dc5fd9293e16aa290ad15c781c9026b072 +d25e6f290fd4e67638adf8082fc0b7fe81668059adb402f3a962569d42bb8998 +1a3fea2b370fb1d2a6df6ddcc2f21ab7f1f5be6c18001eac9e2e56a656cf6702 +0fd6a7c2c0f60bd1dc9b977e024b83128b16d25058a35ee4acc00b851cfe710d +73a64144faf72e56b5a84fb841eba11d82a105359dcdf826b7c6c5e1a85290bc +1e0f040c9bb7f848e235256ed96fb8233e496e2d4628f6d8744d6f1ec412a1f3 +45b327e2f6329f44c5876ec6d81420983d6ef2ae5c9eec07ea850b6bd675137c +846c496ea170e175a865a5508d0048c3cc663442a5f05683cdd40713bc082837 +2aa4592850c904a382966a6d6c43e3c6b639b673723315476dfd0c193c9c53f2 +7d352bd56f396b75c2c028a53c9c8a71a942f15468e0bb66e248f668cbd77a16 +4cb89e30aedea5a92d1d8936d7b8277b27145df76853925a5cd3feb2c1af9b1c +aa71e9a6e72359e34f3fe3ab2404729601379842eed0c7a6662979205d100cce +ec9a4e1f3cc9385cc4ab33d16ef19ef1d08881d0dbb3ef8b2692397bca215802 +16bbddaf13b0feac2a1b29d3810aef803dfe38a2898ddfcd136b1918ab226f13 +fe689429abda966a5309648c14ef8b86cb52a81719b9c2c58f217b84c9d9505e +e3b062bea543bdca0170bd2b97c3857cb31a894512045749e7934b62411a7c8d +f5d7d474a8c580b58a597b579e5a98d7c1df4a93693b760980753b7b41946c2f +8c734029685aa377e50899a52567ac6be92bab1a5101a5e1eadce70e68ce2eff +2d5ae25c51d504c00195de163c731fe6b0fc304ce358e4011d4f073741a3c67b +4a1d7a38c5f067eace1d439241b6722b4aa858526b5216d0657982505a562855 +f19085117e7e207a5d5114863ebaf866a7afd3b4c627e1f7933033f6758e44b2 +134b86160864791db2c948703cab80f594f78e5ae0a5d49e0e43ae069ae253f1 +6bfce015bc3a2c629e2ef7d1530808031843e4ac8fb3a23fa11a3dc2c0b6796b +5cf7ddd58f1428f9d3e283b59ab0d6303faecc89f2ed2d0148d23a5a481f5f90 +815031c26f303a9892df50ba9252152c9cda4f299cc1b53c6454f1017b7b2dda +18ba2896edfb618b6421d2032db39b3c21307bbdd4196c110b8a4564e87c2e75 +fcda36aec5a61194c7ce0d8070eb09ca9b54d5f428bd5c5371343c5d950d155e +5a4e270644dcfd4e13cad8e1f78e0746799a4f222f8050f8043dc6a00ed8b1c3 +08324d5e2f2f5706bb899698252828ca64d98b048952fc384edfdcc69e5509e0 +6987412c96a4fb3832dbfe7bca9172a8a354213d7b6a719ec732cdfd3bcb90ba +27a85f9ef43e87eae3b6409cc55542a683163929249b74a97a7da8029ad164bb +e7d1f2a0247b7924d4b80ad57e6a0a42eaea9f84cc98b85f8070b19aec01de47 +712d1ead4bef51974054706124309a1d294f797f496c8d4240546f27dcd3ceee +64f99c6a0c017474063c361c0ce053eff97e3aa4f006cc42a6fd4c5b4c2208bc +f88248ea792ba689b5bd261a2ae927717fa82d190db3f3935c6d3f56ea55da7e +bb0b196bea3d4d35a73dfce6b8f32cff7ee2b1f8d1215d18dd6ba1c025e348dc +f9096d3e6f6e8a89e424a40c60d19fc9b110289b9b5522c10792936c9b304e7e +029ba183c4b4d36fe2378c6dabc77fea173720fa876bab07b306b83db3219994 +322c5389aa057762f659140c72f5bcabe3fe3ad5b5ad3f56a835c89894910419 +e5a80e8c1ed418756e0c13d7900cae6785ca8a5a1e3ebfd46d6067e9267f8ddd +20e175a75246b975cf8aa025f37ee8e45c7dbeb263e80e4a6c156dffa46471b5 +5710c0cb4f622ea53776cde2a0388971e2e0c13753e1ed2e1fba3d92893e934b +9358f7ecc6af671737f95054f2b3d06d63af85f264669799a59ef65c0f87fcce +d1acafd05ea7f10e401f1c7ff667a7db03bdfb44d6bee3627146aad6f6f875bf +a8f04026d2c40927350b54264a916f137bc80eb5b5f47a4e798915b94bc542a3 +dcce4fed9178cf37983268a310d4053379d1a798b9af29c9f62e8e61774afbbf +3fe28347e545573727364832fab26ab7b9aee0e8456bbaabed407988faea2d2e +7c58a73e8a8880b64a4cd8e0bcb83088138b609e50fc17a37e653703d6782e65 +5915f70be6b674dc2c744669e51683f056fdedf0067f985b11571c7a2d11970c +0802200e8df409a14f01ca151af090d0c41105507281a4d4059c692bb63840a0 +c63a984f336df14465d05d88d47d2b658bcbbacae0fb0cda8bf3bba0091a8c88 +5018442f706dc593f13dafa28448a0e944660f09db884d3d340670cbc2a62da5 +9f22b852ac51417d5da41e22e71f52fa1cc3ec588468298e4655f753f32ade42 +a29570be8e817b24485b9f9599f99db749e30b61e396bbba96309f4857beb85e +6622a2f0a6066e3e860f7d928519b828bd9dc896232f65a69c463a7cad07aaad +160385b81be9149f0c06f34888dad0fabf39b310ada78f39db241e3b11fb3f85 +3a1536ee7d0097bf0df87aa07734ad556346d654f4f598e6cb8268f17022248b +72f4f90cf8a0fca59267bac79b8aed17c34368f2f279556c66c2a00aaf0eabe8 +72dd823d0bb3bdb65d175feece1fe9c7156be28a211b352e6bd4fb74bd4deee8 +9ccc00f7c43de2e20a5e44e8da8dd41174ac19d9698bfb9016a6db547955fbe8 +357ef3a598803fcb1d5210b544ff55ece27b910bda1d7b5eafc780347a212663 +16f4209158e0eebaae73d22076ea279147810e2247b164dc55d459c7a9e50f7c +de887ce4504de4ea3f29c6cd27811a2ef2e21e5a31a2c61f854c49db45d3b106 +ce5c13bf57d9e1a7fb5d3d2322e93d3b639780e12caa85d9dbd500203e5c9a6d +6fa112bd3ea41563399615754ec0eafaa67a2accdff3aeb012e9e6ef8aa1b23e +1050e4771abbdfb72b6830ec03ecebd662c9a7117fad7bb27403ae5f90de5599 +3f2ee508f47a8f24ff3c1d2f34af2ca2137caba936e2f78621a65dab062524c7 +73267aaef7cf7e8297967e59aab9d78747f7e06e783e8bc0b4f9aeab88ad4661 +78ef7aa6dc2e2e704d1a4ed82c8cec29301a124f92a0955576a852d2ff0b87bf +a5a0091328cdf985bfec4d760a1ed926f4c3879cd00790fdef3d5652f15a3014 +6db1f46d6f0b865d26f74d002548aba7aa9305a379cf51caff61a014dea1971e +009b5904e9692f53a2f44eaef644d31d4f562394cba6129ec22c23ad4eb4ea09 +35d315c4608a518352ee9473d27adadd837803ad977db501ea1d8ce4920eab4c +acb258a69b512b6f2904649ccd48b8418a5827a73b80d32adea29b2151bf9d85 +67dcaafba339f31ced6a63732b294ac78ae022b8474a97037b512309b96b08fc +295245f7f7d6f9bc52aafcc8ed8e89fd7ecb0c4062cfe6b53deb64879bd21713 +b9f713e202bb48cdb43f2b7b0989684472255a54c435c6406724f0364d79c77b +94647471e1e13feb43944b13c6f0ab3ebbb89f2c8941d31565bcef7691c0fdbc +c1c5a08155335366c01831b4de9a925e695287fada53f6013cdfdb2e38e714f4 +fa13efa973c43f05df6c917a1879e3ef78f7e4ce3b5ca73fe8400e93997c029f +60a793c62880fc164031cb44af5a629deaf80abc1b78381c5c9ad3510e755622 +52516694cde6a16e9ded747cb0d7bd90826be2307fceb09e05da32ed16677dd3 +48028814a63316f9a65f608cea4cbe4786a72f1e3480dfbdb054f842a0acf12f +e436cf9a1ff3f9610d127f8980102267ce92643cc110fb8161d7ae5bc85842fc +17470285f50fb31c0bd5ee5ea46dc8b984fca99a125242ccefcf58414da0fa82 +f63a60156e4dd6b9e7047b0bcf1a52a7e769fc1fc986f7a54d6bfc5ab6ba8a76 +f54fa5604ac5db85bfb96600481a4543674b23ae574ee1e2efa7d9edc1237357 +0dee4d750d2521c99415cfa8de1e085d73c545421bc52007c215f5a66d722e2c +14128cc7539f230ccfa692855ccf05f83d2ac05783fe054294259732892ff9d5 +4cf08e81045ba5071b7bfdb656df0a748a1eb9ad0aa2546be5b6ae340e12493a +88bb5a7f2e8b50ca8fe9f82d901af41193083fa7c45da3c1d4e64e4da341c3b1 +5d7fbcbe0cb1724c297f3783d81efb8638e7288dffe97d1d0d45a88582955121 +9d43d5a1560e9a9128daf5009f9467db6ed28a4ff9486921499c23becc266c46 +f1e8a251c7741c3f73bfb253a627c6813fd36b8fd82d699b618b97eca170286a +36a3df919d61b767c2f921060e5e219257550879a7c7a5fcf325bb702a8ea46e +76a703e602f2979d013bb6ad95066c92fb182f5f5b5f2cb44fd545565e38ef51 +bba7e2dadaf3ac938222a9f87ec95d75e63a88cc8a4efad93036848e17a65a2a +bbf3cb6263d164cfc4b04ed14b75c8720161f2bfc0c988b1dca00ea96733af4e +e3fbc6479b2bd986c7659fb6ae4e6bda87d9272f9c8688a6489bd193562fa881 +7bbdaa8910a6c39d971b7cc31b3ab5888539083c59eb7fee5d66437b57fda741 +6c3b02c443d43e013b23acb302de8c3b7cde35d97ca6a9fb19a7c330958b6ca9 +989a0bd3ba36ab567410b0d3198b87ce233c74ee914a5f6f58c5c0df4a659a5d +5c2fb8ef80291cc1d9901f19c615e8ef9144c4070531dc4d76d9a718bdc229d6 +346d738a5ae39c693c801b4fc616d3f20d6eb9952f6933f077f5aaa668b9cf3e +e1603fd51fc1bf740de0034f86a744bab7651dfd0cdb46a9a1a4537de4e85acc +28365a086712da9a929deec2d4fc44b7838366ce4cc9e29846c08d82e704c7e3 +55e79ba3d0e7e329c5eef85d0499ac4e34b4f49c2db49309462180dbbfac0722 +3e2973838584e1266b8b00d9fb7881005c607a952646a3cc77798b7d919a38eb +a4deb811b43b6c97f2254c5de407c10612c039cacdcb50e2aee960562a57ce28 +59c6b7299a29d9c5190970188ee79bf469eab09a99766bdb778947748f15b5aa +2d52ce26e6fd2f48ab146b6564c3f866d9333eaf29719cc531d0013cc71f6942 +10a881b09443f9289474854a60588d3136e27c9ab873d812bda7b2ea80ec81fc +09a7ee625064ef1dc2ba86a527c9764f8f72893623d938424a6833bed65f4040 +b2c60a6ee52d81d61a933175de8e73bf99f03886e83a8407faf83316b3dbea19 +a609c9c2057c2c14541c01738164de95af3639fc23ca32a156353ea4aa9d530c +8d1320e21c609a13d5b6e50d4b5074ed8c6f4f9111cfc5282cde7bb3b8fdc910 +c6b995c4318914600574f72fa21ff41f165417fb8559ecc3ead1dcaca89bd45b +600240ff84d8ba22523f0b874907f7c1de27493cbd454bcf87dc35a1b452fc6d +f5059f4d06808b16a18962696e3835b11fc94e70edc9e6ac0761fe43aaf5f2cd +0314c0dfdbd2f12eaf9038b5f870267558d2af22e6c658e1a6ed46512f9b1557 +438b6fd4f867f3bd6509ced7210b04fe0c0bd6a9487df66fb6c80ffec00bcab0 +75b9eef01166243b71df6ecce1a3061340847d7effc2297a6d36672e434e5174 +c422cb62d5ac62ed7ab80fbc03fdd7ce58de0f4737f84a18cf5d26a821748454 +716153fe57239e79f10cda74fdded79de6c94127b8a572407e7a476232080c00 +ac22bb880e264dff8648818b310a50e6db79a1d55e7a85bf326adfbe2dae535a +4abba3dbe107360cd780bf3aeef0784aff30f5334c8ff7e786fb62000284a842 +eb43f250e7b932543a24571dd45799041450b61500dafd759b7ac7cbee0df275 +5523c6f9f2e21b22f5147ba5fedd844b0c7aa3dd2b8b4311e0bc68c38111dfdf +3f837ac84abe936685a5d1fefb2207d13e2f74e8d48d958f2007b35d136726bc +c85be741eb6878352b7802952218f271b1c11a33e0eb73c16c05f3e76acb16cf +d51f08668d70d18dc1303bba1b7000d5a254ca352f477e24ccdad9b2d0b32bd7 +3fed6646e82ea391d2df8bd1ff33b76ca67fb18e4396f01e53dac7fd62ecb2a4 +96d221fd85700cd9137a23a0b15f2a327edf5b70cf573fee2aef9c1417c8c156 +661cd4202261485a11a1529a5b9081a992a2f686c0a93e4a75a7aaaabce85fbd +1c2bf8d2553d05e54221df19348e2d0f673b976868ac6be6c729d3b5bebeee3f +6e1a88b265d7f209b9211e59825ae90c2c12e5c45fa3e3c173a560ca9a4857a4 +dd7632f8d5250c00a4fe75558436f3f6b59d092e6d5e588b7b09149f6b0788f8 +4688f801966546c3ff66a1dcb6de17041377b2f4da1062a8a7d2a562b0ad1302 +b16ff5f630f9e511209182592299d971ec1d479d99c3ceda97e947696287503b +a2940b4ffee32464a50e9412729ac165fbed8c1ca5a9a1008df525396e26496c +7428d879d507d339b48ef3f1304e8e263903dc25f4243b3f695e1a120cddeb0e +8f5c5cffe3a0dadd412c1be96b37ceab65f351bccf10f37a149a19058181f7dc +480d70b3ae46d41fb26d81082eed253a30ec05646fc4389d55bb86b8089dd305 +71a1277b332f9c66a519af09b6e371f5583f6f02f56d1a49a155034887edbc45 +9871e4b03ff3fb926e76aadddcbb751364f48f11a052cedf05324ad851bae7b3 +17d78b69ded845723371bd16dc470c310027c9c9f1f5891f2c9c1d411593bd89 +0855f0614c57afbebd2dea0f1eceac5f675dd5bee6409735ade6df582225260e +25e3d3aa8b50d5363f923de034ce2a211c512f72810e370393e4de71d4aab536 +8c8a32493f19dddea824e8a2fcd1cc84d3a149137c1203ea1f4078bc0eae19b0 +9d8db59a486c250e8b82ae40b1d786a5ee7265a8e78390e267cdf7556fd65bf2 +49bb028bff3288ec7914a837ddf118ae76184603d9467f2673266e13f06619c7 +f082c6525d81ed6d4c76c8f9ea5d41a9d895002837b67d752275eb63f40db271 +38e712efadd0625f69272a481bc557d224bc245bea0eb63356140430117c5a04 +a459aa613653d9bcbe42aacbd355ce5fab8ce6e36c99c71ff1b7f22f3b0777b1 +1301a4f68d6a24402097e47c34b56cdd798227680e62ddfbcff4d5013a5e712d +f544027a58cc1f3644f77f226cd7ad5ea30b0d5604a83e5a0994ee08187854d8 +9786b646955b9745bf4eb8ac9b69f2c050eac567e7236520d740ea77e5f7c42f +941110711740353080260565e14929fbe360d621eb6e8c93b5890cce518f0f06 +74e3f0da801ae44c38b8f63b150afa05ea8ca135e407c7225387bd348de2dc77 +a45bc48c83985e6fea03059813a67076a9cc4221c275fe79531c86d9f71e5eba +ba8e29a97b1422a1016bab5f1c3c7029f7d2c6d250180a5fb69273d1a489a34d +d3dfb9ead57096a59feaecea4960d1e32c2cdce6fb67d140df80f79d92e34641 +b3568bd5ad27b3f079675e376fedb36bfaecec9081fc5d83e153b4d2713b38c9 +47d4579f1f0aec07deba93dfec295257a01543b3f63ce939f88f48232c493ddd +ddeacb4b3b376a2f58f6cea89100b9450d5cf22a645527ffd06acfed7c5825ec +29ef14d314126f488c58a3d9b847b4d124490300f097a2459074935f64e28268 +c386fe93d8c00936e353f87f8a8d0cf7629041806ce5ede89925155d5f7c2d27 +aff753b1f0679c871cfe959686dd717463c751737b7dc32122b905b7392feb11 +6cb2a31b4b7574bf1bfd82623efbadeed0af8c4cde94dc4333bd1bc534c5093a +8dbe61934130803e19a0ca05be4bea3425615c9a1b77b13331d4420180e01fb0 +b2ec8cee080ced654ed884ce3b2c867aab922c743db486f8cc7dc5b4f86bcbd4 +fb2cb5dbf3b9b719189a056c3452eb15e570e826af620653b1c722512fca61fb +9b5a5da99783e6158060293cd032d32c4bdc1b5f6daf8b456ae4c85a8a0954d0 +b5ab837aca5e79532449059dd665beb4ad79dc86830cfb1c23f188a12ef349ad +b1b44e459f3c1580a030bf9ed8f226fb0f5f2b044e519b5154e34a7e21441ea9 +cba2ba0da5d3733680dd37ea015d1280d8622847a760565dc08c5c3099bd4730 +771d228f253bce16c8cf626747ec7c4db3ea2a0c2738d92b4d29ecb1d86637a5 +e830e59a6e5607c1ade5d3e16325176b9a0717c1698aadf46b104824b64be52b +bf8d4372ad6a0014bee3e85f58f5c3ea9e26fdbdaac5def053d1abd5e131df86 +25e231503c51a99cdfe794da42dbfc6fd91309f8a4e1f8ca0a8cbff4fed9eb4d +92268ca5882148840f6c2ca8766f5ea36ec1a68edb225e0c9404728733f4102f +f5179f3429489f045fd9198a8b2adf0442206e015898897bf1e2193b643daead +50893ee307801eee6750831c59053419b034dedb380f5519e95a0d0722ffeae7 +71956665ff6c3f7864f285e33c7ecd02f06297cbfc9a57009c53bc949ebd3234 +0ca025e0fde19bac7dc3445838dad7a73ae5348c45af882f1fc0b72a72778527 +1105543cbecd19f419c76888cdaadea26c8300ebc04a69a991725a50c0e8d3c2 +344fd39a03911f0727dcbe477782a189680b6a592366710733012d5bdc69960f +f6099584c64b21ee2c2d4a519165cf3ef586ca5e7d5b5b44e3dc9daf4b563ca9 +1da3b46d4896bb3b1e2720825783ff797cf420aef5eb1d4ab0ee5d8eda174c85 +bdbd43d1d8ec52ff9fb539d36157117647b0faaaf051658a3e09a0f872e0d1ff +e662eb9d2a2cb43d540bf722ff71c56e3b54af7dbe48d7726b4605b2998d9451 +fcb9f2264cdaf98d6c365fa40650e36f20e82d0fade5b4a86d3d443de3730125 +d7f987ef9a9eb4a5b191897e1284ff4f9e0cde2a4892e311cb75a8760ecae846 +b78eee7de65499555e0a7dc74809db1df94f68171806a514114127c4565a85aa +1a9a68c3e5a85c54ffe33ba351ced4ab9b782049d4b465f647f0776b7973951d +4a2ac7ae7a8a85b5e20c9308346489d71d54e1c0ac85a9eeb6b8fbe4114584af +eb4f5f915fd65b32e25c158f3af11415ac12f461440aac28b717ec2455d00c08 +f4d5f6827e46692b0b506277aaed88c92b4bc75a5c43568ab95f67cf0dca1721 +a348728b055d762239188f92ed36e75e017cbd4d0f51ce3532642aa06b39b9a3 +561118ba296125882c62db13cab8f45876c1c2ea440a25383cd90ac832331775 +25ac90a4de58a813997b8a8ed72bc48dd1de89c65d0d7c4189c0d67cec54a19d +abd9a1c491a2e99a458a6721e627b15527c16c18e1e05f4bfb9864ffae9bc54f +6f33998f9e3b45aae1b35ba3f426268eaefba00e899db95fcc77d4e2ff673204 +12c4c157487fd90bdc1c4be7b6314d841b19846f0b5e274ddfb86d93361c2869 +ff1f25de67ce2329586a24e33d67937c090f692ccd4a5bd0e6a82ca163ce0f1f +75b27d8a761379504335ca26cd0f73af696b25918152aba6b1605e0bbc652e43 +8b0c109dccbc81be67b1f99d8e4a5e28fa274928a19ca83e347001ee773a40b5 +7eea0c43e080ead2063b956d8ab2297ccd5e1ccc48d022e426083743bebfb1b6 +bd2be6a6b25855082d03c79e544bacadf4c358275205dc9d9daa29fdb0cf161b +79a38f16c0e24449e929d0359c411feddb0380f6b992682a6d82ec9670841ce0 +ca146e7c409a57a7a3332d68b679ca8448a66005d55a0c8200eb5d3a27c6a6aa +8747c9dc223bd8899b6198f99db47a4e94500219f29bb3c69bd4b8c9a78fd638 +15d5bc329d0743d12e75dbe71d81254f1f03cd4b3862b0b4eedeaa28f0b78862 +6d960a4cb03b0e695f5081c940eb5a1179087dcf46aa91090dc2600a5f0aaed2 +58762f28d1a98af437492bf743d397b8fecdfd0b950136b87e331c6dc961d019 +f184471805606cbe812e205f5398c3704d273924cf624882520137f73d5d5731 +8a172e0a15cbeec2c36243756f237068dd15c99aba3c4b59d50f2bfbea23947b +43ffc5fa18d9f90bdd5b8b9b84b7f39af2d8ac3792023a3c4487165a0ddbc06d +6d63fb57b0a4bb5dcbfeab6291494e7a6fbe689cc19840a4643c0ba0334f8b08 +7cb0c8f35e9753ac5046b6bfd8ed796be9321971537de3226b9894b2003302a7 +1c829bf9ec668a1d8593ad9a8936d13c1769b68e324141c6a223a8fd5f8cd232 +b3f6cb7b580d5ccc3be905c62c05c473427be719f7d39858bb73bcbe7ffff61c +4f0cce4e7e0fb67ff1162eb2ea617d3911ccf9587e53af9d0e736e1cbfff68d6 +8e982d2043c244e975a0fecc46c5d6593c2326c4259df87d75a1de475281f089 +a89465ac50f2383d1d59e335e38ebb99577dbdbc368013951ddcf6e3b8411a00 +9a4580f98c5758334198c82544f62f494b7ca200030f530d26e7b7c8fa42bcde +bd51c48455b924b2e988ec8e00570dcea373afc43d135b1c9bcc06a0a0c2fae2 +61e3e799b5daad71e031765bf396ac3ea2b49693d449d696e95d464bffff577e +f06baaaa42ecad2fce78354dae2957a8a6bcc17c7f0515d03d98f392d322a0ce +947dd55a80db2a0c712aaca0f227b115218cdd116907bce4cb154a3df0d72664 +d4b750e488fb93072417fe6ac3a4187344ffe8b239bc6812859a92a54491c4f0 +c637d971730b9ff700d4b5bddfcc6bc52a9022cdaf8e0d2ed8cec6b771fc8059 +a6bd12dc4045f67fa165fd55b62e3f26b01dc9febfd50238dc4aeb6e4b1e9511 +c5ea45b63ac061c129d75dad0ed72cb1f43bc97ac4c0eaa22a3be256596e6f81 +3bd01f56dfdb16b02882353c25ca479e74ee4f22b9b42b7c85fdda41504f8d6e +05d4a6676a3e4ca04abe3715342b04391f413fbc7698398ab1fd80f30de41ea7 +6ea7f5c53be58d61081f6060df24ffc72604ce3baf28bdd1be4b932dbe905bed +64987fcc9f45beff092c00fc69485a50531507149ec737f66483133fad5d7634 +14a93f7940cc9651d3b805ec5553389ecc9e15f5f591cf9ef93607fcab59bcca +e270d528fb663b803ef036fb84980a65331d4b8fe6f73d7ce76aa5aa322bcb31 +e61149dbde17f4da30b5498aab5af77202a5f41178baf71f42ace41d5177370c +17a7fa17bb173260a25ad1e0b31de026feda2a3d0226c209820d11b972322955 +72d8e57511931271f2723677bb01c0197ca2c3ff42a7e0b7c16516f7d07121d5 +149406930ab5482ebebb04c6ad60a7d5fcee2124e540bfc8bbb80173ccbb678f +17b95349e73dbcf6dae2b44f9909f4cf384885452d448f5290917e7aa6da8bbe +bc02ea3b331f5d12afede563dd2943d005afa29c2881ed79106aa99f23569988 +311260975b781b7cc1e65769f79b2a584cc9e088921f31dddc88af367a5aabd2 +972a52e5b791f6c8a7d76e057efd3d0928463050a5f461d033831b3c53270bb7 +a2c1b3a7c188e323ffcfcefeded0cf0b258ba7759585920e47638aed62feb0c3 +b1cd831edcfdd430407a404dec1b677be8c83db5f385fc7e41440b0ac4e75de0 +f4db1ab0c794270db63026905005aa285797ceb02601a1b9f297c5aaecc9956a +6991c515a637b9f8e9973e0a3b61a364c3a354de1d5f26b0d6fbed80bbaa13ad +c08c08675001bffc424100a9e9cdb7d76801080210b6b2f2615b4b1de2b23f15 +921d496e62033b74eaeab7bce3e82d05a19c88fd0efc6aecd0a2b1cc2b1de179 +7400598197fd4f40ee845fe8a8b4e6934983f59b914ed0ae97683b5ded5b71f6 +8bb032f1341c0df4e5510dbfa0c30251ffc1ddf39da3a9ac81342fdfa81e037b +e9b97afec11ea68c7d377f9239710822dbec74107cb3861d5b73349da8c3e5c1 +2975f14904ce96f5c2ad88a23d8e60d8ae7dc04d8f67e00ebaf5b710c069ecf3 +168d0d89e1ddae978af187d075ea44fdc7fa2256cc939567b1105cf2b6b282a9 +aedea2a321bc1b64b2372e1238aa57c9e1a3d856327ea6b4881b593f381649d2 +5cd4674538c7a8b63ee386e4e0d5a8936a88a70d5d8a0fab2fcd74dc1af2254d +c95a65ce76a66338c9a9ecf24e60a039573f6dbcf364d51c857ce01345645bf3 +b0b252e03a88ae4a1df38b3eb336e25fc50a44d0c017e534ddcf909210496c78 +d73c0e7b15cf98443d11df1effbf95a6c77c75819f0824159a7df01b53bff0a9 +e69f0f11217422294b1ffdb57a7b6df377bf80fcdb512b17b4992109bb257afd +ed3dc7f77e6f61df884a5dc7d246e69e017871537a7b9a91d5eddc73b90733d8 +d2769fe5172be23809dd02dd6342ab07a6c7fdd28aacde5b012b37747a7dcd92 +347dfd6db846082869569f20bd095f8a952e79b3ccf971d3f1370e42f572dc0e +13b2641f7832cf3e39af33b815bcb7082e9f0cd1cdcb39dd19ac2a6cf76177bb +67dc4c278d3f87f05b5a396e69b946c5f0879273f6adcf893e4c6e46459f4fd4 +8b1316af0854ef148c3279f375fcf900252c9b430baabfd589cf229ca997c142 +117abfae2b05f6bc2d03ca69bb8a437d29e1dc4795d972b5fe1a6133d183f913 +3b8069768fe5e9dd3cd4ec61be72447aebf9edb729293af14c1d2863bf3593ef +9fff27c73f5222e3875e4b906480d0de621b261bffd5dea9d26894a78dc0ddc2 +361bf9e76ecbd49cd9991cfc98a1150a5ad18a1ea92598b36aeb9411742cac67 +4e45de0cdbed2c4f5cdbf4fd3d34e068765798a8ac6034b122cc56cfba00a055 +58c4e65e6bd06b8a8d23e0df8e486e0a5a2fd4c225d544428f857ac8c71ac482 +fb10fea11d6404307e648cacdaa102ec04e2f9b96441d78530ccf190a9d7dce3 +f0a63afb0c2d86d49545d3297e33eae51c5948a15555832898221978229f914e +67fb3d54aacf92bdc06b243a13e235518be562b3bd7fefd408cbd17a7340b5ee +21392bd02a5b61246db478763cf05d3a384d7f8f3b5567e1de1a8b95f8f4177c +bb4f40ff453154937ce4c022e936ae83a4685329cec22f310a156a7544e06176 +6f2b2d929ffa9e83d05adf7e34cbe7b01d424b5ac7f52100c0b63044af31fd94 +fda4a2a350976e3a031997097b92a85290ae464e5b9f32294dfd2c4a42e563fc +f6848666a06ae684f4cec3ad71c7f0364871b34a073266003d136895531270e3 +bc5952dcf68fb3c9d24837ec89960209f9caad146226c8642c695fb2d9c33661 +0fa6b48d6a1986f2cac14b0dec0a5d12fee1f24660df55dce4f3f22f581894eb +57b8b399e2433e65c20a541aee89722339c37d32248f46cf88e618e20d39e3b2 +91dcd866b3e126c05372b0bd6a1406c2cc3f66104a773ddad4088a2b54c98fc0 +08ef90ca8ea9d720e82317fd9059f2a2b895188f2c88fa89b8606dad69c1b348 +954bd2b65c4082bd5f579b4275ca5e4d483802e6447e0cf41e98875bcdf306bf +2c992582b1dbaa10b90ed0b76a8fa7029627c29b016a99f86f1e9b37b355c32e +165dbaa25e0cd87266df85fe0110212180b50b0fbabc24b7634d2a0ef59b4837 +f13f503e8abf3ecd1196b632e067135cf01f5fc548d2e5ebec05074f1baa850b +b94a19d1b67cf1fb274d048aba2ba4ba98d4a324fb16397a6b0b29718821c10f +2787b651b52debeeb3b1094defc4b61126b972e801bb00333a0b41df15a868b6 +827030117557f0a648fe508409c542652043f827d6e2631311e670db4b1b7184 +75f6f506bc6c29b19a04368add95622ea5c6f535745d10e1ad177203686c4fc6 +52a4b50709be94b167750cd4c7915454f371a6b2e50ef0635634a3d45472b8b0 +effe4f13e4b6f6f7abd910bbcceeffcd53a3c7d0788d80b2956aee738299b98d +e0ac535c1f4c50cf17713ce838292daddc821d6d4092099b83c38a283ae9ece7 +0dc48ac298169a37ab6aaf6f2548b352eecd12204797b850ac1e5480b03c898e +424f6d8b9e23bf1d6dbd7267a450ac6287eae72d8e00c47fc1d3b1c6df95f0d3 +3ed68b790eab420c6e85cc78f25214fe7bcb63e12c5b0b6f0c927de9c0fe0cf8 +4fcb873c629129bcd491e8e2b2c60ac131709d2a2cad4a775722ebbcc1e9920b +17621e6e4041b41336c89b260897230606cab397e1c161528016857cfa569e80 +3d96e87d93c9719ad5af6ee683f54f2636b0d1af4d937b426887a5a1ecb9bbc7 +848f10adf35f21aa97ef044d1de7b7b85222f09c52b6f453df1174d5e4e7a260 +60d208a99a893964ce53dbc27f776ee46e3b02cde9c14889d0c9881d40849a03 +40b1f7790a38ff66d56bf764dcf481b6b1dcf4634d4ce6469c139a8d7bdf3c69 +c904307973d00b0d03ba83829f5ea04b0ca3e86c905b3865f68cd566ec01fabe +a113d94401d810befe3fcfe727e75341ec57af2f08a73d3b8d36b10003c6b70a +0889da7246ab666bae5ffef696ddc16d8bfe45b11c7911992a4f4c0db8f7101d +08a829e3fbd5b0bf9d1503eb582f4eb4042dd0687e8f9523deee20a4ed1af537 +58c88763273373eb1717c11c118fa49379e91c5a9ab442e7f557d0f0eb13617e +c5859f23b95c3c6fe15836b9d0262bf3a5b38fdb739b3f79a58851dfa383d98e +82faf6a01c9c6010aa755d477d028c77ac36a65f0a6d984e041bcc02287b12f6 +6ea9542a6a9f0a009005f1f1275b140d1641c9cad31df49ca7669c32bded1808 +147c00a9974a45b84080b2364250162b4b52cff8cced97f700dd1a9327a5fbde +3fe3b72b8b84d49053b8c3d3d7d099fe239f92eff50a97ec4a1a04e4eec11e92 +d0c9e572384898299a0c6144005a0bea4bd8cec9fc82c55a679a6537d4fdb255 +78b5a6062bfef26e511baa45510be0768b0730527970dacfd98379fdbce4451d +94c2f9c49dde356700ebfb847e4778f9d325f552bed7e2ed0642cfa4f7fabffb +c5b4529948c040f3c37d53acd25bc1421008d650d8afcdb7bc229e29dac6fc34 +c7005fdbdabd57b10c05c4ba3b58e1ae5c6546f4ec16dba6b41c0a30405f9b70 +46729d362ac7b877a149ee3fc32d82c4377b448986dc74a8c9637d1fa23c4ec8 +4af690204ecd49bbde3573c98e4e8bd52d88339e047478c4667c8d4fd8e266c8 +15821509ab3ff0ed131f467490db9091b8961e22497c21f171a00406eefc90c0 +ed820bbac4965b8454692a37b4d738f60bbbe8433475ba18a230b433e06251de +f411ad67861986404d4c60c6ff1828d5dd3c7122b0bdca594129f7434b1f11e2 +7f5c85b3567d6d6d42f6a402e1666ccdba2c6cb99a20f8569c6a941d578ba843 +de1c3d55b476e5af033b8887cfec56eb194bd58df2f04662827e1ba5ab5b2333 +b23cca9ca75b93faa641e5486aa2103c9b42b7fc66ae46ea9061b4cea48b03db +f69fa695ea5697b0d2c907b46ac4584a47621262c19f47aa7cddad8522ede5ac +ad7d76d3b3b2c78a6a8266085a54408b4cbc0673c42db5312c559d7f0ce250fa +f96cf4f2bbca01d691ddd18acee7680093e0557d63e039ab84fd18820f6e8237 +b7133d6a6fb20fc70ddd95e661121f4223f2353e88112b19b771d0534b7063e1 +f1ab936824a6bcb935682e78dde427d2acc0ed993aec3f79af591f33dae6a43f +1533e530c1961aeddbd8914c7b774d96966c14014ac8be9c77e41d4e59cd123f +73a58fcd716b131890c3082c703748f73ddb690d01c966baba0bc2043c2c2fba +c6a1ff75f2f42e11a3d6615cb4d13b6b01075215d2ed746adaa2e770d3999111 +ab6f6a044586eeba490bba6c415d5b156b15f819df81cf8ca119393cba9d0b0e +d52df69f53081273fd7e1900069515735348b604945acc7af786fbe541948f3f +f2ec4da2aeb2854f4dd9b5b293a7d9d4f793c32ac565b50424bddc104e59c077 +29a7b1f5142d075c40e62257a96a243bf869deae310c07e56291eb1dc87f48df +a3e09c689395e4b26830de7c5024073c4cad2e83a148516ba8d4ead9e3edf84d +5b9b6ba17e046bc0c04035807de40f262a1daddc62517e8e2725b9eaf5a75eda +7f4e1f8b8b6904cd8412861fad7327136a28b980ec2c1157234c2f4f43348856 +b44c5b030c8abb646b34db6fc50dd6bc7611f21b77e6caa506664dbd53337a86 +24353e7fee8cfd767a2c3bf38ef1a81299d63f6327ea63d4f1aabe9452293c67 +e1c3ecdb94410d2972de4871cb2272ae82229c0a94106d3aa4fca6c9252d5e71 +20555cb3b40fb6bb377ce471646fc543cd1b008a62733215351a0be823b4ecf5 +e09765ec0abcaff0c3eaa99e553a32a6776e25566028156d272132b3ef310a2e +0bbf7a62321fcd023d7e5f5e9e1258399072dd9ab70958ad49c0fda6de77740d +c4a6c3bd35f0c2fa3f002f5b3b35ea2f7e6414ce67fd4b74d5f654e5a562bd4f +09a35f208f09c4d805f1b4ff49807a18f80f8dac6e14eedf47e6ef9e24567f68 +06c05ab96bf34e3325d62c1bbefa4262b2e47b0d0a43836b6bae4cf21936fd55 +277f6f7883cd2ba1a5f63b90fdd61618a052ed67647e85b18231965d55cee654 +d161ab209a6f6dbb54376713b077d6317460a4f24585e27dd897000fd5bce175 +3f7a9c44309279d4007a0cd1c6b8af2376aad444bb0223a1cb6b505eb350d268 +6ab02639ad2726339e2f65d347511b096d6d68c3e790e9ca33847b2722b96be8 +6733904ba796cbbb5f59e117814091f62a1553ea59de9f42fbeb8c397481109c +5970713f69d9948793e499eba8f2fa71f040206d2efb5f39e9c0ee482162ee51 +92bfb7393684ac2ac5e4628c839791663d00482678de930c52ee11af8c0b9f3d +570a262e1182a24785f82b5fc2473113a15195cc4be9164a6a3be3e1aaecfdc2 +b6faadbdd6d848cd080be77aec0745f44b16c276ba88e9e1394ddf43b7b7b953 +7f4e7c484cfee398512bf02e7cffcb90f141e1b4e26f688008f8a18f8f40d999 +a3a662e97e380f086bc13f781ecb8888d5b0f310e916ad93e35434e2fde4b6f5 +53e1fe0c4c4be92c14253c07cfa8fe669ecbb3927c28464058359f5a715c81d5 +65692cca9e7940a75006c5d15b724ddfd1dd466dfbfb73cc83969bf3f2073d71 +438cb84fcd875eebbac21c7e76ac3e800ae9ddf757ca18caa3adcf4445d586a0 +51ac268c97390c91099655e246e6f9b591887b0298dd09cc53b759f4cb5ce457 +62500888f43b48a0656528a0a662a7665b51736d41ca3c3e5f2c5a843016e5ea +ecf312bca419bd8b71a868bacaeaa50f37388b23f12d5e625358afbe9e4a3228 +55175d4a9c77255f696733f491e867a79dd40a4058622f235a43575584f9f9d3 +880c3dd360c658a4b3fa434a74d11cbc85ea8980104234570b57e1d498779aa1 +8d3a499054955673c5e84f58ff955b31add132172ce8495639bf396246148cab +401b046658fcaea554b38dfeb913eef61b6b80ed20434406f0aabb307a9b2161 +8ae73c1035a81b5c0e1baa32069b1b9c05ed7cc1d0d4a020d303571d44d752dc +680aaa3c2c4a0d440d8df9bbdc6d80163ab7c02f66f2e1616aba8ffffd9b06f5 +94d87436e57215e40724723754235af12208add4ff736d6b68958ba54ee62afc +95381908873e110c1e2bf822ed6c21480fc827b09c771e19e0ab789f2bcb992c +062ab8828c8e384b08614da6d0b709e8874bfc4475749236ffc15b3dec9d7bce +a57fc0648f9172939053819f41a5040efa9e3d12d531fd82f993515181e26928 +ee2ad2fd160fa8c4ebf63768b49e407cbf91eef20254ed9869c6db5a6a1acbba +7d48bc6b6e2ed05e2a1fa7d80c6dac3443815ccea1096c03dd16b94d2853b909 +998d49ba6988ff25c312c3ff95cbff6b7ad0d005de4900131574602b8612ef20 +0bf06bf62392a29024c71a4833b15ae027f03a9adc7c5ee6ed4ea9cd130fb84f +9ff8de93561b87cf11ff4dca949fad9bd1d23983552f9855c5a317d61b5fd5cc +c1f371a57a2cf49c0ae708cabc2cdde2d1ef8d9a280507d6cd9c083be67876a1 +f81cdffc6c15b509bd1cc8b75e2ea69b619fe4b1dc3293138c26f30b7e269d36 +5d4ae533b71918d989ae22e10b663b63511e3305f848741822579062f0afe13a +f2c51d06d258927589cc3c23d866f39054e48ec3fbba025ed5ffe6d93f55175d +acc29b3b1c3ce3a2b69f85a72297e04f50735ab8c4dfa3e8d469b1bda23c2bbd +05b69c76f4b80c4e6127309a1a28a837c53dd6d29176510861609c9ff9ef25d6 +cdcbb56c25ce17e8d38467f2363721b9ef01cf651b4618e333fa33028510aa99 +667380dae973485e93120dec80df7391de34c4d483a60535fa3dba0cf74fba7f +0a691c1db74779bf54cd49fbbd97eee52eec6947531acbb98b341ab906458373 +98ff9461dbbb47e9ad1e47026f5161d714f2f3e416dc7bd838f776e11595b127 +8fa559af216fc0c6cb039ce6fe3ed9bc2565a3fc8b072347ca953cd789fda2eb +6b6850314a52f362b8c400b556f7b1e5d26719dab9781c066fe060b8a43da3f1 +3897096a7b7915dbe732904eb72e1c8a27bc8661a127b7dbcc42bd581a7bad9d +9c2686338e39b04acc742d192563fc4267fc5c8e9a82da5ebdb24cee83434fcc +4f939c813c26936c737e075adb1faf21d67612e6a27798b041d1aa8659c94542 +4e82fecb6f1669725235348bf5b8d93a367a69b73338935e214217858d5efb92 +fa3849609835d55c56b563ec025f907274086630cbbfde50d03fda8676539d06 +11ff548062a443d8c8a362b42132a00b8e094ad19d69bd8f79bc84a4c29ddc45 +a8c719a5bb211c988b75ad653468b3a70e7749b0829c2e19c06515700610c3ae +6b76be3b04aa35751cf182b04e27797c422a741f3824adb51acffd005fab255b +ea6b14d19eac839dd9b513009bdb263da380e899d28b08590be22566daf03581 +409d22522680fa1247c103142aa868a1d77cd0d0980d268345dc9f5237adf644 +d37736cd85c1a61eb0569313bc1fb93d2d5cbc680fe7bdbf5d923aafcee5ef60 +61e41978a6c3668579d7ab0316d3a2d2a99be38b8db35211061aea7febae59e8 +512a7a2120f7a84eb99a7a3ce348cac13baee22c8f3e0cb7256a87136287d203 +299c0d94d987fe974248ea0388f473506440881c68a16777215a84a12e377831 +f734d8413a7afbcd29c759283b8a16c1a9f8e9f7814336761fc8f23639c63cac +5bfe9af279377a975bec55cf2ab39c3d9938ca996b59453ce59e40eca99fa96d +86a717caf49b6b3610deed14611ce08e442579394344622d0a23ecd380fc4852 +f3d31b60231a076c0fb840fc1a96cce66f4994dfc930bcebecd69f97b65c24e5 +dcafab77de6146c601740b4c4bafd579102f2de7b8f0f6c2e73817aa7159090c +a5bc63cb968f9372f2717554c3aa109cf1f68c90d8a0fc37ce7206ea82448c72 +f00287993ee1cc25c7c1517e6d6451b3f902a34f16f6bf331a7b25f623b5c3d0 +63e9d7824753c8856bb54a22a95277b2bfa9f18166a01053c2502b7009063cf5 +9bb126727363c76a07cae1deb0d463c6b52a1c7b4ed4ad5b7dfb2e21c0825986 +885b763e20bf90ac1e5e2fd2e32debdbebe3511afd07a766ab444fca7471e862 +67f74310fd8a82584ff3a06b475a33f3c4f4bbffd3a4d66a44ca2b9af05bc5ed +76d46671124e2be3fd3c7815f9c391a4f99e74d778e1721ed2fdd03bcec4faf2 +23a9380ae8e0fa857c458796d50cda2b3c5d22082ce30db478ed773f8ea89f92 +7e3ed2f445ca501ec51c7cbc660a4cd2b79ccbb6e46ddfc4c5231e843975635f +aa4b31f02133e9de3341c74bdc69a7b8e74c92997e3a75922ce88a147e86c806 +7f8ae7661c7361dba237c0deb7355d1d164d2d7630af89bd50df5f4b368e161d +9a82b9eea152ace11ea0df8daec2f8776122cc9c0870d01ff3c4018c74b95794 +5556c945afb4d078b6752d40d477622815ec48a5460338b2b415a1a51258eaad +49604c4959db88b41497f1aa004d550d7e3454b3e673084ed495d69d63947820 +0bcb041d464622afa8b19ae4ed760b746e858217ec50f91366135f647f6b769d +1de8ac32fecf3cacc1f86784345ca8cad23b98bde4f33d508562a0c4b3c21cef +27aa72e9534489100a45259ce8a2115bccde7b95c136c3530095632e1565b16c +2f0c5fd9f57cfb13a5b9f534f547ec0bcd0f739d9e6b82693003d9fa9d03f5bd +d4d23300ff39ce984ed45d77f4923be260e90a3f1305b78d6d01b9f949619d9b +4e46803a2e19db8b2d71b3f2b66678f2d8f5e863598c37b3991f9e91f04c0253 +29df4a9d419fec255297b56bec1283631bfba73b1c1462291d7cfab710914fa6 +ae054ad28770a387ce16d0997d4a1044398776c1ae15ca5628d8e9713cfc805a +a8f89009c41dee344385af38b665f1cb1117e51781079b1a8f9b91d816af61ed +821e98bf5b7e4ceb15bd8721a2954edebc5bffaab8e404869f0048168aee0d1a +33072b9e1973e75f316375f8ce5f664cc75ab3ab130d39fb5481ea339707c5b4 +dff73081ba5bf0a034417f3c9a6ad38ba04af48f04f4d56ce92eb48f21c0bd73 +2a6f731e23fcb1254318a1eb4993c89bbe7d60c9be2fdb9c8fb353d416ce406d +b86287813c05ed25607f47c9d3055031da7570c19f15bbb5cd7a831c1da7975b +cd284308cb6943e868c0922a7eaec907a946df4f550f4a3550c2ec263c67ed6b +20abc0e72c29819a288fa0ae4471d4c6f2a0657fbe162ae55d6b1c39c497c13b +74fec76dcd141ed1f951a346f45f8ade93916374b5b67edc0cda285967c9fe1d +a8accedf02d00573bb31f97652702e503b5f78cf2a2fb0bb11b8b997e4ad8689 +c480c12684dc6a684ac1951aa0080f9894d2176b98f17dedda50d6efcdf54660 +3a1f953157b8d920cf3a82fabff0791d74b258a8d4b11bf1145318cc9c8ec860 +b90a01c0b8825017bc8b4e3a9635e6b68c61652360104e4435d87672fe456f8f +ee2630ae25a1b7faf5005710528f3325c1d2ae7caffd04e91c0ce3ee1dc156cb +8e24f53e71407841d368654e9c422efa3195c889a5026eb36d768f261beea3d0 +6b269196d8083341068759c31e7e079a5d8cfefe81543c9687fd944e3d911900 +75232fefd963e0ff0c527ca6cefc5172ded61e44c5ef1a6963dff9464ab12393 +a167b59b70054bbaa145e65bdd0e393ecca72c1b160b545c04d3f6788e976d84 +141230cb27dc828b52b594e6884e167d4fa5e5cec5cb0142a26096545e3421ad +d9cbd4620b255d9f1e5aba1201d54598fed63f74e3a51fe207193bd5b5d1c118 +7a786c41dbc328395c1c441fbc98e371ec3a7e5db99af9bfbec96870bf09cb00 +ce5a2d782b28f7f028a927f711c9e83717e2154707c032d7971eee6aa6cb2ecc +f1264fd9d0432cbad0255bee5f258a76a14e7687570ce236588231d9ecf3566d +766eaf68f5c64134dd94d36acae40bcbe408f37029c7e1fe652d38d496ea91fd +4cfb7e2f3da1e506352962246eee7fcd1e001bd6b0af9cee5b72e81b3a7d2aac +e540bd9577f2bb2940a8e0526272f8e1731f43a621318290863194e1087c3d01 +3700058d52503a3972bbea9ee47a82ef214f56a73a8b910a004144b03a83c34b +5c12b58efa16044d22d121c36fc6d4c56e5f8c8bd2e9c0410f84909ecdcd1a1d +19fe12b322d40715a59863e0fadefe0242190a5573d5b8479057cf983b2eda09 +c9cf1d560ba68cb5a3fefe5a8f19bf051e2faef94bae7279f8b75c0d099c261e +ceb1f68b5cc43e2944aa2a00e636266f0790e6e5394a763db778dc7607f63cbc +45f29bba642936f217a91eabb583c3ffeb99596c99165c70c232a2e178d0aeff +90d23eb3ce7ebd00faf068bdc355d8771dd2b85fdf0bb95857e2ce78d280c0ca +8d0d25ae7578125fbc54e18c94b8ddd0dd595d83d8044a8e736baee6fb126598 +9a2c7fd7188dfb89004c3eb2cd76d43db744a45dfc7179332f817406b61b7dfd +2a2ed1ee585981333304ccb7837dbca3939da83738e508caf5356b3c92ebb097 +7f41c8b403a61a9957d26f20a6a842191c34d4b4dd6e14ec6ca9f97d0c092ff6 +8bce7c46f3c858288e53f0a51ad0886cebb7026044622b56c86936f15258ffbe +4b4fa774c732022428f07effd7d2e8f015619509c40457ed6d6e1be36b7627d9 +c8fccad8e975bc01d19e801d666a9c35e71375b05cfad62d86303e5d5e7b06a7 +30d13a00795d549da63a9534b97b99a163dcf72dcd6ec87d7055701e463ad5b7 +9c5be1b17c543eaf4ba68cc4b3427adf798207ed410ccef868f953952795d91a +d082d94d64e3d794d96401a53808ad59b8b183dbf6f0169d01facd53b7310283 +cd74e6d8653b8bffe739c50b3a2bdbb19144212a7636f894456c31887ad8d717 +e0b024cce5394705c5a69864645138deef91e996f7a5bb099b65c0635649e69d +71e6e7a4b1900412620aca717208f6ae1a2cbbb832661d3c4315a004285a6476 +a0b607ae385eaafaffbc5d240e5d10eba80fecb2a2597ceaa29d48bc4966a4da +01968963a98ca601ba875f485ae790efe8ac8aad745a10c18ef2b629e52ac765 +7b0ab4702988def047a324380c64641ad5d2a92bc8097e6ad9a3678d938ac953 +137c956af42af5fc4cf52a49b3505863e337cc03be61c5aebe4d9b0ea602852e +213b630c6cdc4a3d6af17ba07650a24872e1139138bbfda2a6bc0f74dd88d1e6 +320dc26937ebda0a842abbdc27492a4a5a10d19d3e4e0ea24712da2c23819be8 +bb98bd58c6c276b3832758f67852c0ba0777e6ce25c321c0459218f64f017fb5 +d1b04a1b0c438b0cfbf12411b22c860a29a8769aed78f2ea67fbdfd80af414a6 +d3c72015033e0fe614e82392d1a04e6bbdf517d4c06fa9e3820cd2f6c3fdcec2 +af3b24486c5192a1543adfe979fe7484ec0e1d1f57e9ca2057e8170ded024479 +fd1bebd9fb14ff3a4b2a95909d8179209d3df5407e44ff54480a93a9b7a2a6dc +586f096cb7eb218df62d166f4ef38cc1f46e88ed711ad0acba915d0b5960f1f5 +a014ff4e62052fbc574c4743c9460cd235d54bb0a079af50af2ff15a599bd065 +f9de737c1950bb861d837003015916f140c92ac166bfccc5242d13af4c771abb +9ae1f259453729fe7107e2e227507e078614b3e59edc00326f6a4582228201b4 +d769d610b7992454b6e9bc8a412bf8f55328e31d064ede8432574dbe50b5abee +e8e32898d1f68e0454f8e519e3e7cd6eb0aedad204dc5637e62e176b3c4c6809 +c4ea892ea7dc6106fe35c4cfee5387a7384cf60cfee79784526cd756496c763c +76cc5c858ec5fc386cca4cdbf5fc64187880b2e8a8975e58b7997e0a3171f4ce +f49f95421e1c01c7e59e851774efde2725c42615bd1c56679b9e71d7aa7c3c98 +861d4d47e2e36020188ff214c57f5a7ec7c66acbbef3ed80ad3d755fb1f51010 +41f401648632066f0e279b10681583d7e86a8bfa1e78575e145371eb2dcd4964 +10a8c9b83486dd2d885b1e0532326790dc7816795dc69b042e23f2e29d79119d +919dc084ffdf586eeb7dd61ff6070008aaf20c33228020fc6f0ccd9014b4e926 +0537458e292cb4b7b4adca672350da8eb8f769130d668fef25bf927778626377 +7cc2796f51af30c1616363dc917342ae9e9db6c01c128ab26f8debf44bc52724 +502f366dcc47b6bf656bf6067d3c5364f9cd94b95cdcc2bba2d3b75b00921340 +dd3d8732cbe513f75b71bcf5551391799dd12fdcbaaf1b575ca11eb7f07a454f +c71a82f56615789770c31fa6d1a15002525c8d123029bccbfce479f11e484a56 +67d04733db9ec87f969506fc36c120daeb5676e3c21f7e3ea6d227e4350848cb +b0631a855cb06351c96b747e1805f698ac0bddb41b83bdc5d53eecb27f0896da +0554d1a7c3913f7f81801ee87bd5e4f0d2ab96223316193936af7cf169770b6d +4877786cd14a053a5c08b02330cd3dc556a8ad28e9c383484a77df1bf449e918 +40f3b0c2ed424d7cb4e115514891718daaf60f3dca6256f493461a673fffae1d +b444e02208ddf8d258f7dc978100414bc418f908485f7ad4852615e6f59b0283 +4c73ae2cf42526fbd462c2e49846c5c6c63da394903b4eaf95f6c0fd0e179f5c +70bb10f5c710c109d6639cae495d73ec1414f36e8bd1d52500ecd8ad2da9cecc +9c2b485c278a72befffb787b5891d15392ae88c1b1555e5e34f71ea3404c2752 +14d6f7f90647f21b6f7fffde251b6704563b5a3fb55ae56ea05227cb14013707 +610a97105cb373ebb66d981cb5452db1e9b0a4de682635a84c6ce42e9f803eb4 +0e5948611417aa5501d60f8264fc74aa902fee8240fd4d0d2a15e3403c7b732a +6bdb2d2d35588f6b9bb83064909567d2ef0041227f03fb61593bd704bd1506c0 +2827f7d5db1f201913ace7a96d2bff5d7817ecfeab0b2083bcb9243d145880b8 +ccd3f6a2e3eee39f6944f8af8ff6eb33056648f217f337eac5f89b7f300b2406 +fef7704b13b280d95cea937589f250eea5bdddca9bdfcedad67a6cdd13b9d492 +4f681e026350158bce02a0e6adc4899ba093ddbb141bdaf0c43fb01f127d87cc +533ecfff83a7d02147b7d1bb073a83840a6123a6b9451c80f7a46a2b7838aab0 +e409c185864cd1d32ef65df2ab29fb2acfae36f5adc5e82c4020c88dc5a8d35c +c434525cf8500fb2d47921dd76156696cb2bbc7bc5c38cded603ae158a4fc74a +ac8370834aeb92a39469b0bec2b7a56433cae01624818071a96ba343bcdb016b +628c5999fd48af29d375f52e8795b844b1811497b12bf45deb5b83b656b06e2c +0f3d768e6d5e05628705fd4ea724cc2f26b51622236d41166a3b60713ec029f3 +0e5d66c00975083733c73e4e6fe06669bf14709fdfe0bc56728c2be42c836f1b +6078b29c520f6bf9d8db104ad0319afddfb5bd67e8f5c6d28b82fb5ab2a31411 +fb2bcb0569231889a42c61be17cf4598bae068f20233e14626a56960ca162381 +c60af1a1cebb9cccfafe4bfbfc678da8f50738e3615e91d9ea70533d959d1192 +9392740f2bf4ccf2dae4f093e52eaebebf795027b5d01971867bf1acf3238da8 +f0638b1b6e80f267441920cc1d5e5c7a7a8eb6f8a89c21bd3405b0686e9bd61d +e1d30f8af7a53a0441bb732361e7b237f24db085a56ff9deb6c5e7aa3aaf82c0 +a4eb055239735d729c0f73d95c070bdb66e4797364071973df6cc34f3c0139fc +2105529af842b3edaa3f77379922cd42e9850f7c5261a485f96a3c626bf5fb82 +83f026a6ad3ce47f0669727ff2dbfe096c4d99361d1d3d871f353adfb431cd29 +ce570852de710e9ada53af5d1ef91d6c1d0e2c8924aa853ee12785f816a6b944 +3965141e04ec1cbce385a95b9804113cc560fdc85bdbb39d5993c5437c9ca061 +b78fa6feb75e9223872c50a64a3b91bd225b1ce04e60b3ee33755161b44ad055 +75efce15c2a587eb8ec9d09f365b9b600526980e18111bcfa57a5ba3c2b3ce91 +47e8cdb7db7f9bd398cb7a5eb8e42051953b64e705332667b7e7cb9660c4fa19 +385e06217bdbc8ae2f43742459fd8c669cf4f0fb79366c54d4b4c7bf37da0da2 +f49700c2e6af1aed306ccb475c0888421264708b723c0076df2dd8976f4c6d01 +20eb32d795bc5c01a0901fea057b4cab42cef12bd5978077e64ab6ef6bde0a94 +ebfe12691a461df1efa9d741b64e623e01e983c8ebf0e9dbc8daec384120f9e5 +138b38a9bec017cdb435f8e023d171da4ba6a98243538cc437c4b6f067c9424c +bfb75ecf9307d9522b7d873b03bcc08220d0632152b562c08cf12d5887afa2c3 +7efb9d4c84f32c398882f8c76c280630be6ae24728bc2dfcb13ff69a8342a717 +b16814ec46267ce3f2790a1407f5972bc566e03cf374c5be5f4d4ce6599aedfd +c89aa0ed5b0ad382d2dcc659948c17ab6e54cc3e1979c2da5068c3cd70e36541 +3359d4a554dee2e2c8ec6352721a3dd02f73be52434b53852b27c8963b0a3efb +6d5e8e8b8ce13806154abdb4c3da0ea45311c23dfe32267b5530a584b1416d7f +dd9b2dd6f26cc7d2dacfc9263fdb400fe97934bf6f3ac7a6149b60ed3e111b31 +85a0557ffdb447c0a6de9feff4c0ac5b5a3df2a3bd6f2bb8979aea0a5419869c +76901ceb80007ee87e4447885f54d5c1f7fed4e1f500932c30d368d8e6897520 +b2886bb4c460edad9314ab0b2980ec4702125cbbcdfc1166d7d19a437b28fde3 +f29b7b0ce0421f76c5fc76928b4bd0794d6c255cc728a07d7fe4bb4ed89abbb2 +5697b25f412dc793e39c47462232b60c92546afa298bdb27d251bb6962c6d77c +1332135806795475d05f484cd74eb5548d91465040de7b793c8d3e7f0fa2f8ee +91b023435a03df808dddea875133ade703e83c972551deef18b073df2f502b4d +6b52269e06ba374d2658f55dadd6670c1b1697e7e1770c20cff14ea4e091787f +3d347f072866ecc350d0d7ce7e9520d92a948ff59bac5a9bf57405c603867280 +b4b09514a6b31741a0478845f65c22d6d83b61c97c927ad8311c82f7de3d0f41 +41929ba1123a57271793a86066a76b82b8c4e7e736b9a7d49d9b599d789d0516 +c82bf9e0b3df617ee636992ea4844e6f14e90588373a452f04b1832ad77ec66c +ef3b2dcc3dabc28ca76574998239e64ad09cb97dd8a092c3222a6d6866289d74 +8e562d9492843d1624f416c03239b1a3b7f879854b94e6ad0fa3f7df266ff269 +df00de45e806aa9128c09660470b029c42ffbdcf310e7848e62c7e5680c3b5f7 +8313550b4c5b584b79ecb643e97a41d23ac5a9de4988dfe673d8c87d86ccd1fc +66e6d9cfb18046b1999b5ddebe9da9ec207aff20ab8550ee260b6b32827f325e +2015fc2d8a4505b2f673f5b5d04ddb0c9e91ff567adf03c8e197c4a68cbf67ea +787f37ccdbadc106180f6de82d8ad319065ca4f44a534a6b1b2437af1ef454b0 +82fe70fa871167fc070e00d46272670c747c636ed02886ffac3a22cb7adafff7 +17c99a4543e83a693948fb84ea22b58bb5bb0225e73c8f46f44997f53c6b8901 +422ef62f55b45f904f1e127042e03acb0d192b0ac07361ac60782acaba46fa3a +6f4d7bc82de463250e89b2ed8958fa876b09e741158745cf4c635b08cb8ec738 +6b224aa90e21ce36543d31ead734a49b8a6a90e1013a4283ebea064c780694a1 +d87db150f747f0ca9fe20b6252e62c060dfd517b956647f699bd2b9d934c27cb +6554b4c604b11aa482c4c420ffde07cb70c5379ffc74d886ccca904372ccab71 +f3973147d6e271a008685136c4e1cfbe6c2e9a24624decf7bcbd36e9998edd21 +2a660d7c979ffdcd6eaa79df6cf6762ed012b58675f6b1741e64dd2851b47600 +179caa1613f1529ab5f5055401a4a231f890c6d99b9710d089e30b8efab8986a +f7f64db68fef76fde602f1ed611b3f0c530c46f250a55283fe8ba553eb8b0e28 +c7aed331838200bde0bb36a43504c1bbee5d19ea2c9eac7e49ebf755f7b30745 +163f25d4f2c98f5a5097e97b04341b57b78ad0e45e41d41515958793872438c2 +b67ab34f9984fdd4a5e247bae18072b55cf382e621fcff3850ad62bf6b5b3592 +1bd77abdb354a0956869cae9c9bc7ee319a518d2306ba0d35c0f0ea79cfe20bd +2af9a1222f1908eb499040f05ba8083f966913a820236325046006b0a32e985e +037c2c77cb2e8d404427f763101bd5ba8d13e27dea32326a4b2273f7c31816e8 +644dc826a1609b10d3d939c4b46ae5a2c5221705ee762b5aa9af9e7e85091408 +4d2c8fbb42e1498c3b0bec56307deae7d3a7b0bb40f854df22048d1fd3961a16 +6ec4e2111942d4574f9126086187d5b70dc8813a0faa2bd016951ef09f3d057e +fc9e205a42e36c9e2b64f107b048d08f342dc2030c476adab1826d2a4b3e9809 +283b319c437ecc9efa658b748ee0ba4dc47afa0c79ba3a9eaf6b5c1149d8b5d5 +0f2c9711d1e08734a561801eb21608dd362dbc2ea52f08a862c038cdd1ac2e9f +e8ee9a0968b96107af0db740facc0ad1a4bd1d311cbeb83801b38ff65e2cd419 +a32ed4f573977175631faaeb2579607d95502d972bcab9cb74a2a974e2b21570 +49959759ca8ce4500b48997c835a3eddf4a54536641a42fd0813b18191df37c1 +3c035644059f68314a1485a6a637f2c2a3da9a72b44a4a0769309c42d1f991da +c36c39be329f264f375c83be414f42105d4fc72650d3df16ac20c5b085993d5c +0d733f67016a72799f3527d4fcc261b4845bd9e3cee37609a7cf135230622f40 +4b3249904a1c9c8de869fe20a790c341a78aa3e4dfd94f00c1ec888f1b5c8f06 +2ae1ed6f05c1973cd82e47180f29f0b823f9ebcfa26e3926f422b2308c76402e +16b6e113dfc3e0163d89a7b4ac83cdedde036d18ce547380dccc4a4d3054ba01 +13100b586ee50d1d2753f053b376d97439a994ad377836783355c36889e16b75 +bbd064d3f6ebfd8ea5f430c7db469136b480a883977a7cd9d398163c9b27ea50 +ede514e528dcc360319b4d87fdeb174536409e165588c5b842611d622572686b +d05a178800b3e496bfa3b4a2df64192edbc176a001e98d8cab2155a920b45187 +c39714f4fd855eebe78b73d78052fa8dcb2b9a112fcbf4121cdcb83f4b4d9e82 +7119241582735548af4dd048a02c1b6b8affe9758daa0bb1ea8453492b7c880b +18733ef52deed69ec4d159467d3dbca0cb0ea92fb7d0c74345c22c5be5b42df5 +d5b6d0ab8e26f4165d2d82e179f0db0f987e5d273250df94c14609a419240f1e +9a3d5bf4056e6d299fc8d41b06d763c582eb08ff14d5558cc9c9e71b4309a06c +aa7283243a2b6f411a861e396b6e4f85987d3932da2a38949b8918117fdea995 +2bc51bd8eb62ff4b9ae38b0fdf568a7de42f9f81e913a85d511d9de69c011717 +0c2e644aca0f9ac9df50676154c38bbaef706176e34dba79e09a5cf1db1fea6b +79694c9173508bcf8aadabf7d6177ec91ba2d723bafc6cc0190c2253b0364487 +df16bc8bbf15c3d450f89437685f23af93a6d5c7c5623868d02e4929863b50c1 +6e208c8e95d42aa2cf5e7cc4c180d9d7473a6626d7460d461cfc5cf3abad714a +dfdac9061a1b54cd2e020b2554c072f4584dc3357b43514f3403c7c3f4a0d95c +36d754b0ba82e387b62b1a5ddc9027b5a8db335593d3331339bba87bbb726fa1 +d43f76ac824adaa45dfcb3a71a0dce4264b952d22c50fff921ab1ac9b9ae231d +2a79c2f205e5e674a476fd3a59c12323369d8c015ad7b8947b954d3939f821f2 +1184d4d9546bc8e816a9aaac8ae21796a6885ff6e155a4c3ef07adf0796395b5 +d51c1d4f38731d8f769a67c34a39ffe79ca60c6de194631b996168ed6586b5bd +bc40724ff6ebc80caa4b829bafb30cfc1127ee4b5000593d73af8a7fe0b94300 +52990351824ba57898d3528fb1b4a2f80d0f7d046b123ee5c15caa6ac4a27007 +4a53145c17756a3dc225f666e45f33229a56a24a1666bcb3e9b66bd20c76854e +4ece9c6429b655872622abcf39159954f4f4c620542241b2a72bf3306310237e +36197ab0e3e2f93f38907cf337b40f6baa7fd885b9501db02f5458498551abd9 +4326c8b3d9b2facd75a923cc4c81b28e170959d99be846f647bd191342ec9f31 +2549c03a7e42d72f51926191046c97615686525d8dd0ccb704820450955e3f98 +b7e4f7e4b172370747e2a9a331280d8d2c1703c6a33806ffdcc8305a0ff15223 +0c09c414fc0bb72dd16f2e644b1b5c100b6b67e861e1ba5c3365878233b596fa +42d4c895c939bb7560c81253c29f39672cdd3852666039fd47229d29f97ac391 +98eaeb49de08e55de53f215cc151c021c1f1b5b23e71d03a2bfbd752bcd9d8ca +4e48121074187d9e26f097b0b6a89258ccdcef439b23ed95adb065cf7797d155 +e1749466733f90c7b775f090c8c91183294908aa61cc50f74ff51455225244a1 +76ae6da65e4d35ac542e7fd10e4e2856982e0015bf3202dd58fcb2f99498c208 +b930aa7af917d8b9cb77b7592aea5dda15fd71b7f3cebc2f8535644e84bcbe29 +5565ab89d0a220f6cd7f0065282458a8b3fe705cfda780e01f3bc2fe62d70528 +83ca7156210f641d0c281042a765df7dbef561b7457e52456082ee1810a19dc8 +36d36b0f5e144f405fffc0b42cbe46db22e2e4cf12606767e6729405220f8c91 +388b51905c6d334e8ae1897077a0ff43ba38e7d77d13247b1f2c2e0198086e22 +3401add2e2c79ef30d19becedd00ef0705c6b372905f0a48968587ded9dc27d5 +2679e45036c611b208ca3e04e79d6af857c2ab902bba0dfff30ee178895f5977 +e80b71843ce3062df03e3e967f26dc873b74750e9dab53b31875116bf7da2ab3 +56dbc60eef24c10674ca8285e53f24de78578c047cf89c83e3207ae14f983ed6 +27743617f12a1d9e90442c72e9bb699993426f73f57e0a3dc17b137aa21371e5 +8daf6987a93aed10005a7211b6e79d4e58bb896d22b660a1e79605eeb4edd909 +46f58678d1fdb4d5b0c6c28c64a3671c717ea56371379f47ebfc9bb976faa103 +94ecb7373b649409f65a7a391be20b80711508eacdefc1645a13f3a9b96506c5 +0371da8fb2bf24e8eb703980eab2e994dcf4ce08535ff7b64d0efe69c05b60db +f0303f350ae9c799716dec5c69bcfa35483b1fcd91aa2abc32dd2fa5569ba293 +91f6e29af99629cbee1a1ea645262570fb0f8e97636f0e86b1e5de6adf303233 +0c44b0d312ff472ac19e06fff8b56baf080c07b402962ada6cb4c28e3d642159 +0ad59f8e8a8b3c9276dbab9b24ab90c6ae0c29a39ab05d18a7826c89aee16e70 +37d1f8e1b3dc639a947558060cfb05bc242856b1f95b8808360719d2bae5a4fe +098cf079f041cd702e9122f564fd4992fc48088cc58d75956ceccc0151e6e91f +b127901227b8bd1ff24412daafeadcde934d92af52751f6f90e7b3af52766fb8 +668a922653b2f57948acdfe6aa453a95e9941fad06cfc6ef468b670f90310ed0 +9a03c42754a30e25bbdcb000e06e364215786e68a3a0975bb0c0b2147a2f299a +f59e1b65227eaccafa8f722a47824228a76924331556bd00d8dc7597fa5c9f80 +4ca35842cd7bc05a04c7afe35c8b58a28af80ee8880369982cf6dd375a6abaff +d17d2e1a6e4336d97d7fd4be41505821c3acab57e64905e43d0a2842b967f7cc +cacd8195a6ef45de39baacf6e67589825d6ec003d7f10c49fb35438af13d4a0e +6d85adbe323bf36c70adf6609076e4707ac2da7d072fa00c39a15971f70ce04b +504bf4073df07645eaa5fe5406325ae092f8599fa49cb055a424b763dea502af +d138ad1720e56b738613f25f5b04aa1b1d30aac6e25640d8aa20a90fa454a9a2 +1cac0b765b2fb6f965918f6d0a22b713708555e60e93280fb335509c0bce8e3d +25ace3e87eadc11ff4783b8d8a0a256fbd402e8c607aea4e22af97e848aa4e51 +7e97b50207446bba8cd5d773d427cefa28ed620c5e95281eb37285a8282b4c7e +16fc4865db83277f3f9077c911a218fe9471f2e4b2db13e94accbf5d9ecedbf0 +5b26e49570a87bb95be20133210c7fdb5427f6674544096a594f8d177c4db87b +dadc978f19b6280501297533f3dfcd608b752c2d458d53285580662bbc7ca552 +26c377655184e5698a8406d4b1142a2743825f0da4e9d55c8de39e3ec42be21e +0bad8446fcf9bd479ceed3c6ed3e1ba200ddf8d497f4895af47b2b7bcf683371 +dcaec825609b6da86d5275c840d4917d7b7a5b4f907199eb89e908a8a755ec3d +734eae0bb28caeda91ee7369929c1594bc1bc5fe34256d36f166c7f4729f2b98 +0eeb8c8f50455aea6d0477351e1c9b65e08cd8fb715f0eb96bd4eb6ec50a9572 +6e80c030524f852fd07a8ee9fc006c836a81801edaa4602983a444d35e3c5027 +39663a488547b6f077f113fae037ab9965a7cf957e99e7913bae6d0b9b8d732b +2d5f9febb1dadae2cf2422008ae82c87568b44eff72a6b38590c2e5f9d221a9f +97ecc1d467b1d8c36635683db2339e5b3ef445bb2690a3423d41a0c329e249a4 +25d23bd3ea0064d0d294715312cf2afa4ca4e1fd4e9feafd1959894728f1fed5 +2b406665fa4742171e9f805e0fd38b1511d9a6301d8e8c89160f813ad7146f83 +c5ae9885e4e43e5980969603d2eefe1b7e3102088d54e54541438e5273730bd3 +4a7009127380dc0a216b1fb5257279aae71d3fb133c85840c92ed36893494ff0 +8bad7f859ae615cc36d66667d51cb7df4b69f239489c0ac9c5aab31e899412d2 +52c5678588cee4b00f54efaa3fe3269c475cc7cf2fad932aefbfc4b381a054dc +85a8609615b12bb508e2f279f4625fc52de2896e35be7780840bcc301c2cf43c +2c166e59db145c92cb150b1baccc1e427bd246581af0cf83ff18b983ba8f87d7 +f07edf7a0c86d67870ce4eb83fa45bb14c6130f5de1fec3495546820d15638a4 +fdbd80f0a3298cd5b6c16a0a2bfc964f74cd6b61c29809049dc47cb0f32e2e3c +06f3c836af115ad3805ec78b005ec89fbaee38a3d2de0465e0afba798c9cd244 +f606b4b87d44aeeccbea27474c9e34f404ea3d1f5f64d57e4f0c5dea11ccbb2c +2a7048c749688653b8bfef6e39e3334a2e25598e938600668017ab0a39bda76e +587c65f3c85c0e693d48d54f2f5d9d06002e256f42855d290fcc3714c9f2273f +e404c02ad8fdd1b76379c138c538326bee24375c7c9052edc76c84f9254c2e93 +e3526fdb009e4d89cfb08f0ab4fe5770120030718e768bf2ee081a9db75a131e +7bb943c36cde9770e27926f172dbca7600f577860411c7abaa4f87ce08c9cc06 +bd0d28b78b489ea7e2a8ac33ddfaa169f5eaa870ff4b619383a739966f9ffb4d +729531108cd4fad68cc2d01f1f48011f8890d55e55f617e0bfa0ff3af0aa7f0c +3bf4107a83b1350e4d4e1555d9163eef64529419c251e6a01bd433686c4502a0 +0c7f1878c01f48305bdb6414ebe70e10d467371afe86f0c12fbc6b23503c0c53 +46e3a83ec61591dbb1d0ed6df91f33597254bd07934832c4f6d70fb8ff59af99 +2aa616d4576d3809a3c12b9ed91bcd5199476fd8c65cc758b0db45a876c281ac +c8d503ec63e3a845733f2dd8f4068b02941a60bf0d6228d151a483c26be896a3 +ca79d06a5aaef1b8ec882d0b43cb07baff12616cd9f66fdf8d386a6a672b88b4 +4b6824f3b28fc5b635fff0a74cfa1ef1f2dfd2e66e247a0e6fef91be1ca51981 +a8c0faa981016df60bb051f7a790e2eac3bb79d4e93a2e088329a9cc681931a4 +991657169667b017935629b2db8bd84ba7b771cfa458436d4ede888364149112 +d24544e3572657ea6ed82290cb1757c2f902507fe011314c013bd786303e96ab +4a17b86b231d1f242ba0e05f0a277a45de0e18cc7db188fbebbfa8a595463a98 +38093c30487898c8360ecd378fa028bad99ed20adb0dabb8f5791ec2875fb207 +bf515e8483da7e7fcb0b347bbefd042054c4fcbce6dbe1315a01d151ea74c19b +18d7964520a24e968c9f4af35891d6118702f568a88d98c9705c03211e34afba +6fce0df6940a1dba13b759e16018c630da1feb0b6042fc8f1f11741726a292f7 +8795551920320c310bfec27a84194a8475108cd545dc7e10062ed819a325dcf3 +b22eebe2d10188a4965ac9b63dcad638d347c93f3fd884be8e8165f95d572b9e +8354066a9408ae17990f17b8f4d60b6a959100d7f515e53a443eb63cf7c0c970 +2e3066da5555b3ca3217c64493dc3da9b18ce201d074b0a320f9ec2bedca96d8 +d7e345e6033436592430729766451416c47a3748654b477dd235515ef09daae3 +bcac97b2f97231387dc3725914d3415c130cf32de313d1991a7a70e115c3351b +aef4857f51a619cd28a5e9c76bc4bce78c66456d0ab1fadc098fe9f20d809e1c +7b809f1a6515aff6ceb44644dd7711ecf98ae93edaa0d504501c475bef4a358c +ca75d28b9ef15e6844d07df31d14b4aab6322ff8d86d39eb8f91a96ac7b03b91 +da219bbf2e151852882a985d81a7be5a05e271e18c8672c04adc814c3cea9e46 +8836f76ba90fe34b8403a2808c1cbe031c3250b63ee446ee149a15e11b71b533 +adcab17af6931e4867f00ec72e7b8c1bb153d9375bd6e8540b369577751760c0 +887eb5259e598fc8d6fc7cdd333bd666b825f9a80d81eafa0cd50e90d24a0bd8 +5c1283ed51ea8f5489ecd4357064b5ff15a169525a824c3c11b09a470b216977 +76118670984d32cd961e01366eadb0ae8f577410f2cadb4805b420d77e26c0ee +225ff9dbc3cd7891a947e089222ec31e14ecc779c4af0cccf0dbd4caebe669ff +fd220e0c10d1fd1ed59e74cc377ca39de4b9a485d73e7e6b817df3de8625999f +69f7b6e3fe8edd55dc88a22b9d8bf21bcd6167b52addd6fb5357e37c7a4e1cbc +0505ef54e76408ea68d8b933a90ad2910824b0c82cf40e9e46d64897f97bb05a +9af1e17d34222b657be8dd838cac510e6b580ddf90537bde223d4f6ab3305e8d +577d4179512c041cfac53495f22e11f1c4bfb81b1b80ec702b057dd5b0f1324c +984744e2988d30bfbc56d3c037967b1f3dd264a6221c3c00d57474373a116acb +13426749868150afc7c324914901373532d0ad94e34796ff5f9d2be896f8f224 +cbcde34fb1b6a0158f2446c400b9f3a0fa0ba97c732dfd1df14c41ae1deef929 +98eae0aade8b6d291c52e4472308a6429f1c71b617a63e4eb2ca304ec30b059b +9fca5e87eb8ab0f9a0b1e3c5b0142ecdc0cd2787e023a73e7fbd4febca1fa9e3 +87953a690436ef2ab9156dfb845246b8b39b7116045d9d3456891be3018c9067 +2fa078f886ae666d6073ecfab4b67a454ba1a2dc9ff00f3a377854499409e330 +bba532018bdf610b61594285c1cddd625fcf85d2004af58486311211a26f7fc0 +9d50131741da2d04701b7a7bf6bcbedf8d76418880b92293bd55461e4f2b496e +5fc1b4f09be21919c12afff97c377a2574bee8e30bab8932e289c25839b5fb95 +2d142536ff55fe5714d0486e38edc0eabace92d8963b4120e4a4b69959a7f7ac +13d6bb5b1009db4ba4252dae883672ecc8263ff6a5242b57ac78136707039df6 +8f08cc0ded29df164c49dd79644ec3f6d4e4b3b5ec72e6aea600b3b5b6c7a3a7 +77ee8eaa22ec8150dd4bf934e1d879025a83ba83c53832c11b38906c5bd63629 +ed262f94a25277ab95606d64ec0bf863ddc098b1097d4701b9c74f52d523131e +d1c14d66def294766e74a234622bb9e6602df1c0d5a64eb3867e52dc3e5e19e6 +f5cbfad61ce63f3547c90c607c64dd96bddf04aebd2640b5af92e07e2cb3401d +80be5bf64f962162cae89de3091788d916728cb5b79c8a04234d92fd88073132 +67349e9880a5784c409086570cc239e011689dfff2dd653e7eb2258018fab7e1 +54d3fb7af8eee56c5b3bd7c32d7cb4e1ace3889198095f3fb70fc91bef4be012 +775006366a115921b02fe9030dc29e71a0d806b5affb902f9edfcff043fa84f1 +9f69c9d06b5a234271af0abb51b2f1641317a05382080d3b1b97c88864e5cda6 +7af5924bda58c1cc9bfadb7dd0fefaedaab6bba0ce678c0ea8bde0fa2b1e867a +1403be4b7ada509cc28b8f49e4ecaec80a550d5f00791aee587edcb0f2d0290a +ff6d61134a2732281e54325b3eee7fd7039aab86d405b6b71c624bf7e918bb0f +2eef7b01757d70c7db368366831c133db106b570b6015e6dffa6ea1692ce1617 +09dd13cea15f479a993c9b40049a08f8c7f28bd3ebad4f8091708f2a5d05076a +798729923c01f23d1e2f4cd801940e027356fcfa327b5ca19740c28edb3165a2 +eab57ba45d21b44f8540ebbd41c8241323c1a9f8ae971b6346b234112a6d334f +db3b477671e431b8868c40ba26a62c0c0ded3de3c042bf887ffd52c276eb8d6c +906a6328190ebb7f5e2810f1d09c085791f13997106bfe4cfb0d65dd209dfb9f +bc56b3a69c88da1c1db7eca8ba4afea2ed1f2a99ed8f9c0ccde712c00a8d7c2c +5de012622d26b960866ddb9940abcd3382e2238b5eb415339c5bf284714b2d4c +32b0c96cc49e107fd9d76bba7182aaf4cb5ebc2808e29a5b56adbc42739edfbe +29a761c3da608d3e91ea005614a87e0024325c12c38e3f925f2ce343956bab19 +6f0e9fefaa37c02f247e466d8cd18b5366be744eb0e3af59d75ef26ec3e4026a +64783d1355c8a4f26778b5a9471fec5cfc4396d3e27ddd702caa33f336c1db56 +c31c4d2434b9d70f099c41dcc02b0d6e91aec6ac41303119eb743e49f142e96e +62b7aa21e743e4f621813a757ab674d1032cc07bee51ea4b8750c62ddcafafe3 +b719dea408674c91200819100084037d123fae17e481a050cb03bfe58498958c +c1d8cf53768f019b808519b65f20cdeeed8d0858bb5099cec3097a238e4bcbaa +f4c469a5163a741f67e4d0b3a96f20f8a13f50c0e18b4d8dd76956f542084a55 +f1a73d4fcd7504152546ee24a4f96920dbb484b5b09d631e9d5607b1c03a6081 +118bbfb92b01a9808acd90037f11b32bd3c0c466d6db7418869860a57ce4adf9 +00b4471e529112071234957d739434647c0dd7edcd3d9c343960d4ff03d5366b +fe952bb1195bfa03716a74b2551ccab7d426dbd6178f88ad051708f4d03020cb +e9e6d162242b3df542c5a8dc59f47b679d6cca5264bcf824404a28f98506919d +48525d2ad241ee22c13536745c9c8d32101210cc00540b52abbbd88e068c0ce8 +02a3dc9577e12212478036a127e0cac49e30a68184eda5efb63eaf65ef07e57a +b978f09bf8602ec5d48caee88965212ec606671081cc27715dbd5ee686cc5060 +77be686c9ef6186123a30f641faf493926da2a56cec25831139a439b72298180 +6f8ddc1bd99e14ea41c9470e38cd949e8c83445f9e2e0c8720e0909522cdec61 +b5e275bfbc20260a87b564661e5282dde77dfbe1f9b1006ca577b3a532816a8a +4ae9464bae9c3d02036fa12ffb953801a4be5cbd1694dad4b9dff9f48ab5c5d7 +3a510777278f4a162c2f596f1a0555551d4ca3c546aec53af10555f8f8fb2698 +272df20cd07426b8132ee4884dcad5a5d7775cdd3d528d311953618b821a1266 +aab2a0616326e414d67fbb6e7a2064a30df321746bc39647f80a109bb9a16d80 +9979627cff1a5ad79d5fb07cc449343e99b50b7fa04a3ef0ced35599c8d04fdb +09f2124c2087f353a99b6835af8b776d7c6f1057e8aac7616545d7f4401a033d +5b5b2745659fa0a5e47049250165f7c15eb78cfed725b844d55eedbcfd39b7e7 +08ad20377982c8814c78c712516f8adf1b6f6b495ab66c79563c097f168f69d2 +b2e307f21191edc47e33b42bdb24f0d422f7e4581e581795bec5c722926e8e17 +37de6ffb59497966c58abfc4081104ab17eb5e68f82fb7388d950e6ed6a4b1f6 +89311192af6a1e7039e2a3eb5008b921f2c12e7473cac603c08c758a29ff319d +d24e88d4475a1edbcaef2bddde2e163e27557de4fb73cbdbd2ab8586a7184829 +67b875cbeebd4fd9f3747a451a1626fd744cdf2e42fe682782c0268216d8fe7d +d7dc7f96a82e76eff2b6235d744d2641abb4674d8ca8059b9c69b8a7ffe38bdd +fd4361cdaae2010d6afc8acfaf96bb2b5dbea3969992555b806cc57ad8f39b1b +34b801ab7c2a579c01c0b5d054de52e13deeb482f96777b88f6ca5837d9a8bca +60628c6a83b5a7fcd18fca71243a308e034e23722279bc1b7bbc0dc2c0b9de88 +bbeb38825058f980d9dc37c776c1c8b1d55e13d520d7078f25f00a286e95e126 +32a464582e3a9f51a2961dc6c87eecc633b31902ffe834e884789eab3d5fd66c +7623082e9c1838cc59364608cdffe40ad60c37551c917350d7a0000005b23003 +dfed20c4b07f01f8715b6ed6d0980ef80ef7872c7bb10060336dc5ce5d8940bc +79eeb0b8db6910b1d7357574dcd3dbabeab41509b520f665b2b209de795c3de4 +b394ac175d15cd237c0491ece01fb6aee826d76fe156b9783c7ff2452e94ca79 +edd6cabbfc3ab8b32e1bc333e64e3c11c4cc2fafa892f665c2705dccfe6a935a +fc77a8f778d2d44dedad3fbdaeb3da32e168f1019ec63c13a86e7c9e077172f4 +5a79ca023f0fee92fcacff7aa6fc7f01144abe5b0ab855d50674fa5a2ac4c994 +bc5a319092d236e736d4a7809c9ccf3995d07d2bb0fdd958fc6c2e638232f76a +8a3367b781280900e67cd17d2bdb31dadc3fddabbcd0e39018b1dc0ba6fd2da2 +b66f919214e79d690925fe874e3717ff48162fbad35294dc824a52da586963bb +de1003d3b0c532f4e36e5d46bfcffb25e60fa6b87396b8f79798e6cda05372dc +2ef0e37e318b9b172c934774bc6d09fa2cb455709a6dd5cc5802a9e1bd05dcd3 +99f3a4ec92698698d562fc5fd36990a9295a8717060bb841437ae9010e5ccbe2 +e12ab8880686b6523d5d92f2f412025e17f9eef1fcb977ae60fb15bec8a450cb +3a77621a856e6fe23279f1f0dc92d63e325a79438df7d02cf53ae9faecb1307f +631e010b38f7fcfe9661aca8fd28181e276b4499592176eb2556d922665add60 +aba97080afb2db558a71db4ca26f2c465f002059f795cc1340d68f9f230819fe +6f70a8b16d59743fa5ffcc848160a36283344b54916ceea5ed71a33d2f686d2f +fef1f10be9398164c34230a1ba392c2f9e92823f0bda7b77684767693352de5b +9e2b45e1d6a04cb1c993bb87d1ad9c4849f142d8a7501815bd611e12b00dcc58 +abaf4746a1bcf9826668650d3b992b4fabb1ce8883a917662ad7f8876a469b30 +909adcf8c9bd4f506b4deb590de8affbc2b42b213be7daba0ab647f779f105e0 +77e22f2707a3eea8ea9b41808aea8b6a4ff37e5de6b822688cc355647cf88241 +cc4ff980787e0f64b0075203d4595b097869edab067fd18945853b1cd84318a3 +1faad608f1fbb6672f902a36885a97fcd18622373a2868121f0b4dd3d8ad99b9 +f76b56b9ecd604ecccc1fcd43eebc33cf559ae9a3c8778f8106166dbc1697df7 +8aad95f475dc53f6d3b31c21288c5d268d408651e4c3b4c104a403d12435637e +373782d6eda0784df319d8780ba187aa8024449c40471750047adbe64192031e +269f44975ccf5bc539e12d6e2d27576477d152d576a36613c3137e6ceb9944f1 +6ae65685254ca3495726fcd1f9d06870a9b6c5bd2a95f8a17589020426b69aa3 +07e733eaeaf34e9f24d5bee78857a7d06a116a19bb4f51695a452b9ca38535ad +20d55a78964370f6f67653e4b04319e6147ee0a19d24733fd417cc19905dc839 +8d0205a2c7940ef111a0eb818783c95bcdadcfe4492a27b0c513601556d4b516 +88a818d2be71df4cc5244d499643d1a12a073ecb926a7b852120ebbad737b605 +d968a9c123db6763f3cdce56c02763a6aa8b4a3f8c730790f9e0af997a93efc3 +c274a235c8fa13f243c3793958387f72f9abfb805e0560c58981c52646f61dd2 +1fb2612cacb3e80836613aac4119da5444fecd3fbf68d43840df84a7640d329d +8cc7dcf1b6d9e820e1c6c8766effea28c000c87aa7d751ebe9a21c294d62680f +63bdfe783a7980d4c25a50e0fa46d12006beb8405c3efe85bc0e4805647b4407 +4220259ac9370a57a0f429a785a6db781aa806b54018bccebfbad5a8fdbb99cf +acdf6eb0fbb9785a5d0f6a933bc6ae1e6db1105d2fa0539cfa4d05718b4feded +a8d7b910d35c3063199cdb50a6d612db22b8f03f0b2dc22134f3a8a76fa16640 +2e40364827239497d2fe2a228ab977117e8ddfbb73b85bc09645aada22d4520e +a2dbc8233018f928dd9775fc7a7fc4c15e912a86d5fab9a1b48484e5c1df1b9f +19674da9911988badd5b990dff6d7111da0221bf8e0bf72c6d5c0f2a1c92d99a +80ef43d90b3297c400c09fb81132d47de9a1512c55747b2b25bad75d9390c6c7 +a43e2ca626990afafe55dc2c01ce8837048e65d544c41fd7a1c6ce37a6e7870f +d6b1d234bd77f74a66f72873d52875d668b3ffa942e9be83a6ef9653f6b3daf6 +5bc745a9592fbfdb390dd0175c1aea55110b289b60669e7ec4af37328ad9ee34 +b405798bd96ee6585a029229e5a91d25bccd5554f20d675769fd106feff6a117 +5b7630ff007d97518c19911fb5087da269be24615aed710c0bff0bc71d1844a9 +b736702d1a352d9a91510a63b066fcfb840342241358a3642ad047424e12d989 +baeedf425590759c4e54bde7cac2cf147e24e7dbe2aa487468ac95004bad42fa +c6cf1f51a66fc3821e65d1e06f172c4926a2662e4573ead043fefa54aadba02b +5856322241737cff0fa285e193525eee564c57a786e138d722212eddf4c4fa24 +1488b23af4e00b88d31eabf660011e6acc8a31dfd35b50df3cef97fea1643c38 +443439766ca08bc69477fa5a634da11c3e1452f756bbc8f97b8b3dcfa6ddae70 +3813a5d6057b7e6e33b6d97fd1682606fbc0b5411c9532d2e95afd3f55889e38 +35d5628416a0f0e36303c04de634ad4d64f62a4ff858882e9da49934fa5440bd +2cc52747578639f752c02107c19a24a9ec129e37cb66b78234652ddab9225930 +2551e298409a60c69056b167b6c6f3da993ec71cd15c8a5129b34723adc1afe2 +6e7a58877a9850e2e6434e981ed03e6bb4ddb384cd77b13bd4dda178616f28c4 +7dc43dc5d23fdebc179b6b6abec7792153864d654db430450b328e14075619a4 +61d183979fb9d6a0ab24d62775b5ab79a8caa6c42eff5e7427c2a899cf6bd6e9 +51e2106d6c6721679a6bc68a1da6490e68ae57f99fc1bd85c8c5d9a3874a4cc9 +8442ae253dcf58fcacbcba85f026526559b524463fc07eeee456091d639f1f53 +95f4703dbaa63f0c7b1022a8720c342ea48181e9a1c00025ff086617fda2143e +6d90fad54487d9fa293c61a08218d4e10ebe9d52a8efe21fc85ec7d6869d57c7 +a4352dbfafd453c0f971c113c13b3672430dee0a9ff9bb2da55e9960216bd86e +cc88c76f6cced5436d27b6bb699fab96f9720a3b0d6bd3a29c37b48b073ae6c1 +e14a53efbd6e23ea65a19f3fac2a82d3a9dde9a431f0214a3a322ae8afc1ef13 +a25a0c2fd53634e2caf7e16ddaea36e0978cd690b1c47d465b2355145bedfb7e +4f12b805dd6dc0d792f4e4ad3ecdd6252c52c37794abeb38fd3819a00777cd92 +4a9d0dd0bc7b6f8a9e9beaa9719712ecf7a901430b53ab06a582ae7825b8ee58 +9b6293746ff6b3af99b7fd351a707bb5831a92a05aeec8538ebe70a6347d1e0d +29323f06cd94f5b57e0b04d06c859c34a30859708740eb45ed304abdc647e324 +b57bb2b4624982204a9cfd7f7988263b6a97ebf5b8fb4c43e7c6c8da016585c8 +947d8934bc7de05a26e4fd8c5a0b440dacc9af70ddfe658da7230c48b5841b0e +278b970f45d2005edcb8dd04a897caba9a05c8cef161b7868c888739790c6d1b +65dcec3c4e9f330d74b9a39baa604995192ca8fb4ef9b0bee3bf0d86399fb176 +10d126ea8e28b74de459cbea36d4294833182e508371b56729e57a2856da3c3f +faf1ac50b210fd152e006114a6b2723e3ce9c0a89c1b943bf5d5cdf57cc9fed5 +a740776306a40bdda56c8f8b78e11401064f64b88be174aea67d56ed8068bd86 +7e910c7ab4fd23bbbf3eec6f1f4ae19b262ebbdfdf0970344cfd750bfd72654a +a687a33c2dd414d3d504154b5d07e20a9d63b104036580554afafdc5834970e0 +fe1fe9a411cb8a667c94e697541f7ad4ba5d573e3123e0345e7d26498c6b9dc6 +ff7ffafd775b6fde353f82073252685bd58e6110e37c11f195800766e9c3f350 +bfcc0850f54ec010b0a99d754cfd0bb355a7444b580858b4ab9a010ce907fc48 +bb8085f1fcd72fb6594411cc5e991e7a457428ddf30348626625b49f9ce24d7b +ff233104dc85d6bc2ad6e9712241d7f519ed2f8be1c035042619fd4d12f68712 +2e387c1f75f7b59723f477efb60b997ebe56d73a6a69af2559700e506461a70f +babcdb2a71d0bc1925e7eb4bedbcc585c81e373f6e1dbf8fe261ec008e6330c8 +de18bd5b71f398010da73716dd882272b6c3d24ec1ea387e5c9de73a70a76f61 +e125b0397bc360dfd193944191557e20d48f157adc8f6f95df05e00062ed4ba0 +99377e067856eeda2aab66108a1a038336cef2129e45d08ae776f9fe51920fb8 +32aacb317c7d39b7d768457b37f1349239564ab9b3456ecf48487b404c925ccc +4fa3c04d7b31b0c762a7d2dac2f6ed8ab2d7fefc0e1fcb8f64a6f20eb0966bc8 +ead9ad08f1bb561a5fa79ebb1a15d66b938e0015fdc068ede26b05cdebb83cd5 +538057f2669636b84970aea930d36b292326c0529183349758f3ec86a98f211c +32bc48b7e10f34dd9d3c07171f5b5ce09ec345eb9fbe2a1bb648c0cdf96d456d +b5a7888f0f1c0c9739d7cf3945c7b6d7d3a0afc42eca7c365354a624c7fb9a34 +a5e995926a4c8924f6cc7130f3097c5207ed178eaa0f7c366c03fb9573d951c5 +2cb8a46d1cb2d94add7712260ab7c0665dc6fe2f0b09fd9d0b66a9dffa600292 +43f111acfb90b940a55286f3924a34894421b1996c46c6674733a8e33853f027 +9dda060091e9bab715b13e531a764dcc9e051d7eb66059e758dffc84982ead3b +ba28e127c6e261276e26afbad0786310ca97102991ba64f7c52b3bb6863559cc +799f9803666a639b4b4166eaf28d10cc273a377c7a701b1d90101d1024c5179d +3181c5ca30921a317cf0c0df429e07d77de00f3ae8c6e04e3eb4ae7b6b19a970 +4a2d0d42ab68781c05f77a12036ddeab9d03673373f6a42d36033d54f5cad69b +da0522c4ca5c85894fb11494a697bde64107db5d9ce2de7b4750a6079f76b123 +c35b7b2f3a6c5fc13b57e93cc5bf67ba4b0ddddc94dbf894becd328a95c4d7c8 +2c14aec38e78b479189748a88cceee30d487eaca37aaa9c9160d9d09bb9a7957 +8cc1f8776b48b51e7ac79ea1c54265e5e7a78cbe85e84a1cb54bd8f4ab34f019 +a78a43b113a63d1a3afc94b634dcd26a3ca84b603b19d83777fb2e2f76ea7aa4 +6cbc4c0f0732c03c6bf2517627dee01cc2366aaa0e15e92ed6f1392662812bca +ba62b9b66dbcdb97d5a958afdaecb10949c560b048c9b09fe55166e427c546e3 +bff75de547e140a5a81530afb49c3980cfa6dc4aafb1b114f4099f4f043f70ba +655c74c39fa54c74e266982c2c56c99d2be643aff54f0fccbccb65adf1efc1ca +1cbd28325e28c91aa58c2ae756643d5ec570ccffa42719979f36c612070e70f5 +85c0f11247653c88436e22316e68790521c9c9f56f782eef183b117ba7987d90 +9e526226c7dd19c3d3d47d117b73c93972790a1b88332fe1a808b897e597f439 +0996b9ddec0a461acd9ef6f689e5aa710ed979908730f698ffe5c6ad3e1e4330 +4acaf415ce23ebb54e89c0b8cb34b50be5ffa7d426f2ed844213a39394b9c20b +bb5125cdc5beb2570dd19eecd3b33f5431984e5cf5a302e1400df306911b357e +6e6489db69500c38935ed04f6bf78ca42563f119900d98814f6718767c9b5312 +ee13befdaa99718b5adfd0b1bcc9507e8b5fc3ef40239bae0b5404edb34139b1 +b847eef826c6aeb0b5f26bef1e1f69ec753ac357ceca2d6cb3ba9b695507331f +71e7d839384307d0a8ee2e0c6511e1c8b5c8fec27fd388b618cd2b90ea63e700 +2cce0fb7c7a1b689347ca7dab961a3ad4023a9b3e7171002586857256d588ac4 +2a0a92eee867ca5cfa59f83a0e3810f6989bbfa9fd64ea74e21e48c1b62ed6eb +f660a4964a204be330fd6f8746a6867f25ac6172d11b8d406d2e8464ac4fdd68 +6c0256adf91bc2fa0d92cd0256f19df3b065a0cadd95bd2ed6cd766288aa3ad3 +c9b1c53e21814d66e304226f640d4df1576cfc0ee22eb28f84f788c22ad10754 +8db00dc51bb6d231f73fe9262681ffc37e28260fa69e53f8b8afcec84e1769f9 +b6f0f833d53527730fb265728e064c3687d80088ce0ccad2cc21b584c3495fc7 +aa84d0988e579f59d56b29cf982ba93a2fd6d8967d90cf2ae2362d695c986741 +e02beeb855ad623a13cd5545e14165b53cb3babd13015748991cba7eb32d159f +04c7d1f316144806e8fc46b2ea458a48b7763d82462e2613f468db3d7d81c035 +5a37a355e0ef87337c22329968bf227683686773a822f362c79ff3c837639de9 +8c932721be4c0ac7d3095f2bb9c6072a560f35811c75f2326067d4beca2377a2 +4f2dc385ca8004279ac1d79daf13d9883baaca24ac6fdbf9fc6ec9a10b53acf4 +ec41f98a0c6b8df23b4754c6ef9c59743c60fe4553fccab379e064ebf4d282c2 +b5e9f8c64719996a64fb8a3724ae7c85c0f3c4ec5deff42cce09280bc3f3edd7 +55279d7266a69504db037cb84820cbf44d86167aed2c9348350606151970d386 +fb7850e397df8c5154a9cc0796642d1fc7b087b7cce8535f3a9626460f209d28 +c21cb3d4d0b7b81d4ef039373675aafbdfb154d0a2d00f53b9c7a1ecd8f9d746 +0613ed2b081f0ad578633d22d4390247ee06a8cee9903c38fe97e382129ca97f +e517575f98adf9840707a80f8134b06d04a18870fcc89e260b4d91e48d1eea17 +e09d2d005a1577fe2c77c7e83564ecac7f2ccebade0b70fc72f8f789211d079a +5614585d529351b8db86dd6063d1eb892e745d3294f56b3e5c8abee14e7d58b2 +79eaa1f3fcfbedbac64fe2b41119c3fa1c567684c27a36fcc70777dc0824bc1a +6d0f2bbfed8438f3cfe18a28e41016b9a07044f4654ff829ce4da4f50834d48f +fc55d1dbea5b7c7e94952914b94f0d87b165d2b600fd17ad6b654b4f707ef8d8 +1fdea286df0bb6133c49af5bce41fd1764ef48cc194189b7de683992a10c7883 +c5b5d0559fe30a3cc8399ab2a5d5c1a2876584283bbcac2d91ef2cc238bdae3b +6b55869dde16c723adb9a23b3b65bc3cd9062b54fa2f77e4b6cfbcdbb558a29b +aa9e2026513f6e563740d52edb089108959a8ab254ef99feb04baeed0b40d33a +d3a6bb43631879b22ea3586f5508b397eccf78b98888a99efa76bc562e109fcf +cf99c48273e965d47a943d86d7a38c77bd811006bc0d33431b8ce4ebbe315948 +9a5d2271abc7de3b01fa4f4f35d44123e6a140f591b88b199aabf211583bba20 +ed631f7927493ea283fa93dede99ede5e771ee5ff5ec9ccc9de83473d63121dd +91e5ef259dbe0b9ca819b85b8a567ce4ee47a850a1746c1a8e59e4439f215412 +05e951dd450d44f27ab84a980069f5bbc831e102cdf2c5b1f2d66a9fd3ed789d +5fb57335766628b5c8a4e6be76a2a6ad067069c4ec865aab594d443dd111b190 +3076ea3b3fc91e84058483067f64879ec713750e17b47ee2abdd428dd2f75548 +a33971df717b8cb20c851302a644b707d93dd51e5e280c4d8252a5d2215a6e39 +06139eb1000721a964cfac2a7449c218361fc1378f602ab8ec456b32f39ad8e8 +ce40b8f786d27b845b1dba090ad66d5071647da1cdb78a2605d8fe05fe56294b +c12e77154723153889a9df5435352c95a3bd6d1dbd4db981018b5d79fa7906c3 +c2caccae263372ca4cc9e15208fbecbe5026f0fc432c57233d71b6db22027f28 +97fe35c82ce66aacc47bb8e55d35bf78ffe7ab3b93c8f9948ecc581bb8496201 +e00e278370bb407bdd04fdc64b967ef0ac2b3ef5af58f1c95235da0e4fc72ac3 +b278c4ec5fd46bc63105a6c4167ea148ffaa1c45de5144dec85d0f251b0b1dee +a972219c01848778327e1f447ce2c78b982cd51032bb1ce514cdfd406a4b7e49 +107e977e91b0ab73207677a7f3ad3f8a4059e5074173de94dffdb0747fb07860 +2bb63c7c03876e2790f7ce0df460a0ce1ade001700806b06ad896732ce058a50 +bc72d1d2ce6071c02b9314f6a6c7ff982a86f8af2a65c37a46f8713bc7ad5976 +7ecf7b2dde0d0023e792e437062436a5ead493161be1dde6416a1b5c339eda45 +d6adb8505182357885b371e8db04d9d770d6b169f5b7bacd9d5ede7747890423 +d8b7a83d355d226e2a50577b445a613e090be9df253083158dc1d3b2340d8116 +2b0ba63641fd60b044ee15e78c3d0ad4c8304b3b7f3efe7196d1f18508066a1d +99c799f2f37f01bbe1cc3814cb72f47053991bd1e6e6d93b86289b189968da2a +3f097407e4f6f943fa35ce842e31f8a1bfef09eae8db1796d063840764c2e5c6 +d88df367032b1c500593a14386cfa805d91653d974c1959817e031c11636d502 +43b20d22363ddc3b2a06b7b06d00a379aaec9cc998435c141c3e8bd49a1aeac7 +68da0ecdbe44d09315c05bd47b50164840f06ec0e5228d25b5e5edb3a1732a9c +0e4d1167a65c9fcb2d353a768347d3d6e8905ba9ad479ac5ee02f16b28ed007d +d71aa2d637cdff3d282f982030626c545ff44809803d69e93b5f13f8f9b7f9f5 +0fe6e6614d0fc18c10080bbbd0e4fa619ddc5cfb71c878a3bc5247d1d25384c0 +bf765e7abe668ec65a90e7e6f3231582afe748a4ac8f347a594c687c69b5b4e4 +e68240f907ccbda5e9cabb92e6537720961ced52ec1c1b0d49f9f83653cf2a16 +f50bada5b38c6057d95de09c338a170ed0f47c9dbadc0be884392964d762033d +2b8ef47beffb1e8424dcde0e1de3bf10499f057ff941be5b140f40d46f6da624 +1f2f191d7b68a34deefb025d4e7155f00e7f192f1fcad3c55d6b4e432db732dd +a88a8cbb8d8089ec2abb83367e5bd39cdca7eaae6a4995f7a55704171759c957 +8bc7b494582a83d4fc0eed819f19f5bf3f8b37e370d6110548b7481c7f918a90 +db8f9024534277dba56b62146dda82007548d7030ccec1802fd4620dc2798f44 +380d07e9dd3d44bf4524608a0733df0f4116073b96410c3cd998f5f425f4bef0 +09923815cbe1e09aa50edd66cd2aa0860071cfd8bfd0f6a8e1449f4d3d8128b0 +0f244213ebcc87a2be616f696421b9038119fa573927fbc4f2656889aa80d81e +9c6b5a0bfa32dcca46b0115fba6ddf31c10c157d9caddbca5eeb857c01da16a0 +a7e1ab4b53f9aef9e02be56161459f2d44e480451ae065e6892679051b0bb708 +4a3863192fcd8e0bd260328dc09be3e147f40d3d8ae4ef441ff340e251b88fc6 +462d6d1a05c2ecfb70bc805bc35dcbbb30381dff566b8904609370d402534842 +b0d94f3bb367203b3801a2f5418b3ddecdbbe9bc5ea87b6a0526a851cea9c3c3 +cd976f5bad70ff0da7d9c680e5d22787dbf1856e784cd57ef89a29b7e6cc00c2 +1a280e1a005f99a9a768ef75ea13a8858981298d192b5bb7a98328d6f4dc4763 +5995b3a88e368f0ffa214e6febb11a55b236a33cab81cdf91e5e728711f37ed2 +3f3276ab28f0ea0d3fad77b7498388f3e8451b80d8bdfe7abb912db47c7c37b2 +31db0db91a736f09b8fd913553e77df8d8f8e8bc3eb249345598c7193735631c +b439ef255890ce2d6baf2132924f21622631afd8fbab82197cda24bf4a10056a +504ad94b3f568a86b3e317ee72eab58fc23ce8e9dbf788d94d1e1861c611fe29 +6d3eccb076735115b7223077997a860087163cad5fab180d27a2f276c51965dc +a6b7afa355c91f8389493ab4038778be57d6ccc20d175860e75c6eaa7fdfbfc4 +df627d64693db4e1fe959edd2ea602a6a3c94b1f620f4fb98ed520b143a5c0be +cff618f5742effcd4d60a14fdc0b08695cced02c38f25f476528dfe9a6b47c0c +190f2f8d8df51026e5f5e5828d34033854653ede922fd4b3ac08ff3dd4da1101 +3fae9e03be6a0c740ad0b9ef1c8273d0de6589843b834987eddffd9635211193 +fac7b8b12a609220f7a00afe3fb6d84640c4860121b3e37e3c8ee8ed325a90e6 +effc522c7661156f5c5032fb29597aabb3528ee174be3c48d512bed694e6f111 +75c62ba78d52639ad8139983238912a7aff1def8eef1863c2efa996aeef3c8ac +81594f0783354d61f103b25ba02731d770dfc607bb6311ecbc2c2b91d1cbecfd +e384a08f20ffddcfedc7b9af8df1500e2262ba65f1945da76f9dee9364c0feaa +079cd069d36d1a1e1ef03d56ab92ec5c879cfb0033ab7a930099d43454de8045 +a47c8e894f35a9e87b70115f0f031f329bdf02bb58624a068a81d39ec380a9f2 +3f62761797d0335166ab615e27718417a4c85dbdead9c3de99ae59f502c8020f +38003b76c2ad2eaf7edaa47aaecb92a2925be54ce6c038383ed86f7471f5c795 +f6cdb9453c2b878687bcbc6d9ec3e42a8421c08c316a55d51bf370a65c155a1f +75be4e1e776b542c6577610c227719cc211772d83b6a1409b2f92d7804afd673 +b14afd00f3dfed8873dd0b8b0f11b6097686237f2116d2e51e2817625a66b28e +2186b22374b04c5ea91dad03ac6da33efb71485fc65b54f5ced111694c7dd2d0 +41b1169f809f8e183a28d09d82793e63c2f72cdd090d3ab551d8051f1686b9ef +623dee2dbbbb02134444a7a15220b66a2f3232ef0883f4a8044355a19b0515f8 +abd9b80dcedb4afc542683bdc34a8cd70c360741f92fc9c444b720e410a3490d +d78076bdc1e574131cf21a4e6cf07b56bcaa00be643f76a157d39c93c554d402 +3e2b6d7f9cb26bd937acb4f9eaf2a9df0701c38eed1d156d0db187d36b2c06d3 +44f0abf3b86d6b370711f9a016cc5802bc92e11516175919f6bc1632c8d7adaa +09afefb6d228beaad29dd19d1a3daa10ac4233a331d4c9925ab6124e97628f56 +086be18d0337180fe633384c72983c1c0fc2a4e93816c00e9eadfe1b916cb428 +913409eb395e07e8a253315dfdbfde6fcfbc7924e2160927ef237c8ba8d03447 +97e4202c10397343776c02edd9bde4ee377c082c5aed47a2a238f06e673b1074 +7ef2f2cfda3498f784174bcdc8c2c3e2a76af6a8719921110a0a3af8bffddc2c +c73b9608e17d4b9ff1987d5e7fcbd284e6feef5117babc9c834e47889039a2db +194edd9867b0685b012a75fb1a4a558b58e5a91436356b84fef8a4eece6fcfd9 +5bb9e3f65a54e3e692ff5f22f71d48ee83c9bec9744979b514ea1076bdc4266f +873f95ce99255fb6d35c60b93c5da738358da78742f283649b3ef2d20c28325c +293903310ace64e402ad14900061a94e9858f69f42a230701eb926f8af085e07 +2105fb0fa0401c266df164995ba5aa0ca99de353dd554e637dc10eb4fdd2dfd7 +e01ae987c8946469eda5a29d50184065e5508a0c41e53a559572a533c27eb3e2 +475099a082db93c8dfe9f7e58a13912b08d9d1bd14da40c2c31d432612898e34 +a0f11cf8bfedd989cb2a8ebfb14a190e789648c59e946d38d249b6ff256936ad +7b132374d27afa255849fbc4b3a94c500820d1c3d7c93e92ba46909cf72841fc +dc7f51d627db891028c2c58cc3cb1cdc6688aaf90e8f932c1a2a2750b32a99f6 +f390b48b9117fa69efd41ce517e28318d1a7e99bbdfc5172108059d09f54fb74 +20b5ea1fb71644b7ee2e43093d75902a53d95712b0db2efe59d44a9deb4cc813 +e64b87e048d0b5c8e25d6d751d0b4885b9015c92c6d6f245b8b1ab09f1aa27a2 +1b0f2196c9595a590001a93f866940ed1c92c794ea0142fb287c87899e068fe7 +8086b800eca854744bcbff7e781e76764cb7fcc19e8fb2e865a153bf802b6cd6 +72a0e6c39a078a2bbd87149de0c57f4357e7f94a9271073558808332a927f8dd +45e6d897bc14e39c024dd5365099d59bda115d9fc88c158383ec29a17ffee1cf +83f6325546804f6de1832925bd69df77f40de56928f8bfd8a0d43d32e0415f8c +2f4531435c58b9ed1e2300d98e4e92eb10b4727e976b7cf69a06c5a187bc548f +32d59817316e654c64445244411c6cbf010c29c0cfafc616a8c78c58737a9ee6 +f9696f3b5ec9bf1dba9eaf3d791b6430c3b82f091e3866199ec1737fbdd0b64a +fab8eca913fbb7fb93a0407093ec8b99e2b3e6d0705401abd330e80ea57e26a7 +8fa8c2b78e9cc0e02d5878b1315b91a8d286b1255d59a2a0563bed1380519028 +b07cd38e85593c515b98d7a1b1255b5f5c957267e9be58db54e6e3dd99c64a7a +46b7dae9130b65cddf79d5bc2d1ea2b52a4af8f7598a3583250abff1da37685f +675cdc64289647bb7ccc49084d5f1bbc9a18b6cce7b7036b12347ea619ddae01 +c68d6f37b3a09675efe6e6320cc4d6b0bf9011885d7c13ecf95675a385e2beaa +67e3c001682489d5c3236988b773a6b5daff3b78b4c887619670d072a5ae1e5f +dd236c4a8ae2850ec405081a2c5839650045a77a58c5a8ddb9d838896f5f1bc1 +6f48c2ca7193e34de2aad2a3a87f94c8370de30701f5bed456aeebd69ce3b44f +6a28fc12e5e00e8159281385e09a1782bd0d74c122c9aa5dcc2e3d0e73b3e4af +8dc326f2433ae5aa6d513071f94627e3a9b7eb277c9bc29fd0cf7696c7c6f213 +6353062ba6a010330b7cf62ee6ad7249eccc5c86b60db7a8667f9d0b41df1e06 +147f7033b867247bdc16cac3f7f4f61f32a73e7a2da13bb8ff8e05fc2d03ca3c +4cb237ece2eedb297aa4bcf8d01aadeca658b52bf7f1e8811d7bfb64b5fe564b +a5b94d611b4ff40068d5fba36f6c90cb340e437e296275840ee3e557a733dcaa +e91e5c6876eaf59b2bc3c9e70a2f39d250892eb9c6662760bd6dc124d49c8a36 +a5dc5ff9a5a45656445b720ded35093e242e3c1909efd9f2ba70aa93f617398e +518c545320a45179b6efa8ee6338143571d6ce763ba96008322d0045c0a38a2a +e83a2beea6d39c616a2a754825ca16b5b5ac11ec8225bcfcc054aa59e10a6814 +9587862ad29cf21b8e74500d974b9e4751474231a80404847eb83f2a83229820 +7c215495583d6c2f00703b4ba514ad354ea655da7a1bb70f44bf61f7c69df085 +eb13e3143ed4268cedf7dc8385e121579d8e2582ad3a7a49e242232fe9350a07 +bd79edab543806a869340aeada54a23f319ca9bfbbd40365d44ee6a47e691dde +252898a07c18b8c64d7a0088c4c427a9ea6b4028a6a493c972f8716bd4a543f7 +a9ff42cc81f68a8875285e738525d093cfd8b87ccf047488f445f2d1f68c76b0 +1c5696df7c9fc0bbc49ce9a7bed05d276522f46adfc557378923234d42931921 +70bf6bb1fa316be71f7e9c1b9c93070d891838b12e4d57f207d686ae471f1412 +3207b5d74160e44662b4ed0a44680e5ab1528b7c5753971f5e4133b7ad772de6 +11bf0240533a938f0d054f873e1a0aa4bef1ba1bd2b2986738d5a380edf9fc15 +4abc6849fcf212739db35ce06e9cb81b4331098861cb0d75692a575ef709fbfc +36de3c2a00451a7589c7ff04534ee47150af22c48571f46f0e25fa4cf6c61449 +ed97b3985b957c37584cd8504640188822d3adb765c97d10cca624f20177475c +52d6557bc292ca566405bfef20eaf72f1f7cfe7b86449149a60232321fcbb39b +c3129daa88ef0e79e2448cfac39a0eaed4afb8bfae6672bef50a6461da65827a +ae481ba136d43e98869939f905f1480ff36dc6155ec420d52116090cc3b8d88d +b2a36bfc3893c447393ae4d2822ba5a9bd76716cba148a2f2be3ba5fb0d8b91b +384291cb5c3492a2a44d96b950eec2c583823b0e11243d2e43c0b5fccef55843 +d0fb2199cdab76bbeb3d51accc7cfe248a53a2868c36fe8245a6191f5817c499 +56ffaeb8d84bc3047a27728a315dbee7e431470d7048797ef9b5e9ef5f411a31 +6a3e967229bde4ee9a3c917d12bd147556ff79a5620970f30bee7f5c3d721e5f +da9022fed46edb47fc1b420d1a5619fedf12a8e00a802d33063fc06847a0fc65 +0bfe16c5a25863cbacce71c1b74c7e1faebce687ae1fe3df30ffad4923d1c6d3 +635b2a355c63e6586679f4db5f572517b5e9c790c96ca27e992a10212204c51a +380d1f2d204c69b77126bf601831cbb8a3543a60c3e07fa217cd0e6750c6cea5 +ff849d07c311484224cb2a68a341bd35e2032e09d14011a7ec3066b062833953 +0b74a9e8da97d20134671291cf6624e877c92510f8fee43e974ddd396e21957d +61d2a5328c2b924b6b9cf5d29f6845f865b8addd27f2097e49bf9fc226a0ab5d +c1e1a219a282240e390776b4e6846e903edf8219e56857ad46d7dd4e6d482418 +a3c5a9864bb64fc794a1a84f5eacbd763ddc1d7d21fac62c8b182b28e1ecc88a +dd7a99429036cb11abc2c1e863fc9a6a66527984fc0c2622629134fcf01f923f +46c0ef2c78e0309b7a99be3ef663ff3dadb573673cc04386bb2e5971f9de505b +cb384edf330600b1f24a8b72d21059a77fa41847c34f04ed0acd60ab12734729 +2d0ba87709c1b1f00c53e94c7fe1f924f521171df18d1368f2501616c7dcf498 +80ba3107f754200c88e450db57cef133acbe21e9e236cb96a5be4fc5292740e5 +832a0dfe16a4a41b9236b75686a8b8a9ad9fa8f85b0aa91cf2b941d95226019b +2ffcba9e4288f5a5fecfdcca20fd85ff1dd22cd7de043822f3153d89d1c06da3 +4463e9b4431ef7a411fd71090967e72530a96c5a4670cf192fd979752bbffd70 +3d28d74aaea4eec3af7ad5598bb6c1de620da10998966a378ab61a7877caf654 +c993b9f0f50b9d20df86957d16bdfbf44240ca3b05b255bd28b3062f2b11edf6 +9ad889bee054bb9c4b40612b6a7173b58e14e7fd84c6d55ab46b9f2b0baba761 +56f967e8b3d391cdba008ace947c3e4b5e7c1c5c7abe5d2cd9a4955300900dc8 +9a781af9a3d28b91a5bd09fac93434510e7137c60f60b2c3cf2f4ccf3accaf89 +92959d4c3fdddba91c294dcdfbf69e347850ce9e2eb69d736c35b2295d03229c +d16c8eb1bac822c27716e7416abf2d654aefa2866d134f931daa25b7c90148b3 +9ab298334a04627a75d3e8739dba398fd302e296215996171f57751e24bea32f +490cdaff226b0b90ab08064a74debf7ca6a63c5d85bb15abf906a50b3ef7351d +3df517faa942a27992a4737a033dd2e80f3a61681c3d8f361fca9708a8957301 +eeb1f4a62bd1123795b0d4e5adc1614a68fde7c7e80b926d0ef3eb92d8c47478 +b4dcab48aecabcf631833d5bb2cdccb4a0652d24d2bf700176c6ed387226b712 +50734d6b156e05d3aee4720fe35e1058ab62dec7f7e09dcdab7cc7f64ab3451a +e3ab9a1951be67c166e922c28647ffe40ee8cce3101116876014fdd805cfe55e +a190d7cb75b8b470df6b5a883a38ad036f47351bdbd24c7708d24ebea77120d7 +3adcd4ad8acdc009e92fcdb7baf12c7716f2624cf879b4cddda786c23f55a41b +8169d59cc4f938b43b823fa075a62c2a44e61635063adcf5ffe45b1c45e303e1 +f3613fa68b36bf478ed8cb9f9c366324f90f1e278f17f710ea587c3d55ac879b +4602df26b03c87a567aa0e07b382b7d88adb76e8a06065d64e20903cb444333b +40be0877b0633365d2eeff87c6d17581384cb035ed560a548c160fd6cf6484a8 +c6c3d14c4d64498d2e2c44d66daaac5cda536f4b3663dfec9edea9e6519a24e5 +5ccfe805d4989b7531dadd802c2360e3ca1b844c4e5789f57ba540283f11c23e +c731c38065f6f08022c263c2060d2bfc3d37edafcbb6c92a55551ad780737654 +03bea3f9011d9b6fe57ef63b30e33600c2173644550fcbf54dbe6bcb4b4b69db +9f8efdabe784abae2302abd9821157d692b73b88a020b6694a1ba07476ef9c06 +2b47fc891d1ac28fbf065402d4dd6ccd83831178823fcf3194f264ca88a102af +8c221cf1542ab0a0905218e8f44ebf728d60463ffc48c8155c6decb29b97cb61 +ae31930d0b68da8c128b446d8a0549f7129229b3a65c4c6ca0b4f49a7e6ed57e +5806fbc249241468f15eb0256eebe4ff33509cccd830671bf436e3b2714127d4 +1ec80fa7b0e70117d32a18fa7e1d9cdaaec35b75d6d664a1ebfecce4a68bdc5d +99de274b3acf3b299988ca19ecbf8bb538596e745cfe7bf09611432921e141eb +add0bb4df7342a21f9215f138c86734c6ca36ae546d5c0c498baee3097b03e7f +54b18cee1f09211af129e6c79700e96cdc5755414c65f25cacafd31674a4e391 +7fea44dd8edd60bea23996a5b44374eed73369a3435a35bbc11f5e56a00b3edc +d6b217d56c7225008cef86de5d531f8aa0d46e471edc185d3ea60c06c473a0d1 +97f2d3f586cc6a3becc38c92a5047401a8785bc506cba0bb8f0046a55f26bd19 +3693a3688a0ba256e4206e6c5eede7707e36c286522c7ef9c7be89c9679afcb0 +b4a0d6e985e00c0d7668a0f0de13ea0b2f575b5ee85ba8a0b16e0c4979a5fe1c +b5fda273ae298016132c22d33766f40893490376efe087f554113d4b5a86d24c +38c339caeaef31e0622fd0dcb929a8fdb7cc965d35f47959e6fef53cf3c76507 +47983a60f7f5e95e20f55e182225c0e606066124b897a15d8a1f1291cb7fcf09 +b871972771c8226560434f814859fe3d4f24989763a4b2a2f39045e6683f0569 +fc4d5c010a750e9f42c500d25fd9096309571939ae0212508e53a6fec4ffc17a +5e431a1ffbb978131a7b1fae083181cad9b6186553ba469223de249af3fdd920 +3ba224e85edecc32833871bd0e323e7367438885f2ae98bc2da06efddfab184c +c6a66a87f5bb4759bcfc862a27b7c59afb16010d493108a7de0d7490fd06b414 +765942f5997de1358b92ef7ebf7989ff51395498e7d949314d2fdaa8d9c931f1 +ff8c7da0d7a102c2d8cebef09c0d65e38ba61f2a1c77c04a0f63925ef5917cc5 +f0e790f02f6f3a671ef9b1ef56351db5e22e0a1a6a317fd5946bbadb35795cb7 +bd74a63d6cdb64d5dfa83bebfee5d3142ccd526dde861ebd9582c179e821e719 +621acba6852cf936518c01cd11ba8a722c0e97ca2bdefae0fc22e85df8121986 +f997ff81f17957d94ceb0a2f55368cb561fb3dbbe47ccf5b1e626765e3d51279 +ca1c737efd0794d2a38cfe0823e1a65926d80555395b4ac2adc0d94fb0e4ef41 +5ba3138ef13c41850e2382c50316624bf46ad39587b104300af4d08851768ea8 +b08aa4884b470c780fc0927868d871c6bd4cbd8206f4b3be2581f91d5064dd2a +14526da2abded2177919ecc13b076b350be6dbce1db0a0382ddbce662527f78b +a502bf93021ce348e6c564286a5ae145923eeb07dfe7080a30fb019e9429e110 +2eb08fa4a5d28c3e3fb237426de12ef0a399565b9d532f0f8f63c06d0fb2f025 +a76f59591c1f5e4f1399fc27ce2233b73e40eb0f4752a085cef181159c597778 +7ade68aa0e221eff031755b2c6d86929922ca2b5704fabdfd27570e52785eb90 +295b082095909e3ae22a91b501dead0d15c0b9fd96da0b0ffa89b030d11692a6 +94d2ec0da89071c58858ab131dc8ecc8d1c31ff4cafa56de53d4410a4832f1bc +698fef350d23a27559ef54d12ce79afbbf0bfd746aba69a6c7c1c6febd27f477 +9fe58c466d297cce497a6f69cdb9310569d226789d1b867b0d84aee48522dcef +5aa14b268791b09ff7a3d0b57f2a03f833a6b1829bf3e092e6a6fe102d1d3de1 +a728ef2590507ea3719bb0ab908909ebebeec13daa201faa3ed48c9833b04ddf +7d2651a097a63f086e14a4e4675d5d65639c27c6eff6d0068563ec7c5b2121d3 +98b73ff1910e187a34f66bd2b8b8e7dd521862fd4cf001e8d0b6bb0ae174de99 +ea7dab12ba5edbc4660516239b3f682808578933ce43b8cdc67d4d4b30de27d1 +8ff7d2ab1375b1de1d6c03194ece4e6d52a0d1e8270676b3996a744341fa8bb4 +e57ddc7fc00d585a87fa1d9dda0a023f771978ce218bca6b46ea8cd1d9087b8a +f388e591c1c0d9d4ca752a6a707305b0a09e6741e60bca7ad3ea1a9a5243a4d4 +a1c4f76dce3eae3a1ff020c8e0a4b1af91202ae26140ae814b8e1168571c29ca +5fdec5529b4101d4860c3813a9ecd068ff4de9eb91068acbd79ff412561caf4d +e8e6f3e1853e3b2b29f8d49ca37d4af898bcbaf9986bbe2c2215c415901c9cf5 +6033a2ff6abaaaf4d6cd83a71925295c3327598edea3a0ce6e5fb06a2e668902 +91819eca0bf4a6b6050f9fe2ab8d9560a9c018bc33bdf131410fb4a760ab4ab5 +26567edd869d2f59b83a57520116a297e39f850c2e0b954dace28aaed7926eff +4f42e8d01934bee7f88161f2d7ac145db452987fb4e484f5153cd9912875c066 +d60ef3745b9f71f8b0fa93bfae9318ea00d916603afd31e1a844a69827da1d65 +7dc9b150d602ede52c5fe98b0c69e47e6f5fe90ff54fddbdfdd11bf8109fc3fd +6d11e815a2bfc39e095f98a9f5f8c90cc92e63d02868b7f2496e65cd6c4f54a4 +72825e40be61dfc4a780a4cc19f69b6d6e6e884df2bbe40641c7ead4b513414e +d0ca1e4354b13cf9b81724016b7f057627006c04d708f8f5f25a8df9c21bb0db +c2d900a96b84ad5054bc83c6b5437a3b8028022001af982090492cb1518b518d +b053345645212434f0b8d9396bf434df834b7e00f8987d5453bb32899e86882c +e8e9a26efa3cc8774a56923690976717243067d06af2edfefecf1b7496db0d56 +69d39e228ea370a0240bf3bb3c87f9e5a4d538131b30210e63e9e09cd80898ae +4b8db2374446e49225e54ecd4dd94e61fabf9ce4e79a230c9ef5662f0a37b550 +7feef00681cbde540281aa35ee085c6232942e79ce913a098054d97f567f47a8 +5a5f4fa54778d5b6859a07136027892fabd1e23989a1eddb52a0e463703eaa90 +33f5910d2abf1c67626a66f180fa04ecbd39234b04741b1ce88a2ded0294b76e +ba5f7c742650cd0c347ff59b399a9ef02ec00a4734c6c090c3bad0a9df9e06f5 +6f2501a7614c7b7eaee3fe02c551cde2e736c351f90d90d3e8afd7cb984f065d +b40fb6a1a884aee75c990baaace92b7a7b95343b18293e9ea08c851caf31f690 +43fe9c176b29d53da86bd4d208a7ad386cbe43364c7b8ce923e92c0bdfafde42 +3568f416d5d33189063342a5278821d172b6910261b39a60ab72a201c432ca5c +49333e729f284e8e7441a3b5f225553d698ac97f3d21c5f9c45aa6a8e8dfe501 +34ee38d0fc2f6d4693d492469054db49dff71b01196cbf467df05b2ebded3b34 +841fb59597a72dd3d5a3b686bcf6f18e84db3cfce808a70d7d6894275a59f371 +a331a92f975de15bcd1e7a9a26790f526e79ac82e92c56e786276a2775c04c35 +17c25228a95e83441c7501f78b08b8b2b387d0fab0d52188d8ec0206664bd8a9 +ffdcc14b579ee60e1390413069ca23dfae7e86af6a0fe05182d75bcd3bf66246 +b549fa90b70128b5023f0ae50d5b9859cde6eda4ff640e134d0956d15a4b03a7 +70deb5c17443aba7b39be08fa0828d7a9be0aec3ac94ef6b44ae1b12fac817fe +56bf0449c7164202d8888db9c4abc48bb173dc600c98e8d1c3fb2e2751747c21 +bd8b45812b0b38d9278e9a45198d3dd0a4059c1e9125930bdcc486e64bb6cc34 +c87cd3e6cff9dfdafc5395309ba9149dc2b6d5ae1a91d5aa1b0f9e55e53ca734 +14d1a03737e1a28fadeb78f3661fbd6d727d01925fb7b0874854c5e70965b4f2 +1fb7367d7be8f4c404442d53b257bf899a212889acf749bbc2fdf0ea567e4037 +70d8a2dacde00dad51c3efda71dd7f30ea1da3aa5f8ee45fd5227f601b31aee1 +5266495a156f8fd3cf81fc9282f6220776a031f3425df6a658fd0a50be9a6049 +851f8f83659b21cfbdcb902e8f1d76a0a534251c08c9d60d2b0c2286e2db5c31 +a87cd8710182763206aef80921f2036c63bf32bf9bc6aa7ada656650eed4e618 +601bca957c91e6d37f736405a8122782c5cd8102525349ac2b54fd649d37c9d0 +b556c674dac4ca9dd9577d10d9966bb2d18a6c9ad231e15e8e3a7e3b44a871a3 +d33eef61a9b208f996f1c01b43ea37a496ed5230cb7175563561b121d7c84b16 +d95d419df8e710b195a223ebe88339e90f0b1e179e2a87ffeaa612edfae0db28 +2dda80e54ce2c72a0fc76a159fe41bc51812b1365974a78a684031f9bd2f0471 +13dbd8be269c89e00e804a1ef00ff6b6fc0a614a463728a4e2af38d918113018 +4423ddae5e0b2f85b47b29c3cebbf0fce77ab0034062da66ae86d336c36c3574 +5ecf4e6ac84579a8ada86ff7885dad859314876da94e4aa436e9bf539c0ad14a +533be9028cf722f86f21cedb90a50e1611e2c2d54a5b49538c6db3e8afe88cb8 +e192c77612164531d56e3c3475268f5bc6a33e3421dee0016c27069f468f9440 +ba84938d5f78345373822d4417abe4a5c43fb071b1410953caf6f6cb74e3e140 +16135b52dbe4e4b786b06c65e38771e5b0b16aa7fd70e2bd01ba303813423221 +39b78938a94126b3c7677ba003c8ad5c963dbcf5260d1c4b5d8c7677ab2bb489 +7ceffa1f5f274812dae3adc821fc35404429d48124a22e64e0338253ae232396 +f8d8131693636d6c105b8be8b6ebfc616fafae163452a86729310c1b86ba696a +1ad023aefc3025b2268f28f0091b726bcfd48ddf1df822f071466781fa519fca +5e3f792e4de055d2fa63831c7e67cd74f32492b6ccd11d7fc2f6a706f0e45f1e +9feed8e3a8845aa183301540d83a600e3fbcb2f7f30eaa9089837481dbb877ab +58562e5195db60e2f6a7ad7a921119845312272bf2be89f269ea6e43b0fa61da +8b56bc6d9a8a5340dd2e3d1f7640e517bdbec373d48cc2df74067bf37144ec8e +7444fbc25a6aeede536f472a5af283ac158503cf0734e467e7d162e14b069e30 +4a93400495f047e0f75fb9cceca9ac01d8f041596bad2530ac84de460123a8ee +dcde54a9be584927915837e224ebe6c7faf8fb8a70797c6e49cbda27bc6b2aa9 +19369dadc2beee6b0c8d3b3fbebdd36fa8d85a696e73c00d3571b534825b5560 +e2195d5b1b6696bf04e59e74bbe455416537406bb30bd135f292a60e4ba645ba +75223657abc11750b7cebd50e6cb9c85fcadf6f52c0c72f86e03757d69effa29 +3aab3f3fbacec0b18ce573655ac57cc886c5381e5fe0edc932a0a48ac2524e0e +f83fe3ba1ecff255731e071ad948859c3e0fcb7e7509dbed65cd86bd80e84909 +1de0c37ace744f172668aaf1177d704a5a95372347c62ae0de642d5f35618c4e +ea26d869287dabecb15eefbe5f830e49340b153090a8b86d67a486d6dd45f5ae +b149af7bda60daf32ddf192fe75edc28748ca6b592bf1158a3e28d21b9bb5ac0 +e4d7657313a3c13818308491dfe54b521c67aedd2e82ccfbcdb68460a517c975 +0740d181ecaf590ef97e7e205e9eb07b2b27504ca702d24429c7d819f74b0076 +f3405ca8ff8000560ed623113a55c790652ad6cbe4ec07c0721a0f2b615f7e1a +488a712da29670c1cd3ce56344ceeaf05494aa1d6a7f0f115fca55f501a7791b +c3ca1fc54fc13f6bd839cc8d5a05235d5910c841de972e066235cc3aba86a628 +a05aea3d7393c6ba63e3f4727cea89ea32fbf39a03ec6df5a5980587a62ae81f +19073ac9e501b47a33d29912932d735ce9fd86ac444640b07913201712faa785 +b8f6aa2a07dc54dff49e1453a1b14d49d697e088a0d554844d331c607033bfd9 +1ea7269afb604bffde7999f787c5efe3c72fead04e7acb3498e11fe1417f2338 +fea60a4f05338b2826569ae4623994a40d14c357197b1e36045db96e520575a3 +836e30d31cdf19ebe9bfde92d3c6bd2617eb22b7c59f5a510bb3dd7ae7946954 +125d262649ca0a8bb109d9acb976871981185e0e932e5032c8587e10d07f93eb +d9d0194b10499ad8687a16892b6b64628a9904217ad1e852040a4105826f98c4 +b50598dc741ab91ce9334d1b1c0a7f3a3dc81615f7fb07603b36bcada56e3aaf +209c01113db7c2bb154c2bd4ef23f1ca3a1e0a339b6d18e5dc62bda11ba4c1f7 +14d5338cf65d934cf4e1202ea2c12fd7902607ac0e9a32644f2b820db5c952e1 +01573bdf5a8b2045595d19ee09caa5ab1cd62433d3f83ea649e7d6a990cd0c63 +d77028cb41b35bb634b13509692b2bc9bff3a88386cfde4cdc4afefa8a933556 +bb82956a380b8213d037a815e87a34b13f59850b9a06dbf322ef8358e8acab1b +c799441b81037e25130de5f00f3dcb7fb401c5e2dba5dae656c711e356a23fd5 +5477480109c5599998bafd0fd276e3291720e1062028ad8f4e94965d9ae0a264 +a20684778beee49279d1181fc1cf7f9463462e816e6dbfb774182fd64e33a5ae +50703ed7af858618b2dfe0fa391a88f32b06b3eea4cb05ad3ab2b20c67dcb245 +264f892267e0a359045771c99f56a291ef822da5ce70146ad8a9b7af12bf4bf9 +0486ac66a2cb78812b3096575f3e84fdb1031ab26f32829472e54fe6d6204a8b +99abe76411094e0c58d1eb770deb798b5aa319ec5ea388f6da739ad8645e223d +4f85d89c387fa762c2943adb4dcbbb09a388391bca60f981d9e172902ae00f4e +fb5ba44e5495322846aa3702a0f4debb456c1a1a2f9f65040f5816a2eb92ede7 +eae71d368705757497326dc1b15e5663a5c0862ff83eda2ed05bcf0728778243 +186557a5f265bc41316d65bc169bda1969299e225984b2f081e94bd7553047e6 +dcb16af2bbe8225b6840d398a51e0af3a208f669b0504941f50e0cffdee09193 +e4e0ca06922693f4195a2adcfede6e35a9164f36dc181e4b5f5a0bb9ecfad98d +e159ae6e27b1719000c920375ee2da3b859c2402abc44ad9be6f477086b6abeb +3c1e2904417f92c7abba0a6ad8e0eea089514fba58d89ba77f67f5e9e064d8dc +559845c3437571c1fc30fcbcdac354542b4dac696985e9d5d37985c85707de7c +a601547a0555260595193e9cf1a8befb16cc366c9582c7b805dc658c1e7f2de5 +ff74e016d553a08d2e8a01e930d3d1f56293b66fa87609a274c268f9f36c1d3e +3c5356c0d5ec99c524ce3e4abba00a33e77f58d1bf04c9ded00ab576937cc38d +9e141bd0969443c10c8efcfeedb43070f98f9b9b92cb7eade424fc11c6980f63 +ea236c397bc296ed7a3807d2d0e42e50c00065f4df66a5d45d87328b5f25841d +0c082cac635afa42be78e401fe9241a82dd4c9b12cc522510b35148d97c95465 +98d57533690809c67aec512f498c59d63916fcfaf3fa10bb51d4de72546f5d51 +e0c19435730a9112f75843aedcd19de3bf3f162f05643eed69c5621df66a6c42 +f753e5ae61ad18988903c2ad284de74c207090feff01a858cbcf53e383a81fc8 +66268846f95bf2ae7201cc5008e7a0ab9c86c64a243bea19706e0b2c412e5059 +c190cee1d08b06cd68c0c10e6fd8e51e41a3b23116268787607c9b6d3492ac9a +76e20c35806760ca8e1cf31b749b865ffb24f9e44d90ce51ed78d085810fb8dd +36305688ab6b9e11125c9a6d428d0ee70b19661e5868756ec16fab2b4d506dbd +4e5f1f26c0c2c92a1cdc4a618088c0bcd7714ade7802918ad9b229fa9d25b586 +4263998a45d2ae2aefd199017b465b350beb1b5c72c88670c3540857fbbc9405 +9f8a6fa422342b4d24fbd80917a9dec95303bf98fca937fef165b6dc763c26a9 +e8f643c7adb73414eba86d508714dcc25b2b45a3582664324cdc1f8c0ca2550f +fe2a5590668c7e6175add60fce802d8e2a059a6ab4f662711c19fcd767772b08 +e27c76480540cc97c3a956796d2876dd79c13676b920b296e2639e35a522b86d +bd9d12dafda22e5723d21ca15bf78409430334da12c7953721e48e7d8b3e1403 +498be7572ba345d3035cabb6f3777bb2e444586464042428c16d13d64906240a +0777ced184c4fe3acfe96f02619322a1a90fa67d34f09b4c908ed4d6e40fbf3f +edb506e90bf3b79104415314aaac977e424823412039d8af78432d85a2847d13 +cfc74a0a3e9aad2df65795727091891afaa616f6d991dd5f2e148465102d4edb +c86562e7808624a5446d6f52b9ee9b27e710d6fc031d77f4d800e0a59f59bcec +3d60b0e63e9990483689c55d042b33c7f04ea0cd85c1c6599a5e0797f28301b6 +7f953ca95fb8843eb9e7eea18fb6158ea3560e9b029ecc4477c64e2b07cfc55d +38d3f64d309b88dfe2337767d436501c0fb137a263d931d4b824aa7bf6ea8b50 +d9ccbccbb8acfcd29850087d6c60ca4c108fd8eb0ee5790ce7ac27320d913c83 +bc155c0b0d21d8fe08b6a1745e8922b82f0be7d24562e55ecd5841de2b3b0ea4 +660e5e582557c6ff452d573c412ad21ec3340ae3c8022476d05eabc671ee0a8d +8fee10bf329d1ec60125de22e01ca824a9d5bf49a075cdcaa2c0a19a5455f14f +78736c6182407754dbbcec03a3c0dcb2622ee75c45c0696b8044790b64613578 +c4da1e49abd4e539ba7071bd66a1c8e8eb59039eb7c6c1cc28605058cf84ab56 +9ea4779b0e35aaf5dabb195c4367389b63cdf959786e05129e0d48f8d413ed9f +bb0f2fa7fbeac82db9f7792d5a84bedf876f90c6f643ab3c1d71c1d81f144b35 +87a6080cd09e352655b6300267839101f3d9f496902b8f800afe7c3c27c196f6 +4e5315a7062425671084454213d23ef09fd3ca99dafe74fae82ad5dcc0ee34fb +c6feb3cd6891554ca8c99cf4517a26daba0205b062eb052238f912f98e4d45a8 +f99c4c1466a2066a655cfa0592981aa2247b1f19235050ab65878582dfce9881 +8c70d16877c13a1c5b0cb893355ac1ccb1ad59e2898f9d2beb28893693eace8f +7ea8f5caebfb092cf0f0a8f1c79b0acbd83278afaf334f0b96650b92945dde7a +9ba4b4ad8f57138fa0ce85f8de352bb4cead1435d7cbf5c48f9cb6884dc61685 +c154be29b690cc650a94aa24b583fe1907edda2ca2f705487d1b0d472a5a1c36 +f9cca3061ce080090bb10e006c28f9213d8f316bb42acc3345d7e4d85855c2ac +9060f12240d6e6ba3287fedda41531c93f6e1ef604bdb6d93d0a7a1a0fdee069 +5c70042ad42b2460af58853e28160fc6f9bc33264a6e7284f44ed7becf4be258 +33976d54bf35dc822dc4203a7059743b789186287947d90754ba1abc9536a275 +bea72ec4be558d60f4dc55ffe3f8c76475cccbe0b98b382ea0f49c9cd1229f65 +0c6b037d5f709d0d157a15a942b3e5435257cfec764665d0b28aadc3f822ccda +bf577c9187d5ad2b73e55997fc0f0723c1bac8d8ffb9c870c1c686ae6817cae8 +04d6a95e68d48b6c9e3d20d01ec22b3044ba8de753521ab183ff74f474f16b2f +0846da445e6fedb6818eeedef2608a0ba6a652524ba7b9568cb085616c802a0b +4d1e77ed322b9bd3d2d32ced8cf34a10735eb056dab5c611e27c416fe8aa200f +5afa72ad6a7b7ae057e8a575636776eae735f1072da687bdf1b1699292bb6257 +affde56f3ecdb7ecb96f05b19dba92f0d319fbd566ff1d2ea43c2e45693d6351 +717ec51be5fb05b7ed3c969f3496ef7c5fd0604273f05544a9b8b0c8feaccb01 +c035188e3eb64cfe61c0a273d71095a22319e5924cdecebd40bec0945505a3f2 +fe6e8e64f3786adbebf0d2bd7817296bd0ba1915e7b45492ed5103e8efb915b6 +ffdbcc5914079ca4a288d4ef40cd168a517d041c8657a81e21e09a3dce2276bb +43f122b0bc25524e8b352407f40aa62ea318c05601960295db666b93d14b8de7 +6f0bb74ad59dc340f0cf8b121fda8ba69dd27cac0262155b20090d59c6f4990a +a84fa7d8b4f9e3a49f2eb847e3d80b59026e1b97f223c4f3ae9130af30cbdf69 +a4561db03b98809079900b4c47c5557b18588442be644b5004809bd995220592 +4758f669e01d2475fc6951674c55693be088f99c6d3edc6a7cd3ba269777e491 +fcee8a7bb7148e7e2d32bcab1d54599aa719ca04731c17f6f1d9696ca88b5f1f +49b32b8670daef834883ee3f5e474b92134f7bad449175112d06fab9a0ab8db5 +195aa55d0651c72116a10ac93779de11034d1d972adb1108c2bf8bb8477bfd41 +089b03ecf8e7396b4bc205504a94ab480233bb7e774b14358cbcefa7417487fb +2b702a18e828e89337b4c1858cf46d349e7254259113dbbac6637f4ceeac66d0 +3b6130c0ed3ce1ecbf5c1b67a646954523cbd00044aa62a47dd139520e37a9a1 +c5702d7cc0d53b19562fca0d39caca97fe523ace0ebe194bacb68fa2b67df850 +349e8870243e2c39e410505ad5b85bfb43e2a6520ed256e2a32cab7b6c06b3cd +91487a0a1736d5abf0381f0cbe400558d386af74556e49f970af124e5caf420a +ea221b269d4df4aae42a34afce251ca73dca5c59d5d44d67609f55b8c6864758 +f9c7c5d327fddb982dc8ab63b578ea5d31395c65a8e92ed9e4b20d0bb08b2934 +29057de37b2a53c8a52750a1d538d3c438e631a02967919c5055c92e19f28856 +11b01fc13ace734d6da8ced80e9c53d704c86dc5df51c2ebc6efef011905a664 +8a838e6c856a4bf81e3eaf8593676f4b02153795f25c7665516ff1f3e3cd8741 +99d17b7a39aac2f29049a4a9fa24eebcb431956d6e3c9a001474a4541e9a00ec +d4e8637a1517239eaf5b4ea358830342d6dede0464715c09786c7858010fc1cf +eab9b73050e1b4e47cdbe69ad04da6e1b08e0488bf0415fd3fe16879377639f7 +9fda62a5a58452dd4486a0b13bad3162c9a99ff31df22501c9169f4b9691d999 +cfcb59263eb77dc8762604d73542cf20d873c107a43ddcc4310c8dcf17eed028 +7e08d1ea667c55c27a07913f179e586beffb940c2ea5abbc4bb570e8bdc0db71 +ce702cd3a40a78ee5153df857298d071e0c137fdf911000894db9ac1d41b51a1 +b386cdcf3ee6408ee32e45bfb586f5927756a76d5c8daecb847346a5adc2f0b0 +1c6d3dd525e43976f0fc8d33ac5722e9efc6feabd656c9fb441dd1fe9a4df579 +19a6d5631d75172a8facad4fc1e129fe2a6e8e0cf8f957b1d2a4b3c5995cedf5 +f47a98da739fbe06b4d563ad58a97db90c490052bf06a4b6d8ccd18c69237255 +0b51862d5a8eeea9d031bb4642d8fd57047cf2cc83c09a904d64f70c54854f85 +19e78a18be6c5da91a87bd75f060ae9d93e3f5734c2a95309b539029866b7046 +4fa3eeefd728dcc3f616838b2af97f98a1ff35940fbddbe1071eaa83a7a9cbd9 +590fd4e119b458b1eddf3425ad6a7c28d27e2c900025f7703184bdf0ae427417 +84abe0041e782bd82055f1c26363810842330e1b053249eaa8c305fde7782be1 +67dc1b2addcb1d0c22422134f907d81977a9f00e706e1c8074c4b0ce4b80e5ec +8cd82c200b594eceaf97d8544c178f95d8693a7b880f7f479393c54e11580838 +a786a6b2eb3e600e1a671a3071aa54dca41b0a572dfa1175b5686ccd175ab39c +c46f4e09fd4879801fd47a077304d1522422cc7670840e117e13741e3a4b0315 +e6692ce19e2d84e31544dadc59c12d9be6026b422c2a499d0fd03d9bb0a79883 +1b0a5857764a56e936f8225051990b37cc1c3c501acaa05928b1f2685820b8e7 +d9b002dadbd8cb30e8cf004d7ef7f6b8886cbf088c14dab2d450dad78df0dc61 +5197f943a0f0de49ee2f6ae591e768318da8a22c757b8a623174536f5263a058 +c394231de4be8784e38ff549911d48a0b9175202fad214f418040d44b1a3ea9f +1a82405ab452cd1d2481baeaa8fd65a60ad4409dfadc01d137d2c34ce971bb62 +b026771b03fb5683adf326a6f4fead7e78c95aee6671fb47463f914d95db0189 +3dc0d985b6d494f53ac99dbc96e5834ecdc695380077c43ec8cb698c4620be8c +02914f9dedd6100b396c9b1619b057507a0b2c5e2cd7f1fc552a6982f210de62 +214a14e91d53ab68f30ebca9de27c2a46cd917aa8823c1ba78e4145810b89ccf +d6e3e7853c0f9f545e4a794e5f2bc90643695172350bfde1387491bf3b1c49d4 +b49f92a8e5f0c3294085584a0cd7d37a1a9462f6ebd6c50a7dd9b2686c04ebe3 +dca584c15146839de52b7cbd0924bf419c6ce69ce8f7a3fd8a6f0b5f8156ab9a +a20d20911bfa312def164ef030fc4ee4a9145d5feaf6e2be3c4df80372e8e80d +4e3f8ba539d88910c8cf9d2cdc8fb4440293d8b844370f64aeee4a5ffb8c650b +d2a82715246ebda22ef24bdfcd2f21c520f53f5ae5f2bb03def6d14d955fa5ca +2ea3c3d5cf4541fe27d1af01d2f19549adda6789711d99f3de2843e1910cd6b5 +d5b7cb956490e86f1301a536ed19ac51cead11580be52ef976fc3081c7adeed0 +1e6867ce6b1683e1884055fefe63e0eca0138462ea943f5f887731295dc97e75 +9d635e0505b702354ae72d2befb3c91db11f024165fd3673a41adccd3cebf7a5 +b9de764664511045b364fa54a4a868453fe8dbac0905dc50daf470678cdf327e +d9d153de70c5844b5f0a05197e8da05279ce15d1925e797e994d72f4687c507d +b577054ed21449ad565e87efe71267c9793dfe1d618b9dfa4db47be02b1f0609 +dfb92a736efce5b14dfe3b14c7147494b333b2d381f24c95744a5244f317fc38 +76299c1a80b3bce1a074ef5d5b4ca574fe59e3602249badd1a219edc4c9bff57 +6cb78557092177e699bb18c4988d3ec40f797c02ae967135ec046e6ae4232f56 +c90c09dcf0fce85e735a9c4a4b5f293ab68399f50bfa6be95f948a596c9eb539 +a5a6c5b0ccddfdb38724c2abbccf08a075cacdab22af4f42c5ff0f89b9b91fb6 +4a9eb455317efeb768c51719f55bdf600d28ee434ebc8c6bd3f490b464028a0b +cf4242fc3ee606f46f0c5cd7fd44a6defa6bac8dad113b932e153ee0c35f734e +b7babc965b42973d42f4f04cac426f7d68368398e23a853979327c150b5702af +858bbfb7ef33e90556e12008f0918f278733bc0454c2cb283bf8f4d0af5b450c +d30bb24ac1a5c6507415f6dc37e4422d53f27b08b55c68e535dd452f37e9b3ea +6ad286bc97c5514cf3255fbe7444cae76dd549786a058d6f4ca7977ac34f7e21 +ca5b07d72d0ad904e9be97f214c3c7edcd1e7db16293bbba955245a25a9c2fa7 +0c292b9bc76509d31c4e3caf23246a98f4946f0d925961d8bdf82125064cb0c9 +fbab04d6a81191688e7f3ab0d2ad54047eec8e4c336b8cc594689b5da16952ca +1932e782f4a449eb443ab65ba8790d7fdabfbb32321ab1b534ba2755a20d55d5 +850e0f3915f01eb5ec3f890a8817d03a0d35ee5522e73afb65000d1ad2c36e40 +15694630ab02cacd14c83ec31a60c1f4e17269a69ed59b0a9291def4fe68d61c +b28ef5ff79f0d70290820759fe2141df39e3250a8bb9d9b8f80e1a823b8c8707 +d941f0b91a81f554abeaf09265b83c88c372b68356e132231eba5a1773c9f495 +de13baab4ce792114a5eb713bfcea8a4e184b02a91dc0584adf50f0f51d98d64 +f88b36397769782b8d8057ffa2477e1667eafb004e1867c153e15802cdc3e630 +a953b2334d1deae9ddf23452ab3529283826aa29b68b235dbc4c740e0c2fcbba +a22e4c43afe80277d2ca10a870e50d597a29b49c98b855d1a4772480d624ad89 +b65f0290ff281f7293cc674b806ce86937c07864365ff3b78da5b98d867ab555 +905669ac60d7c0459afc74f9de6d638467456c159ddf8e0798ba2347d43e103f +747c1c119315b95b7b9631f578ba8eefb3ef4429eb1755dbeb3f5e92c92c13f2 +a0e9408c11a80015e4b4022c8859ef89276d372e6bb468d0ec8af5c79dcf1980 +2f9cdf63babbf3546bde26532acaa00c03e3b4d8061676f465338ba94afa0ae1 +7e1fded343c0230e2eccc5ae80204fe7efc58dd0f6bb7e773a83260074873dd5 +ea5336cce288a9bb1a3aaddf90d7cf7712f55c66e798491a0d65ff04374ad7da +6e57916203b3b7496bcafd1f4e0ba76e77f49698c4e5bd47f04d231918dc3f58 +6a39c2d5c0296c5defff2ea9662ddb2b5937f726083a4395253ecc0105a4d18e +6e0e01187e08d51b5d9c628600f02c642e3c33368e2c1509940b7d93625b7440 +0310078136ec576b70d758f2e147c32d670229205295e5f2cdb99ed491e2a78c +23a9c6256d60effba18505fd05c3061dbc12eb5f39d620b3ee937c544eb13802 +b9b56fe1a9449e55334f95f095864931a4e5756731cce677a35ad4894623e6c5 +7e675809ee9af4c9c274563018729b84919aa149839abe3626282477193d9a2f +ce208a7e1f136310361cbfcd5ca694a3a31fad5a3c5e515fc7729cc68dcc19f3 +972f2a85c6f57385fe133dace3499580c640a4fa47d3f5ad9dbefd5342c4cd53 +ed9164d68d86492a125c0f5580d2cc84200873e3e166668a4567cb72e19413f6 +c4af6c7ed9b02fbc47ac9ea63e65687f1a313dceb2525a8f2b5e57628673a8ea +45ae81b11c7f2c43960c12eb7db07a4254d849510fbafbf3fcf75a0e210a39a5 +bdf777d4af4fe8fcc6d0e731b45b97c97e2dfc316867e3cc25e9593f3ba7e560 +3d9b4285efb628c64b0d717152d7874ff7fc33b095a0b316cb1d668f666e2abc +87a900ff627bbb5c69632eeca4739eb095df639390943f419379508ff22ebfe7 +11df8bec2df5079a8d7b537e72eec4d0a926b9f17babdbb310dfc529d586d778 +a11a66f72a56aaeea6d7822ec079f1d8ba0eeda6a6e2d2f458f47fb28ccddfa1 +37e074e8d51639c1d264549fe5768e6b3cd05251681afb0c546107238c9e0cce +b26c1663c504a3ce851f491b3e5c2dfef54915f9b2316e7e8fe5a3062e405b16 +b10bc86bf85de8d310060c5280759b4eb72a0d9aacf98294f3334a2ffdc68c49 +04b333f75dc4fd058725b3a1b6fe0e2a85c9738838ef05705930c2455cc5801c +57bea0c59d1bda3318b32abe48de39d592c0b86883bad206a1051bb1a25647d8 +9a86b501c03bc13791f7533ac702aec36cc248368b43c2999da35b541dc5076e +c340812d199dcb716cbc4129b5f54d7993c68538fc40c6a879e625445834a62f +2261c5f4c15eb6e623b49426d973e890192bf15af32eebca64c5ee4e8f973e71 +5ca6e99de42899426810a23b4a2b4a0faee37d831eca743bad45e87c616828ba +82b89bb880dcfd5f4fbe2dd119bb6891df0de7a3a79b92862aadde07d0929fe8 +4c2b4520c0c3603542a01fa70661f1f804873ba01743567acd05e64273589caa +873cbcac1697aa28ae408c875667c2f74b61a565cf7ea78eb56932be75b5ed3d +0baaaf66e1952e43837dabce616ec515d8327d1c757967283564533ac964fe89 +dab8aa154e53218955db2b9e9c40fbc2dd84c87720f8dad02df36e0d4d3bf62f +045e5817ad3cb024d1cb86180e89c2dbd5310c449358a587ee25329b1f96f942 +f88e19bb2a1f06678667882a7c81efb99db2a2981342fef645a4ebc885c608c0 +17cf4ceeab127cf4dd848d5de9c0e63eda6e69c25d8972ec1dd842e9a76ab6b8 +0c85beeff8bbac3cc52d126362f0df882b03a028f0cd12b37af6c66fc213d3b8 +d12ae2ba4f5fe0d0b4dd6e65ae306385dab2a80042a269443f72c98067812bec +cacf94cf57e3ffe5bd91c9392ca22ed5e478b3a085bd0be9a9df4c7de5fa67d8 +8d79359c422cd9430471d9380c06a0c951d7952ea567f47654daad018b55b72a +598a1c2a5ba37bf4a5c57cda80e4a85b5ac1e5f56d0ab58c42ab2e1d49111e66 +6718814457a641ff40b31eae6ad832ce29fe76a62a819949c42f7369fe9d359f +3f681677e7092ce6695716a26d04ce8202a5e4189957b3ad9692af214cf5d651 +8e3d29826a26038a8afbeab0a0d2c7224d9045f0d5a8617b72385fb2dfbaa4ba +86e4781414b687fcd51140cf904e37143eef565894ea96bbaa0983cac3f472cc +853951d7b9422f8ea331af7d9997253ae040f1748d5aa0b2c110813bac0935d7 +9be088ee26b9efcc2dd66d833562a037909aa818a330d8f841ff816dd73025eb +ab7f9e814ebe360f9adc160960d27696cdbdda7e37082f3a58374e2031fe189b +4c4f4c65fd572c707c1b7e37c3109f47b8d59da544d4f1d90d04ccdd4530782b +9a16586d1fb92aa3153f86f6d7cb8fc2e1490492756f60e50beafc48d99819ee +f979ab56c38ee692a9ce643e22aa436b0fbc966a5c5fa898556fcb7c7d6ca380 +8731e496640e4dfba8e38375b434bc03a90be1681a0ca7a8505b3a238a1b88e0 +cddd5823957a1d81c8883319125029a64dfb4f2210a5771915ad6e4418e105ef +5816c718530b80d91263f8d966087daf38a2911a8e7ea24e2c3f5fa7f0a05b26 +f973eeb3641b28b34779b450fba70941aa41451d90491a38768d7fac8f5cfe25 +f9dff2c0183de4eb95a77926f03ed475c7c27da7530d19d3a4f4aeb296c95775 +9c953169d9a92a589ada99245aab73efd6a3f3c75c9c340527bdcba0d3001cf8 +47a262252014b1ddc8844d54b3f9956bf0eb1f9080ae5bf9b65bb6676c3662b6 +4646241e99a485e9d31451b1ea768b23e8b3982433b0ef7d46d08d7ffad597e4 +6868a39da6db4c72e08b686bdeda83ae0c9fc05db5279d118ef018e3f064c7e9 +e955f5295135b4792529e7a115b032fce5965cf40a4a50afa07b3778bf63a66c +367909176bc8901357b08cd27ba7fa98955bfb31a8fa911e60d64b1f129ef4d9 +e0cf45d88776ed30b050bd2d89537b86e73a67caa301a0046c290a35105d3af9 +3b01c9ab8d492f8d541561b53ee9da081dce3f493ecfc163c709f6b5b43b404c +f635910e10d12dbe50b7ac9c2c543d20b485f538f8d6e03325648a0d9fea93f5 +fbe4fe473f009da496b74170c7cd371853a03ac16f172f8d8ec6dddfbf4e1c45 +f069622367734bfe3b4157d535af3ac8f5b02772afe039a440466c80b24e9fce +84849f003fcba53059195dac8ba8bf5c89e59b8e68feb28be2b3cdfc0853a50e +0198338f680c7b13d90d3ddcf7e86bf2faa24d49945ba3c64d94276b7b0cd9aa +5065d70f086d84d34d2ec10809b8ff88c7e02c948fb8e2474cfc778f2269a165 +aaac36392a50942f86bf24a4f533cdc7bb12e463da1ff5aadbb5649ea511d7c5 +2d994b0560b67297706b70c863596f3b0182f28bc5a31b7918570799b7bce364 +1755c77be306ca4fa0eb28e98459b7d1f8d5025f97fc3755aadc778f4807dd5b +645985a643cfa501e23afc81e073223c1809151266defb616812c7e4713122b3 +f80750cd3505605ff685629500473d6acfbbeba67ec820a3996d05276bf0683f +585aa245fa9bc7e9f5af668275d8bcbdee925e5f0706d509067255784674f30b +e68bf363085abd8e58efe8e347da0194fc9284deae3e3ee7f85db3c433379eb2 +b74dd376e69af8027817c841977b9fd4b3c2e58dac139783f79c66ec69abb052 +35650e691c9cf2defe6677671d7167107bf6facce17e6aac4872dbc43dd9c02e +064ef660c2674f5c6d392b2cf2f4d033d841e58e28753f70ac1e781880dd4430 +292e3784ad8654c00d3fa605c48944352f52b680dfcd61b1b060b95588b32bc9 +771b7df778d0e07284271351af76256c37b0d9807cd5dbd6b1ac6be6f9e174fc +d0627301ab0908df6fa5e205d01ef0699f4847af0df972f1f9b1376c4c1da93a +ca609b7f4dbfa695af161f729cd689960f2a0b28d0d2a30d859c2ed5e24c487b +c1b1ca1f0bca54089fafe3e5c21d745017b314672883225ba4fb8dbe47d5db2f +ac29e3ce5204e8224d356bbf5dd06f55606bc8060b0fedf27d79e08328ee3277 +ded79751467188a434016eb2d80634c2bfe1a7ad2c3658c87c9fd97841b53cd1 +64f382ee663fbe8d1f955f0f3c61dd2ec950aff354cea0253c678eda35caa29f +b4cd5d427e3987c3f3b44085cc5da0e096280b782b813e0ff9678813450de96f +913f2639a367d8c1aec17a9baecb1370afcd00e7587713ca3fb4f1f4af7ccdde +fea7d743e2a10b8d8c388a4b204e616f08d2a3d34d9fd1b1a465a69cff3f0acd +314101fd4f4b070b8cb58b1a0d5c7e3ccd80a02914bdbb6363fdde5da5316437 +db9a51d831af3fc1b24b18d5009b10e3f6c7150a742f7a2160e95eb5d64db15b +f268b2aa414804836c3258c897d589acdc4e361b8a07c7fe3454f7a72344d8f8 +e02ece56de81b30f6bbfd3ad50cebbf95713a441187889a4be3e9b16acf48c32 +0bfe4e9f431a78a414a3d8ee9e7d024d6175a674bdd7ee483e1b84d5ec50fb37 +d5b82a8c8389ba51ead86361017e2d13b632a67099097e67fe3ad4c499100b5f +9bea2a4014af706b2f8652522e36d3c89953fc2feac1f117b94bdcc90cbfbe33 +1d4a53c1d04e353668914af5be597c23031ebe69446d960e96af16402974423c +e8f7cb37e2c0692bc07debb45bd371730e025491d40f023de1bfddf5b742217b +7b2492ea4dc5800e46f7ab6fa112c607dd2e5177090797a31dbf069d4182c1f3 +61c089acd2db5d670a200e1219842e89f2416dcc846a2fcf8464d7bca4446bfb +08daba425a080ac47df23b8578de3197ccf12d8a1bb3a7d13c89f89a7efb25a5 +5a79fd03389923e3d5e3986b4dd4a9a8f877fe80c87a4b5927b5aafad5b2ced0 +b23efa3d5775dba60cab8cd1312effa72128122cd92228a517286c51f85a3499 +73b3e55cdea0317f543ee01861298813b2e349b2a9476acb3033ab1fce12a54e +9c81b33de507059efc0f178672cca6150a09fe3eb7fb3e11e62fc466fdabf87a +a442ad9ce10d64beae950c459e7be0257a3a951e2657704be78821a2b4de134b +7c730e1613a071fededabc255ced8a101baf5ce9e4e5e2c654485abad1e37fea +ea1f11b1274cddd671ddf801b68719a4402e0972c494bebc2782ddf28ce9a5e5 +09b1b22b371000e06beead02c1de5f6f747ed3b0c03bb59db4c11b6d53fc97cb +392a1bcca302a2a72034b0b840eb140a24201cf8a5f3c14c1ae70695a852969d +e34cf489f0fdd482deefc12d8fd5e9d598747f21f0ebb643814fcc20246ca3ca +d57a92518b5f39131a1b866374c1cbe753fbc624d2be96dbd28368ab20684c90 +8c39c4a67c4c8b362fc70b6de7bfeec93b265f3be853663bd465024f53824488 +43e5a518cc2b7731cc1d3f92c7c295de4e9c36d838a50b8a110bc52f8ca8e517 +2f519d29b5ae01ab8be8f6b1e868782247fc17204df4be9c8fbe5948e5fb93ac +1fbbadbce53c047002cbad6022da49a36b587ceeb5fcec06af709251f3511b34 +fb339c9d1a02291297f732806abe83d7f6d173c697cdf08060a9d49530c8fdc9 +9a561883bd7511f79890b21b39d5f9bdd8d04bfef8c1d4d06c55e17bc563a600 +a411736ba620de0576812cbab5ff1476508ce44136d4f298ea2b80f46849c188 +82283045e754d01a83e24a3165ab559cecb8d35f7f873316a9082b0d3d296447 +104b2b5665603217db8bf2ac098629dd019a62e1c0a04e18d62472f1e357f539 +05b185a3685035ee651f16539c854cd8fcb487074bb586f3cf5f8acbe70a406c +8ec13a62bcd387068a01cdbb8eeb2fb317574d6c100ae3223f367934ecef6379 +000fa21c4267d8a9b3c606d73bd407c46944d730359184c1e29a17cafd47ffd6 +d231e8b3185319ac186cf5648d4238b18df8cf995592f1a0493ed422fdc7e4d5 +35d6deaf8798c8d737b61d27d756afa3294ecf2110ddaeacfb9bb17269a7bdf9 +9cdfb6766afd2488452b29dec267e9dda937066a625c54b40b7b7fc63fed209a +2a200025a30dce4f751e8e0d570d23ddec1c7295f7361e711f1e566127b5342d +a92c86fc99a9a64d69e6be4d29b9fd784333b0919afafc034784776e12d4fae1 +0adc77829e2de7f2bb5d748b672272550ee6e58b8f65fe32cccec19366da4dc2 +5ae28167c4fcbe7f3ea94f00d5940f10bf8888ddf4fe6d133900e0c1d33e6515 +abc74eb33e8842c8b287002c1eae16ba0def87eeee6827f4677f781dd737e01c +08c29b61c95687600e0f58b80916083d9ae59739474dcee559f6b40b1f29b138 +c62ed96c6c15748b43f3bbfba1b0a950a590d32ca8c763ba91644859a0032e0c +4a1ddd55016c1da790fc93363e0e18277fe7e3b5689a1e091ae35716dd031d95 +239d0ecf479b43c68c1a45bfcd83f418a833583d1bc632214b65b775af82c9a3 +b882621b9c8b643dff3837a98d6bfdf53fad92a5914ce75bf58795ac1cca13dc +1a0aad27456eeec4637284bc9cf1e2ad61e080c14a6b7d7601779dab8c0a8b3d +3815bf5af4061fd212f1afaf4efc34e5f7508214e7fe9c508f0c7aef77f437eb +5f542173cea7d7275fff8e6441fa9fa472bfdaf066cb6de708b092c45fdecc32 +660bcc166713980d63ac87ce3e5a2e99e2da8e76fd98368021967edf9574b4e5 +395e86f299802661ac5f33acd5c9a222b6aed411ce7033a3381406f30bed2a86 +31965036aff2301fb8eddc51bbffe165cf1b755d57ce38ec4cf15ed0e6d01d21 +e7099acc19c782d08acabd8d32f8c8941e9ea8224a1f3bd81a385b6fc52f1977 +ef28778f4da91ce76b6f2716e1264f79ff2fae55993fbad46a17c6dc1108b1c9 +9569b80ad6d865366fd514d2224944cb41b8c1fe15ae78b3170901e50fdeb15e +ab3ff248ad4034923a563fd4629b7300fcc2a67439752750aa014cd8409f63f7 +0ad9be15214943d085d3d1ddd5c64f8b92d94536ef9ec69c35c042daf0ff5b54 +4a308aae7ce2332b11ea1b5e8d20f76d75aba4c72975bd5e6f6c2a52926cdb59 +efb6d2e46fb262210c9c1a66a3cfb95ff92bb0e13bf0ac2b4db85b45764034dd +2aff6915845e1dcddb778c33b14587e7d2be39318925b59155c8857058769fb0 +5ce31293c7e061c48fadcaa3b2f11b3182fa4ce4b8db1132fcd7d25a7cf97b6e +9b76b69c2f86111832771a010e91da9149f115bace6a5a80edab65c9b0a0b055 +3983c1333b62eb97e1efc66a315ec58922371b5018f86f0b5117a8d66652396c +65b70b98b89760185df4940329f6504689e94e625337f7f3cf130924ca8b6edf +ae8fe2db33e7f7b501fc4c3b4e64580c364ad81d1ca96efba8541dc4dc5e2c07 +b29e3b813589ee25bc36659c3c779ac50a932532a03414674f1321d070df3ca0 +96262d8b286b0af7efb0f3f707dc41521334b100ab7cb2ad3d4140fd56188700 +ecf4389e577e254a74180ee0ea0bb1daa92bc2d406a9fdca19e869208bb3ec6a +62606c4abf57c13ef7288a0f237c379b0a422331a609ea6629b9ffedf4bd4fdd +c4171bdffe9ea2e44bbb6a1bb5873bbb0f3ac7c5040852b7f26afa7e20d9ac09 +e7a6994cecf14cf00611125f3b6e36775b3b19f2f4a810f61b680abfcf3e9991 +12f8d74d51bde1eb76af3b4495c4c543cf761f03900372b572804e599b4f8483 +a3cafe67b45947c27065d86af48297be26791514cba354bebb8ccbd290eae082 +c41317b3fa97994586228e242e5085ff08e23326419bf77f5ddbf0dd72360b98 +b23c838cbeeddda8107fa8fdc27d214ae29900d801ef539697617f91af4f414c +ed9894e8b2cae2909506dd4fde9d3990d33bfe39f78698a50ebf12ba935d0820 +9ca378ae88769307135ea5993361db8b63257a00839c32e3aa20e7355bd903cc +1f99b0c5519829f4bdf321d5383f60052a29e302a060da95aa6c0f15cc031a90 +b5e666da5f22226a7ffb01d73ffff0f1f571019f43dcc0e0cd14de9749d4cb7f +7842845d25fc651223998bebb3cc05b3da38f33f472fc71b4a1e3dd92e2a23b4 +5dc01ff73852d0f598b079bd908d46be20eefbbcd7c805b67ffb701fad750b90 +3e9283ee26bebeefee3f754ac5945b590598bfdb2f5d694a6b56bae14dc07f9c +08a7a26b2d54df9217365087ea3e4eee83f9a970e3e6c2984fdccb0f6f06e9dc +e7fb44aa3675240334d6680ac2624e8f4cf8511a630aedf7c467239cc7fa6c04 +778a135953622565814799e13b30ba503a72f268b2d3163c7f68ce18e6584671 +a8137bf782d1de8ee1d5396bef1dd9e3810142b10cff936df1c4578df05ce286 +c681188bb1fdade4f48d600f497fdb015bfa6107c3f2e44d98817b80766aad27 +5af33aceb7c712eaa7a0eb2f2fe574c9a0fbcaac83f63952e6a007e322e93d30 +56213671fcf69e8a8425eb2757e7f88f0ef2da9c1ddd960ead2dcdc13820e590 +2bc18e17e82c261176a3ba7f1decab1bac6b59245953972ef83dfdd8352ffc31 +2ddb94ce8eb6b3dc7b818a78a1e4fee1682f0cf4085cbaf264ee31584464f917 +3aba870ebcb11d4057699c71a99092f0381a7d97491aefa44e0e498dfbac51ce +27fc85f1deeddd866a6b1f6ddf62556af48bd73ef6816eee5f51783bcc82f00f +563a12630ea99c317d11c062a65531916e1417feb8098fcae7720ccf627435e0 +9a0f6fc7c400220522d482d661f184e7351dbabb1d1dad858bc966e8499263e6 +74eee2184ff52aeb2ebdf36bf874e887e2ef59236165e3e859a14dcf8f5bab4d +d329a5f7e6b3fedb724c546296a87ce9760c65a93f666fc8ce2c4bdda4b71cac +6fb644b0d0c7193a9cae63e51efffdefaa065f2f6d559c678cd02162cee42812 +3367e39009879e445bde44e91da03a0289e2981da5ced3cebad8767b5ec9fb85 +d9135ff6fdaedb35a8ef77f63ec1ec5b76804a3bdc388191bd6bc056bbc4cdac +95faa3f5b882bbfc933d5386c71a9681e7777b18771607e11b2b2ce83087e0ca +1261b9b23f8bd9068f93c898ba67318e3ff48d2da70a39fbebb84f2d542be185 +e5504811ce83f1a28ce7b2e9e719a1c5a2d447e9317b7024322dac4b6f0e6e67 +7f0376e442a981fa52c9f7c6ed9c900edb4aafcb9f99c72c38aef645f05a9c2d +e18a9f245963e09f90641c4691472e31d4c5b6f82d62b2eb52a8bf47eadb5fb5 +b615dff4bde82af1c9a1bad057705bcb7ac9cb1dfb99826167a0e42edc012520 +dd0cfaa1ad506def92e8d6ea3825e4834cb0d15a0548f3861f3c043332ff0299 +204e504af0e34bf8dd6a2b05ce32a941e6d34cd323b1349f2087ae1f78f0563b +2174d860543b123d02caa1c8863cf87c2f14f47fd127a14e3e81c1a537b97597 +589f0a16a77daa3998e11d9a89d4b9d104b47d16e55d99eedbe7e9ca67b96703 +cae04e5551b9784271707805f3688e4017a2c7b2fe50ec4851549bbd9773cf38 +9f37b62257f05e8f7b72b7ccf09ae3093a3d92be0ebcfc958db8a9deae4d9d4c +3bb1f5f4827b5dd39573182ae2fda0b85499e11047ab9cc583b57183bf61e6bd +73347efdd0fc731500cf905c936b62a98e21307f8d6938d9a9415d08c9ccc393 +99b85a5c4b683508e5a8627893a403b97828277733e7372389d260de26dbe188 +f52349f60146597f49611c452d6b9a51a72012f97f9f0bc279621bf908f6bdff +89a66c6568725166a18fbbd151c851328b4bd75de834c92a167371a395df89bc +e8752b3c5993f113bcc5f03ac663e14ca4e447c0e1400c2458387c2abcb33bf7 +2ad69eb5d0303d565d1ec18c7b0be78a5ac53a6ba8776dea818d86bd4bf04842 +d4db797a7650f9107bd04a8705ac31d9b6c3eec202271c20816427c69520c183 +aff754c05c4bea3d1d43a709c2861339c71e0b28219f5dc76d9e546fcd63d2c0 +c317dad1790dbdd4bdc0ad5737ee7d3153a235ae1bc7514081c31b2140ff2ed7 +13194df9f9597ede3c860934051551bd0fce2011c2fdead006ab2f768c89ccb9 +f34596f7ddc20932d5929b7b594f0ffe73f86aba655b3eb62f9f56a5cf7fcbcb +cb9f2c277601f7e0a45b6a0147d2e263c6c883439f62bb8e85fb646de9f29c41 +b2feddb9fb2c2260d14fa4277ea2164bfc546b741a54d7fc8324b9d02e3e90a5 +8398e226ad23ddb0b7c23d2e75f393b62654842577cce02200464fcccdfbc777 +22eb4b68ac4588c2ad04e58f22674a480322c25b69196dded3e6d2fdc8ed9489 +389053bdf618c73298d4ae8d670d048a895be253d814314387e99a4a5cf15813 +a5461374f5891b72da8b911febb422eb5c5290e640b695a224c2b53f88542100 +11dc2937254649dba0695caf48adc2edbe5a26de9b5b1452047bc490264f9d38 +dfdae95861a6871fa7e15bbe4e33bdd740da49208b71c1a043e77510a9e4fa5d +bd419a666a47bb19b443c19b7a0d57cead68b15ad1b6e4c27bbc95e9e79da17b +fed5b2d75ef7d66473d1c16409e918f52ba76b4ff6070277360502a8ea8d1db7 +fd2e0583a3e2ca59beb75b343538e1541f93c1d238adab548bac11c2c9e27d7b +f58fc6226f22278c5215af4a4c0b35395ee6b92dabeda8b507ba0e6888d3ed9d +2aa965168837d6e52f4d5bcff5263564bb4e041b45410ad7d1567462c2df184c +cc8b383c7e068eabc0acab34a0cd24a7fe2df0763d4dfb78f2a585d21660dfaf +e9d1e5591b81571b822b99b1299f4a75428b5b4819052f41bb9f1221e2a6467f +fafab30b6edbb9f107bdc7be7eac002804fcfbad229ff6cafe5476d848655c95 +f89161f98200ae7ede952f47ad5d42c6c09afe7354371ac19af37d332de32c72 +48302ae3f0f553c4d17be2c80fb7ab7966d6ae53bab55970da8e239c78c19160 +7255b95cb245274aa6ee9531c0a74647416abb7693fafe1ba1ff2ceda9901139 +1974899834cf3997389791d5d62414a84cddd4eac6589aa7486a49114d075182 +c8e18391af43e8743d67608fe4627840e4148d98bbc8aeb754a41f1517bdc8cc +fecba2a6a5b7200d99358c397e3cda3e0dabe32d4438f537a4a569c2c2427172 +0775d12b1aef721fe14de8692199a161bfba83ecaef12a89587e78bbfcd27a87 +90f2cc0ca6b197a8729620e220a55822c5d2a1c7c3fec08a3546cd607ae3310b +673406367953234350655b2f4875369bf133b6de0e66d7eb95cb1d3d5c7ef0d0 +a800dccefb154c16f84dc5144b2ffdda17105092711fbd1a39ff654dd46d14bb +6a46edd0a545ef456e2b3e29f6b1c31eaf14fb8e4fb8a90aa845d5a6504766a7 +02672dee39b09d62519f25fabaee345849c587e1748202c588854336465b3aaf +83e47d6c6ef609d937c38cab1828d76b7bf18ed07073c18725cb9d334a0a0b21 +c74ec380234b64b5d69ef058214499ad29e8f58a9d39fa56dfd85ed0d25461b9 +42040997d044528e8d0afa6d5266015c57a37d4b78794410610158c5909f968d +63c2d37d24dfc40d4fd9d16de16ed7bd43d45918f7de0f4adf4c95b4cd96a7b6 +ab34dabc1678cfac6b5cb7ca5e8b70c2bcb558c1c9bf14cadacf4f681a9f0727 +e97665ab003bac4b8594e8ec993b7c3c357cf47029878fc6ba55278ca31c796f +6bd3d0afaf98fd9251b8c79688693b13ff9a912c0d84c3a617293027e1160363 +3ac19501f1400260c214a256e4acce426f181bba4dc3ee41b4664b2f5db575fe +e20710944d3c8d91f3cb62193979f5c6fe270116acb53d825dc5aa4e5b9e6054 +3ff7a1014cb1b2bc9e7df65d9587f8b3f31211044e155410be02fd067c996169 +458540eee65580b252312a98542ab44488e46bdc53f486a38d3b33b12ecd2957 +927237fd479e0eca5563ae91a480b5e4f87e57cf394eda6a203f001779423387 +62f0c3899cdf689affd19a42ab2c78fdf895e66a965b9151e4123ed673133e99 +ae048c8f387d449f7f22bc754caf4639c896d03928d7ccf9a689b9f5153fbdc7 +5edeb26629430db235b8e6c68641e9172607545e6a94657d24ffc76c1bb01b88 +a5dc000fc9a74a10c7621a8135f679c7283f81282e133035087ae48cfbac844b +1aa3e58608e393c0df3015e2387916226b078de07177cdd65991c7540276d4c0 +dc5b3e08d0423c07607d87f974cb02bbc6657418ff8c88d1d456c5fcdf4de23f +8dd92e5317f08fc548f7f526da9f29df75790bab10c6f86b655ae55749e13f56 +74bd222ef3afdf477c55c55e346d260d68697597e703cbeb1eae01c8f0231324 +1124df8226ad376ca3786d49e41776b07ad59e7fd7bcc5cc684f5a7335387109 +274a441a79964447261352a1e417dc1e1b32a91e517da1a1959809b71fbaa8c5 +0a12a55e9e1eccd7d836966c68bfef7ef0053575fde24b0bcedd268b2b9fc0b0 +c5e02f4bdf939ac5edaccbf2b0accccf13db8c87ca6bd03e63565d9a4db19bc6 +0b59695e042822c2b45fe12c5038f6b1c318af17eeb8a561b38582a046a91a34 +fec34ae09019f90681aa0f66218b76dc20a5bb15a400922ad3bbf766cce1517e +7cdd9ec7e2b9b887abff6925fb92d9f20b009218063e85c6efc86d9532115a9e +e6a1022ed274ff112fafdfa7f564802b6ea9c78920e86bc7d73bc90495c77a2c +dc238dc036490903d8e8dddf8af24a2a31d90770e6c7ff8d671b2e1fc9d31624 +4b70b4db8fefdd77614445b75a711886eb9d780834911998b346896cf80a5c1f +5bbb895d819f53ae58cab428c71734868b2ea2cf39074de2009051afde37391c +67d2f91b051db71bc0a0a7fd642077e018938ccec1c530869e32fef6f6132f50 +9943eed2201172b3f416ff5b109a577ff4147933b95f00faa94c8121cc42f882 +d2eeb121b00e2e3e387125cd74af8ddd72ce3f074b7d6981f096dd6d0745e3eb +8ea7cb6268e796b66baacb8f6eba692a9b03ff2f4d06b1bef3cfb471654b2d6e +f49cc15094cf3c028a781b128b8771d836618ff1ef6c66bfd7fe8f5f763df480 +cd1e6cc9331fc94a72a92ef018feea79547e048fa60e7ea527500c7f09f3bf02 +c1ccd225250336ce211709fb46b47fbb8d4d5f4c0ea7ac326b06dafe96bc30b7 +ecd95fee8e3339ce311a5e135dc8813be14f5811bffa6b3805e69b4e74a8a2e8 +fd73c3f2673a4a43a2b9305526d19f6e19222968e2e9ca4f4d8288012079c43c +7be71dea81082e9208011d3429042b065e9df29fadcf71fbe1e6603f54e71733 +b2af63a58dd5151d79b08a97d8db85acdebb80239ad5411e2c02f38e7b9aeadd +5d9d3237567062d509c51df7f9514396b371cd18bfc9301963cc3aa8a34c406c +d7e7bcbdcc5611775dd4a5ba67304bc2682e35e00a8c5cd67588cb7d4b704892 +3c27966747b1fdd18374823d3d38ced0d70d5af4504b632f50dc76b5d965bd38 +b0d5ecbcb424d087373ad5d9bb36d9cbb86588b1c7e2859c335d24e79eae9778 +444ff439606bfc51b355f488a38175ba97d3e31911f24c88e486faf49e1181cf +1554722e7aaa7d23dd11e35f78dd62ba4920c3e36969c1fb7c7b3ec669e4affa +18b87b9d701bb69d3dbe2ea4a7f1181e394e63572b513eab5c6422b7505c5989 +30f26f72235fc93eb64baa1f592662964dd9122ee98796b80696383c31a3e69f +040fd5bb2e5a4bda23c5f4292a5647dba87e0c0ce5e4036153725138aa441415 +4c9cf39c67c0ba1a9d9bf9927685b7fed7c4ac6354f0e17467dfc9d7918c6fca +563a8e486bb692f82b2b7de97526e14197bda8920cda0e8ecd7a625511869713 +2d34125ccd6a525d2122d91863d2846deb7903a7836dfaa1355d04363d256cf1 +17e68b1be50e79786ec5b5d8bcbb9ebae3d90f69d9d112c221264d53ac0dc30e +21446a023e1b8bde877c1fe200d373b2abdbf365854bf50045e61e580fcea850 +6dd8b34de2dda8cfdb861a0bce129968664e6ab87267714ef0da23c4899e3c58 +e518facb9e87f2f1986cd01038d665dd8d99bf91e89935c54772444bd67faed2 +4944ab56fb310f209c24c550b670e76360a3666ceea04987909862b885234624 +2fb5129c2466509476cad6182bb2c0231a78d02b8f94f0234ce9657ce5ce05d2 +34687c96766422cab72500c2b864ab69d15411a9927ceb840e9d1de0b22cf2f8 +712ab4be89626b6d1b4bd22e64c42adca94aa143e12743250f3a7c52239f9ceb +cbeb61eea092e5a692ee3be65b1e02d0f6a7966ac3543066f4e868df31f99e50 +8bbb5875fd2147b919065db337ddf0111fdbf61efd016a68a4d08a48f936d69b +2e339529b46f72080a813307965205d3b415af6ee24b11a8310f472039c8e030 +dd85ffa52f90f875464758a0f3e80b1704433ce9d5cfdc4e38df9327791ef7d0 +1f0d4466fcdac9376be421457c5dc859bc71cb1df680d64f6a7fc4968f97d030 +d726c403500dca62b7a4a11f28fdc9d87633d3d04937490efa1355f0be365fcc +af456bfecb5e566af755da2d919d8c428c15929341ea239e0f27d165cc8f64da +9e2a52999c3cd1cc17dae79b154fdc252ac4aec0275dd57a1352d4a5a7339d51 +234a4265111db9e90e9a376c6c582c4cb051fa38c7df58844810a88ffebf765b +6224ac551e643fd74769e2ffb9bbd91202a36f1612e64d168c4bea96ca3be4e0 +fc0d71a07fbdf5ffe0b41570142771716ce2f2a51b376011b09cd1b5577d03c4 +7e23fce3e847a34fcbf402b3558cfcbd4f7932be5178ac15db73bd7d6efb65d2 +0b6a97b9f9b5e391799f5d36ac6d33d62eecc45e0f60bc4c4c5c2faeac1eb64d +625c3409ff4fac9a47535986c6cea573efdf6e9f5b6ba8817ffb5411ee61f403 +14bd0bd7a95f0956266834af2911caa7056bd58d24f3472be33d33b86440eecd +6fb79a2c12f59cc52477f4664e730d0c6770fcf53a070a375b027bbb582cbb5d +402dfaa9c80fd7311117bd6ebbc900c5b0964189d3f69a6f9c0c4adf1f50fb2e +22d859ba80ecbb5a70a05dead488c8bcafc43fa4c03cea742e62ab8275511578 +9eb94b2fe0cf894df9582d966caeb2c7c8f119be201ec17bc43392ba2fff5b70 +f659e345519b4c8f75edd4a68986b2ef4eb0ca6c58657c45237114fb11ccd655 +cc3a96e3c7d0627bf4f8d7c1612dc2847f013da07cd87e5cd338ad413dce0032 +9db85dd5eee2edb0c21274c699b09350936408180a1cf12bb5a4713d247988ba +03c2234446ec4dbf72162fb4de950cf11335d71ccf566c1f4b6bb28700e58acc +9fe9d4edbea9ddb20ba24895ebc79847072c686885a915dbb9f596633471dbb4 +be71403dfe81dd4f782e861dd9f6405ab4ad7e700b5cb18dd523a0808f39942c +e1909ff117fe9ba9493bc01c8e889599ca405ce4f2497ee30a3e22e4da998432 +29d1ab89dacdcb8d9fa8270afbc92b5982bd89e6bae06e3ffc743e5368035186 +231a751a0afdfb7a705abf90ac5d8487b08450624fe5b5a98e1a8153daa7158f +15b8a6af629fb37cc2b5b66f9ce013d21963bf0e3ef0e92d089bc0671420f65c +a70f1485cbc947efc0c356f0c16a64eedb3c2c7cc30a1e6d933cbb35a6e57789 +06b68a52c4a13902d4fa18a23d9ea428d88097f705fb720e78f92c3213ac28af +2b252af9fb2bdfeba9def6cf1c7b3df006c9f7b05ad8a4dabca5196be1a1fdf8 +4dec0de2fc9428cde9bd5608d802a7e7ae8541a563b1b6b4240d4527a0332e9f +05ffca58020afabe4a2c5dfda10d3a8a1d58b76c1548d3f3a2349440fdb82329 +113801fe6e15223c58af7494e9419567bdb21d58ae92f676a09f96126bc999b7 +b690c77430e52478f95ca670b58330f3420461f4583e7a567367acd3af428986 +e9c578b6fa07e781186f400cf06aeaf17af3bf68274341bd0b1124ba674a87a4 +99b13cb35dc1d22a01dbcbc27030c5ea2615f945cd2a75519a6b563272197ba3 +71fabc1c4b8ac711dac722eb3cfba7264e1cabcf87683875bf3357b1bd3347ac +636a6c962a2264eb10f7bb9aa16cb30920e5b0bcfa09251460d1a8199bda3c7e +9154fbcda98fe12921e4388a23e9b6a978dbb38524589ce2cd9657ec8c775da5 +fd41c38784f3305f0ebe10affb6c6da26279cfb6c0cf1a7582b97fd891b66745 +0cf26a8aa48bc81b3a3840a179123cbd8eb213378aa2d3980a13df1c4e375b03 +12518963951a1a1ff5e11ea9728b302e14e1920247628febc8fa9363677b8f93 +f913ce063216d94994341af4ca38991b93968dfeba1f72cfed3a67fc63c001f8 +8366f02622e9d0dfc6b77bdcb35aaa2bf05b6132cf3ab7482fa3a6ffb0b1aa03 +402fc5126f9f5b350b861d66756d34157e7bf5ce731a92378abfa24f95d8779b +3d2ed6425f5835390c6058e60b2db146843ec8948556ec07fbfe0cb3c7d8f770 +b432c6193a206da93ad9cfa770af594901321c03819cd55231043798ff38104c +2923bf844188992d60256220b707e4626c2bdbf621697682c4cb2419d252c268 +cacead22dfaf7f68da2680f036f90b36ab459ec1fab5ed79cc42e93ee5288149 +acc1ece1d7e3ff4d4abcfc296703407556a73ddd5353542741647c36cc0297f1 +8a29711fd1ce4f1b2530d16c0e5d50409d60b7bb8549e6eab31df3a2ae842bd5 +c79d72ecb127a4252a73dfe88b64402f46922a566d2aec02cef1a9995c309128 +e0c01daac57c2bd908a38880eb89a67798803d622dc1095bfd7c5baf250d4ce1 +00cd0b2c68068b8dcc90daf7f9e43aa7ff4ba7497d9891be41d46b66bbcc4b6f +6fb1a16e47966cd7fdb3e46f5a907585bd63174661d6aa6b4dca35f0f7ce71d8 +1aab0dda2f602104f87c2372c75daccfbfc8da699d5fea9b30a5ac57739b264a +a857b86fb4d8949f2130c33d93a66cf2e67239e597f4d3acf4cc488dbb27a115 +6122cb2028e627b5f6e6a2422c3fab2118d9edd4a7a5ad4f2f972e654b5182dc +24f4f9dfeb9d729118e908a6c61273995b61f9e0d5e4f9ebbc833d71c48916da +016ea54fdf61d1b8cbf8f77880466434256fbf7bece743b5c3c0c35769ece31a +e77487c89ed154b56528af8b2a0566d23ecbb72887b87f7fc723505dde82788f +b772bc325b6b20378cc109949f9509065fd1d2d2880297abf5080920cf3513c4 +fadf15c0729d115b4eef238326fd8af8ab11cd73e7e8ae82aa9f788aa553162c +9f25eed16ef8944836e3b17a4e30137a6da316a01da67fd242b60b246cc3944a +0aa6eaf9352be01be756e9d509c95706f1c05059eb487e3535eb96b5cf020a8c +b6aa4495186fe44658d332ebe8f139e661290d4685f1e9fd9414e8b4068ecc91 +95f3d7c1a9a4d449bcd0cdd43bb6e92a1e2050b3fd864858c5c14472c105d265 +e2fab192f6d0c6e52ebf09b18a09395c9133f6c3dec68d4395d6212ad4d22d79 +bd1782c47261b3d598ccc275724612f61d46442786d1f39d50b12701cecfb25b +a1ff89aff8bce3cea9d8f971398e7feb57d1b7b108b5cfc7a4c0c87f88643684 +fdc48ee0b55ac35dfced9e969dfd221a48b5288381d0ec5b86512f357c24a432 +e7b51dca1a88cd092f553e33d57efd1b61d4e451f100e0df789b01344ed73752 +3d769c0264ef97629ca3d7026c1465114c51312c16d0e45d114986087621979c +0182b1533818703a489c4a222f50d1dc8672fcf25425ebfb5ed304357b44595a +f68ab6311ba4b4f866ac79d8e64287202998433c4a21c06a258d7d5bd19cb6db +b1399bfb35f3ae8d11657a48b4781c8a51fe26f6148194917e6f5a3b7d1b50b9 +6e266b7930ece14cea7f62f03e4745b0e71c2fd2b4dceeaa13b2b3f4ad8841a3 +4daaf8819b87121f253f2c22776c295fe0b08f664fa9e06bbd375d3ad1bd713c +ea13856cd5181200e2abf56a64f5ff7fb1a4a4091f69cdc5d14bf90af20ccfee +2c0b3cc214527870260c544514c161314dde5745c1f7df5688c12d97f0b69a80 +1832f2d4b10261aa9a522a4e0af6c77096aef947deaec1d78799edf6885a7514 +0a87d255f7490e07645ce57188ab659d7aeb347e6aff706d74722ec881aa453f +771cec0335b53071febf3bb7012db68638298717eb78e4664375eb479d21e89e +5c8238614fb5742c22873783c16e1c94276a9e533d11b76f47bc80a79504a1bc +64d94d3bbcea6da65f583a98a0ae12ffa7a05feedf3a6f8976c852d5aee37b15 +b786df020f497460372594bc59a85df45ebe3fd582ba1b85715eb0b7627c470f +21b65b01440c43282efd9794a2cfcb4c20cbea4f0bc356620cb1d84d2ed33205 +ee612331cc5de4d0bd9f054f7ad927cdf1c33d0c278fdb3a03fafcbd525b14cf +a58163121aa3dafe71954423dacb2b128b06fe61eb642e485277eca766b5288e +1f67d78463385478516546f271d393c0ed0333a2be2bc190aff5b65d3b58eb7a +dea942dac22d6a73b81eb6a4140860458309bb0b2b4f0decd2158e7fd100afdf +e152e2dbe33d52cd283753925e2f29007f6b3a67c86a08f42fe5e10fc01b7db3 +0bf2df62c313418b7760027fc26eee12d61553038e2f70eaa26677a5f33bd1a0 +4faf0e425c5a3428cd5a0c88ad66541d8887acdb92f9b41d779829081ad29539 +401cbc506878b8c0e0b17630321dcd0de8adfb381f2205444b73679e568e70b4 +52757a1d7ad3e503778bbfce70124e5a1331b7e81c4ead603ebe5b1364d98c35 +3e0ad5fe27a498dc8be0592aee7d909c99a4151dc8eff0c70460155ef1b3a9c3 +1a11efe2ce94766097ebc5e9be734a5517c00931658621d242b095823c8fa6a9 +6c06c6d3b19db5f4903fcdab79f59842e378a09eff2010517a70f13e49836397 +defb5db4305656076833b43a2bbc1838602ed4a615b7b2cd1fa6e54bdf2aafba +5447b81ee7a30307f62b00bc32e774a8484c68785bac771670e6950c797077fd +7a60efb97b20705b09722896630a860e775d432acffa0dcfacdffe25a174b946 +4c0d2b00aa8e118587f95f78951abd575a27451c33c06fd2a9f3322b0fc2ac43 +c67b0507f136d55a55e546cbdde7df2ee2c753fd30751a04c588f5d1b284061d +040fa1a6c638a883ee528808ca52ea408b64f5b7a3dcdd5ecbf2b7047fcb875c +f4065c7f3274493210f95d0ff8ae468334ac52d448d992fe55f599a4ac628c13 +e107391f4bb847d0be0360dd131fbc3571071a461a338472bdee8319ac09c7bd +10e1e6386f6170c1618c904ad473d198bc183d0fcf2178f65417b8e444527699 +9af4544d78b676646ea6f913a340a52b63d67f235ceec6de28ef5c9cc884d046 +3d25521b323e5d41744e79f67fb3bfb133f51baf0472dfa6d119496ca20ae848 +4d83312f4a5946157a23a1a27e4dab8183a3221d779b90dec1a353317967643f +b83ff4202a78530ea45d4ad2d5ac893614c6a29dd03dd8cd311cf465c9c94583 +30b43475ed344822d1c930ce75a82ef4062045d2302c04bf808f30b4e2ec0f62 +64d766378325b412751ba1fef04d3e3314d31a696d67a945b9927b7c19192e7c +8d8a4c4e80bc8fd4ddfdeed350371f71faa767e79d674121facee54ae20deb0a +e223c1fc9a9cf18f42351c70b31fed403e0aefac335880bb08cc165d3a5f13d7 +b47637ce02ea2770da9450dd542d82f0478bbeb643c87ac21756bf68ce83f188 +0604a972abf8cba46ef2d26b4eb0211c3ab5b10b02bb44209627c85dfd261059 +ace6ab6c387b0b7c8b126471a013fbf74b679789d85d8910af46a2639ae7bc74 +2b9db2471b2b39f976722a2cd847c17fb631be8b000785d75b43e4ce7d90c967 +777d3165ccf0ba78f210fef1b961f9118c0c7d05563eab812e39deaacc21804e +ac78a9ef3095c6339acc5e7d89baeb5ba4c27700245199fefedc48e8266f309c +795eca49482b70f2ca909d7a67bfb68b07289d73799af068ed33ec1616674638 +3d2616db017a30b544b4490d4a573880966460532c7e5edbf5f0a661a9caaf0d +a68b9da0cea5ed546ad2b99b4b88fddadd1e589adf7f7f0421bd12c58fc9d45f +d57b344d019da651d1cbeecf4ea2f922fafadb33843d7ef9cbd0d39fb731ceef +6dd50caeca4d74b4e004bef4c58d6fb32a6c9ec1a6bfd800a557e51f7e693abf +b97f0f3269cd8bda860d842c327ac73d016d292857857053a1beb01739e38b27 +7be0b5f33d35f74d23fe794f87eea0e17f116ac564906daf25bb3f62f90da627 +b14855d1bd8368174276e0f94da0d6d34dc94dc0ffcc498b8a8fb734c94e983d +eb7a308bcbb031d059ce8529b9f6962f52a841948661ecf731de15762d43c248 +5eb454d0fa50eee07dc3fb07de0ff48567594c2d79a078cf2255cc54f8cdc28c +b04d7fef63d774e00cc975708082b898ee969f888f251a44df6549d8320a28d3 +8358a930f19524546519761fb799b46ec73da69ec0efbcae2837851ff0475047 +c42f4d673a694c2a17683205ce96f26c208270742ea9e5b2fd610149625cec91 +7896892aa5e6b24ad1fedad55c41eaf246a6893cf10d649c899c093613a0de59 +0cbcaf80d57a6622bede0caed067cf0cf7f2f46055ee94094270ed6c2317d839 +135986a64951ff0072bab96bae4313d3f8b94f0d442de0c4a20376491c27e25d +bbfaae91da44a1d351f3f82149a3844fd72a7b890c4bb206c63c5dfbee698ac0 +80891bedf80b5fd12cc358886f4ff069ac8108802d4aca7e01306a7db3feb813 +732a19ea7e515527bd30194fa875ecbfde4e52aa7f91f2c02d241353e52a660d +918f39deea2247cde08d761d87161d1e4a6ca6436842ed2316e4cf842bbaf8de +50173f2cf386ccf650c0f9450dd52c5f249f6c926cdc6a5ef4b1fc41ad22f61a +44774513f44d24e6510a6c67dcb41f2a626a65ec68938e3816a78fc4e3689e8a +d26d35c20d28ef72c07f5852fbc59d1463e8deabbe79b21e195d007faf18d7eb +eca2d0fc351976df51248321fef99535a1ff9dd5199a299670325958efaa0215 +7443c1f728376e630699534c08a539d710e973d234b368af4da5023f84abd09e +48ae999de8da1ab33a3d09c4d26eec462c0cd13576edbc967dda992b0570f023 +5de211608f5d241e378cd779f1caa277b67eea8ac4149f834672918d400d3d69 +eb24560de733b7221aee06c16757cfa562b68ee84d68591fd0a574829e769180 +554515a4f670077330a4ac94ff060552ca711a6c6e1e3fb9f6411eb33a66fca4 +795c41ae0162bf9622d1c2de654baad4b3a42ca9080d9087f8bb6e7742ade33e +a18d1d52603e66f6835cc250debb425023ddc86f5a22ef34580d614600fe3328 +a988bfd6d9c5ea6c4531b4bcb8d48fb192ea1e6d98ebe49deb9ed2dfad8a838a +47d156bef889080be0fbe010acda83f26c97251429a5cbe0bcf83b2657131e7e +21049689d9546ed7c6dd4ee7f89a8d5bbe4ae6b7894dce1d322b976f01b08ee7 +4da2e94e58514ee4f1086bf9956048da48ebd13311693cf38c06c5f67096d2c8 +0943315b911d154a573ee6abbf4f9c554e9781ac6885b458b6bfb25cda378621 +40e6b8097bec2eed24372a6e4f6738d72666b6096852d8098d2a7b6e9e4c34db +6c2543eed95a15d72203b30f1cf1df4879ef90c8ff8ff4b34db461d8710e7ee8 +a0e84f78fb3646b4b35221528be485548b6b05ffed4f966e03b204475f62cacc +9020500b73d8c02c4c79ea3f86945ecbd23248e03b23b8a8a6074b940f2a76af +5a9ef16a5594b3af20f4c338a724368ee21ec39b2a4d819b8a62bf1fa6e9393d +a10577bea2b4c924348abbc8d779944bb4f979cc15b6163ff0cdde2b4b878023 +e8815b66f4707803f22258b2d3c69bf5114d2ab9fe17b52ad87cad669c7511fd +f200fd7e03ec53a910d1ab0b9c7703974a83bf3bceaeba3dee2275446ef1635d +a7720e27e8e26b4aca1ae8f672ebbc9dbb786bfc7ce2bcfe3103140312f508d9 +255ba5d752be6a01b80100146ccdf858d7207c6cc8f6b941422a20e4027dcb05 +c2670b14a9a9cbcb7c986bc6d0164538ac738346b7ccd5f3e66a43122a5f4a72 +a65452cb665cfe0a59c22caa058801b21c17cee54b88c83ad9e500e043a33d4c +5075a091ddff6b5eb55d4a62b4e1c49fa597e6a246378ecab51309701311d583 +be0232789e30d3ca736edd74518b3d5a772707465e928a09b4e30cc2d94ab648 +13a03f51529d9905ca4b9441fdca3080da654e858dca7336ef8446d4130e4465 +e3cdd5169a740fb1774a94bafd7e22ca4a77fa7f8bd9d74999861594ca2d39ab +abb36bf015f9ea4d9dd2c5d05250a8e5e97b6557bbbbe0a342f90d0bf94a15c0 +e64daded41a6e46cb2bf93677b84aac559b2f1cbaffbda3e5f8f0b790b5a41ca +b1da760ec4b6496f01761d0fd1a1af9b004dc414b7d563969c11af25b21a3a3a +68d65017bcb01b28486bb74765c790958c67923c63f92874beb33fe5efe4f432 +2773b27897c53213a752fe89658b9315fee852e8f2779f1df1c226bf7954e028 +e2183f1730762c5ade5c260f3d3336c86b9a640ae0566bfdb9da9f904fa78fc5 +a75f5c3b061b1fb247adf306f634a175db2b93060b271a0895b71a1cb16c1aa1 +f032f5ae62cd317cabe1203fcec517cb2157717a5bd4d6d8898e09d510a8ab7f +8301ae71b7c06e1da5bd61758fad93b2043741a12a00d4ddc0c2245187f3ac4c +2afb0f8aed304d20e21e936853bace1405936ab505036fa6b81a27413b77d19f +42a5c646e541da81c1bc127cc4b763b55c3a20cc9ec4d6b75b625b62b4fe3fcf +98714604f89fc67798b83fc027b920900225d1e9b9da44a30f7e0e969004f63b +db29e52e3bc3155266963985ea7121af6f1471f7d9da8619516bbb6c051fefa6 +cf74230edf9508f2ca4599256331e06e14261b842858e9d89ccc061144d061e4 +4e528946c12040f6ddd77097c26336118d2fb58552dfb1ffa69a8c2988ec6aa1 +c0982e4558328916151881403c8f9f014b36983322037b0baebfa54e581b996c +61f0a3305e7a9174d06b7a57936afde1c1fc7eed6db70a6a73aa75b392cb3709 +e7418ae5d89118431a17f5a136c776a87bbf24d575ecc1d85678109288b41a77 +8071b6dc2b9002e1c98db246db17343914fe0ce5e13f99a7131ad24ec176074a +10248bdde88e0e25e1531f9608a28f132b75682c8e6da0dbab5d80d179a91dff +5fcfb53ada1b3ce641e6a3079f63e5217bb8d919c1146648bef2ac40ac22be24 +d6b4f19b913f435f2c282227595f604c17a286faad6b3b8ec5a19dedc5152ef9 +98b92b29e811374c78a35788a544855c452a0f758d7b95232f27f0d9882574b8 +dbb09ce5cddefdc7be1c1798eb6262e7f75b0efe16c453af526b88c1290d290b +5a2a3f18924b3e4089fc3d3c103b0feeef6c1dafd39b37e002f110d02b5cf68f +9a07980b7eaa13ea0a0661d150bbc62823da888678a22d24eba6e0a8f8c522e1 +228d544b075404521bf72c886206c36881e7f429f6fcda161dbf0684341f260d +e222f3b471aac760df407c829458744fb4672245d50e2d67d76506f00220953f +25c50a46c343ccfc760f0b4e981b1b0c0ec6ce8f931ef8a11152ba901b9a0ffa +8eaceb01f8d55bb3092ff0ba52346092f5582cfa1ecd53f95c1738f11d2b6d79 +9dbf75e662a4a75536bd530249a7d4bed1f7d719ac5391676d9998401027dca4 +b9468cc64f381006991f69baa3629a89d50e339171ae21cf9f80a97042626e40 +ce81dea1fef468b2c5901383656bc392ce7398bf4be98ac6af88f47e84773541 +694eee951147b2e72cb3a7228a1eb2b7555d531024cdbfd6ec07bd488c7305fa +d94944c4478f18d7c14b5a4b17076d5ca5b386068f5faf53091fdf48b65d7976 +a1a107e912fcb8f883a61095e81a0776fa5db8a82caad85dff670ec5d7e8f4a3 +747b32ed26e24468d026185578ac176d6f7b0b4c1b126ca8bb955386873922d4 +7002c23fb6240c45ff76e97b48816a42d54693bc9b11e5e4cb9a4227f7997b64 +178911d5eb6829765450a8f7c673ced7452062ec53a185c2baa023cba7d498b8 +df1b37a049802ef7c934061b6f0d24f337855531319ac09260d8f9073550cd93 +4c3f071aa72656a46e1dfdcaab87470244005323a28442d68d95ceb8c0355a77 +f487b10adc518bdf1a2ff7a08a56b434324486d46f2c795c8da23f5eb173340f +5f46999733169e8f073e499e776a235939efcb41d90fdac1f8b205dd9bf53675 +8c778601f16d4393ca35efb30fcf360a698a5777eed0c4cb2f3a489b836bd111 +289cd39349dc5ba88ac609333e08024dba8ac61a8a636bcf13beb334061ab464 +2f5fd731c4e3ebd9e8c7de1f6e3239c7f987de5a57da31647f670f3e35c62e28 +58e2b1d79bb76af1478ebd757f976100bba92dbb7ed6f71efa183ac892db77bf +e4ce78a035569d8657f4f7fa61ab66d142733ef5400e27e8c60526aead47134a +196331b019b3fbd467991ba6b0eb106ab2e0bf57d64639be73b9e164a73303e6 +24317369ff568bd11209c03a527c557ee049c03c2b20d0a2d2acbd10c69dd1bd +6bea577813a23d1a9ddf2554dc1a8d4df87a77492b1e7eee8c350b7409402638 +6ebc5f61cc9153bc111bbede438f8bc6c3d75c7b4285cb940bafc14e10ae5637 +672480a007411669dace72043108e8eefc153d1a78b43e983164bfdc8d446b58 +2b014b13c58135564fe86a5664f4de59232461422e8a37a96759e92f3c63cf0c +8a9d44623ba46e90c076c5bf297eecb0064229baaddc001a7944981c5a9cc737 +bc200d877a34881d58746befae557fb66b886c52646884ab01e94a27c7f0822e +ef886dba38e0c394f7c617f981c622e2c7bf42b0d9331bc069eb821f873cdd2e +b8290d0bd8c5bca655d5c9f7811f6d818c7a2dc742dfca0199985445cfedd978 +7ee8ec584badd6ea174d1a7e316a05037abb9d1c92a4f2ccfa75ccca829e5d1f +cbad662d1edd7114cf6562833675f0296f912ec1f7e63826ea84947e2a684d8b +b22cc51d8e2867fc956d0b4c48a03eaf7872290514f7900a692187be7218209b +dcd2f4079711d738f11f8a77a4e12fe11b07a692a904fd8460108e4e0c0474c4 +47dba553e04115ffd33e00bdd0dd31b800f53d45dbfd185beabd5ee4169ad981 +cde32715f456d25a2f02dc142e60498e8914ecfc3d8ab140e3534c454e8b28c0 +e31318f32ac44b8d51d10a1cee23dc79cf67442b63d282efef4dd7a80c9c8615 +cacdefa7fee50f234685a7eecc24e4566c2069c3e1e7d116c232f63d20c0eded +a3300c762121da8a01e750d0033bf58ec6b068dbd32bcfd77e66e0df79e02846 +1e206c86efc8e7851340cda3d740bf4f8643b900fca9e0536a9b08229ba501e0 +ff7d57db0ad716fa7870451325f831edbdc137b897674128dbf36fba4afceba8 +2d11a352b0035f0280e59b998ace8a8640879609ae06fed481479e6470e622ac +ed16c6bf15479616900b53e4dc33e5fef40736593c9af6e96b489a37aabda032 +d7d52a10deb85a4fdfc4ad7f96fdf550add81f601e5f35f4382ab7c996407b39 +2688d76834c15cc66ec7181a3f37cf653c76ebdcfb6cfa3ac24ec7d34fd2eaaa +28623acc036091025d191e1c9dee7988c58996c3b2677bf02b948b02dd061e9b +3271b09b66b02baf1cf2cc88a35efa2fabb252d9749d1673cb2e479fe2d9cb97 +b33d05d968658fc855b21207f5ed65c5cb87069c3e93b97e8418fc771305542f +12e0cd60f0d7871d8bc688b6dfb765dd72199f9f0303b3e5cd102496fc01bd98 +d964232319f05c0bb620825e78641690d7c78bb8a667fbc8002f68b3155c4a1b +219ab58e0f11260af396698da586fe9ac76dab29a54d7188db555c10c1ebd6fa +8e04b4bee4d702d4933a23327ebdb1e3fa1c13968ca3f5bda7d76b47cfe44328 +fa599802e5277313b378c2289c7e68e4c21af5e51cca732a1c1c09d4b9945e80 +061011662149a596ca0ec671e87e8933d07c56e3d9c3ef7ca2f92b39cb965151 +7551569d64fc77807b195bdc21b999c2cc066bd98d54cd1f7c77004af103b1eb +13d27683fc416756361f51a8147ffd0123ed5055961141f59be0edd996406747 +2e30d95f4bbd1ecbcd2237c95f67518988072fed63be869e85601be9d8f4be55 +a6f3f79db0c5541f4e48ce38c835b4f8788e153f01aed24f8dddfad3486e860d +ca3b92a704b3ff31e02f03a77fbf5f28c3096940e7f50b99450574677046b0d9 +ac2265d2088f9684bb1780c1f5b6a706fb4e55c2a6bd6c0302617ab6220b5972 +becd229ad8046433b12c5c7838a31cc106149f48f9607f939d1fdab8ac166007 +efe4b7cf43c90a9ab2e6c4cb04e6b3a4091e19eda7995dfc144b758cdf2158de +80f4794a136cfda98ef468318855c2f28ecb0f4e1aba00e922d7a0f7b547a6d7 +73069028bbab956cab6bb5da6212ded5cf0113a8ac76bcafa9a6b0c39cfa78f9 +2bdfe01f4d5d3ae393d391ee8cbe99af443b6d2b8941321a6c5daf677a3070e9 +bc658b549f68e7ce4f37950ce5a9019269fcc512e264d73f56f35902781e5937 +390345fb0b57b7cc1272156d100ff7a0213cd4e97a83303cf1367f2c27b9241d +d0c3d29f2db046547170d3d7ed0acaa4337fb52c8e1377b031037c4d95c7503e +bd3b5f3a782f5c2ba7593c8deddf15ca173ae5ccf87ae571ec06b87a48f7c090 +f4b8dbeea939398ef9f2f691e1268a7570425fda1d613dc5b824970e66dadac8 +fa98d078236811627ca1ad217911241f5a8222f762a34fb75b6dfe1c40130538 +80003d161ef04f3863b756fb9339b7fffe04195c1c75436da30d65bf52021fa4 +d44029dd131d378d9cd17eb5303a78483d57f33aa5cf09b3ae1c1c459430bf47 +1763adce7e386c3c794af837aed3af7472f2fc85c84d060528eeea5120c529db +33d4ad1ead95d3d1919c079ca3cdd3a57afd15d05104ab7849059d09f41a8de0 +4c2bf4d3b255f6ee87b562a50509daf19965b2ffe6dec343fed0e353b9dbc361 +a8eb06c78930cac4d7be7ab426424ae9b907e582e68393f84ce33d02a866fa8f +9eb668f892cc7aa439c27c56785028000fc142dce2ac1d5c0721904edb1bf4e5 +5c3efcb0c749f3c69976f210a7a46a5ee2ec6edf5a8894552a754ffee1ce4e7d +ce2bab0903ebd446231bebf3d9d58f5018ab20a3ab648c734278b355160efc7b +a9122970032c464e50d090095403cf6c5dad4cb9b492d5ce3b6d9ed771a4373f +e19edc9b675bab9dae3d2f9cbf51fe8dc91ce866b3351825ce3ebabe4be61fb5 +fa46ee4cd9244adf96ff7291deb24f4dbbffc4b2239d20592b10b929315d1031 +1cf7b39bc8c71b6712d2f9564cb77f2e4598e1991e2376b4a67ff3c07121f5a1 +284e3e4bdc664561339e5fe041da2425f23f8771614f6f97a60f136ca621eb0c +894690c969ece8a9bd519196a99df0c46dbb71b8d57abf89eb0dfe5c54964535 +9e19e205542e6677f52f2f2f40edfe4660efae55347646a2910d59009b0ee545 +00bb1595f021c75f70ccd82b73a39fdcc3265d5f3fe36314a472245803568408 +7993686b749a3d4400065fdd837632ac9d085eb44ba20cc64133c70e62ecac7a +42fb9c8631f4954aa25dd742b63b84b6c341429abff6087bd4ae7b5c2e3e2964 +503b57eb22b4b8c0cb43654eac6272db8700ad1207a185a1811705333be935b9 +0e6fa4ceb8be8129f0d2c0680fc4e08d8f9b613bae95d0f6ea56654e7b7b8d0a +d4f87f58a7de2d8aba35111f572945b51c0966aafeecf96f9a5c61b7b7b99390 +2a2db2a725cb16475157112c053a85fc491157afb5ac61cb6dd76c829f1764f3 +3a563a9a10f64a2de2f038054daf24e77fb43bd10455cd20f06a2c0671a09b48 +4a3a71d88ee7a6febc4b42e312a7a54ba04b504f55c452984a12ca1b214eb4a7 +f2980a6d2d3eae957f51a0c28060290811254a11678856384a0d3877566287df +1e93b6e41085746f3b6a0e6ccb24da139ee32b11e952a67061542ce6169fc2ed +45b490a05dded579598661450a4006fd31907d3fc755d466bf920ddcb235f20c +d1efdfc89256e5268c79bd2886883d1c2b2822957fde6e12f1688eb6e7b69744 +d5c697ba22a5dfd4a7f156d73bf63236d6a66aab39f99fff3688387db2a6a586 +f4c95ea13b21b1f0ed415cc9d61cf20a406a303bd3b3962bca70e691b842bc65 +3af6b41a85e48120e87b4d205a838a3bb0c797b058a6d0ce4b9487ab703e8765 +294332df5ffd950c5435fb4a45aaa3af494411d1542e3473487276ea3c5730ea +df3a42df7570a74ee4b2fba1efd68beb5fc41e3d2dbff3049bdfe65ea6b58993 +b134c7b0aac4cdce573a6d6dfd5509fbef1138aa4264cc7ab6e18df8a2aa4e45 +000fd4f79be1159e7e1621b6bbfaba6bdfd3893104b9779e72f3ab97c7c571c4 +9ad44917f61d3016ff974ea124b9c778227fd99937c6bc3be262c7401ac0ac37 +a16d5224eaaa03a322bf53ea5aefc31319e0af3183d41a69a26cdefd79b5682f +0dcbebcc7fb9ce2850919612cb2222ca846758f05328a73c4b9c7c91107a5937 +cd734d0624f581b63138ba636a0fd36e3fb1fd132dd1246d0a95fe971e6c320d +a72ea199c4bc739e5f19d3e7309afa7fea49005615a62d55db242614ce9f426d +c7122c1c5ab7f693c12795c8cb3ad294b2f16aa900ef911fe581b619f4ba50a2 +b7f52fd47327211ce91b1ea76a31a5b7c27f5da8b2b048b5ed4cd35cee4285b2 +657cc662f3f64656e84873be465e67c314b4fefd6200cdd62f81a539f263b626 +ecc72f6817c292668ac31c240137d194696aca326cdc48ee1bef6d832fdf9cb2 +da703a94e81839e6893be1181d753abc977eb230706397338ea365bef9782a97 +a1872d8fe615bebc8d13ff8677a3846c85bb69a63d5e28fe3e1fe5505edbe0f1 +8030f4daedbba05e10f6298cfda07a262b0701dc2ec5725593aa80e1b90ba0a4 +afcb0c13acf31f33be4c7d77c4e5dddc0bb34c392a6e8f769bfcac925ce3e723 +bd71cf669665bbefcd8ee519b5237f650fe55c2f159c4bdcd12d406ae2122fcc +3e2d1cb36810931dbfb5db0e2f48ac3dd0876aa1812dfbdcd1ef9d78fea1d2a6 +829c453c5cc07dccef5c7d0d34040ce324d5a671d0fdb9e5fa15b667a8a751c2 +9b440e56eb61010a9c584205019caf6cb132b3e4d6c319f10e327d0f5f51ffe2 +036ee627f0a2541adf03504028730bd639ea673955e80dfb93287678d7fe506b +bc713210200382f8525e2509f2bcd96613eb06975552388eb2c893a9f544a05e +78f8c4bf82786b52669637fe8f018183eddd7519a3d5557854bd275a90a73304 +1d52e7739cb199912effe6d7036b17e0269140d66e38655dfb73131c222c79d8 +42ed05bbae4196a6f9861c9963fe906c803e4fd745cc7f81910a8b660dda3198 +819d37481328769761acefb84e1ca95954b8b45e1c31e84c68035827b1f97ad2 +b22279137612f48cbdd780e8eca9a6718d0674e57b874535775b754f1f531c7c +b0aba52aae0058e1b5bc16ea78b637ab4b95c16600df2e4d4e38c112a79b1a13 +3d0d82c93ce1af20ce871d85e4e1e4eecfac7eb84716f543d105f44b6e3b4a9b +cc0a1a2b140c3baad4b644a9e4ed2ad9470d13d7d63a3c13449c86858ed84a13 +b700cba8ea26db9cf634b0d32f238ba4c9edffcca7d1a7f0cc12c92cd4eabc97 +d5a450c61c4f0dcc6147663a050760ba3c61312c531bbc1c9a305c1fd3cd560e +56be02880a6bb20c7744e5501db1aa93548e5cf38073c1564c91b1d01032539b +751597bbd9bbdbff20dabe1cc513e8d709f110535507f51a52313accd1f33d73 +57a897530c47b67dc362ace2557aed1f61b55d2cff0cc757bed8cf5eb95cf264 +9cb98bb2469528ea0527ea25fd8dcb96ea59d12d2137a4f985931a7984641c49 +4de80990312712df23ab5f1013b8021028d89bdd97bff8a0eeb28df7a913599b +027f76b9658cfad5d755380575e69ec88b95e5cebae1ceb486b060c1aae6aa85 +498a93233e906037a8836dd5476713f3bb916f86b6fb34d6332e56a6072ddda6 +ac7c5bcf4965a934f4107991ea3cb350bde9fbe2b4d972b05f8f7357c470a0c5 +2e9c4b4b2b75d0082c4ec1e1b1a161c7e91947b147488474813de5601f1cfec2 +079e487709b8e9cbbcc3b7f7d8514698ab18f6da66b7cd187ef7dce8996e1eee +d15e3d986e02a2dde306aa4d4a96e096f6c08184519dd84d0826a626ee7d271a +d0f49ac2038bafa5ac425d769dbf9342fe0dd0d0512cc3487829d6630843c74d +cfe506aa0795675e169f0d1cc2f923b145c15186306e2dffadff522c3576726b +5a605ddb4eddd643f5880109bfa1d018d8746ab000394de042812e0919538722 +bc50a498bb10cfcda9df2bc7cca26cd8c8c0a9335b864a8ffba06aec55eff24c +486bfad0f99c2d30cd4c34f2ae9784b60c2d8d886a595f3c8e223696d6f61b8a +28c003d6f54de4d45d6bffd5b5de569cffe6baf0675f99206ee483cbefd2d492 +d39575476fe7dfdb9f120b629cde1e60c8ecd96f87fe97629a7a1401fb5b6c42 +b6e399277c238f60ecdca1922d56d740e60976996b26768f35f66f51aa023bfe +7b16387f97a015cea442be74427f576763ec8b9771579411852f67887457d09f +f2b27e0b2208aef64653e1888a3b4d617de18b9fcc2c4dd7ca7c1d4d09c09f70 +38443d41d0117da5027e171c0b217d064c6465efd03ca88272802d2d9e7e4fa5 +dcc3e29fbd735abcc9297606622da0745107b0d3c9804be25d4658b7701119a1 +ac3781e6201803436841f959d446124cd4c3fb992c6b8071d1a8504b900ef664 +3fb08bf2312df42389eda0c6a27be1977fb6b634b09ddede05e0593e2a92a9f0 +f4caca110a3a0301d6890bf26dbd989832d19cd4b5190fbd912adb64f91952e7 +471f9ecfbeb07db1fe9541789fb19fcf07c38e4c6f41b4b9a189410082f6f173 +2db0ad57c42632746066b16b158bad6c7c66c22a5b6094308ad4fad8cbd2db62 +1394078b35d9a92cfdcff26cabc0ef1a395f49b4af7a94060ae31fc817810efe +bf1f670384c6ac5b3db94b3d8badab32c2f38104655e04d02b527604543f05d3 +e2ed81ddee9731713b9a3afdfa21a2ddf18134dbcb1b87ef8399745c28349649 +741cad7adab998b374ce3209b9f63d8b22cb2a71052a2df0ddc68e0203b4bd43 +d0dd29a9990fffcda9cc0a77604d122c6bbf63ff51c595543707c2c1b0880bc3 +729c415debd4947f4658ba6058df71eab33c75702bd7f09f2b4e717e0d11d477 +f58a1c4297b273a02b27929b8553a3cca15b889d87cead3d2ce614d720f9a787 +d251a9f3f8afeda5e8652fb6f4801fe694c2d3f2cc5bc11d992e9fab776b6b9a +b7167094c3df059958cdc35e5232baf36309dc37d02e4e143a31103c37f9b259 +326ad7948cd17931459dd9a92d8f33e6e03287ce24fb5e3d257f27e69794b023 +bc964a7aaa28d9f991526b6697a193c1201bbb264972e3cc7915182fd03c7494 +495842944f7d0f2e5441fcbd2bb90e61df858d00b78398c831398b563f826490 +c1202910018b4441f12929176c3bbb609a7e633d1a9ee31a1350a74896eba24c +0e9d27481395211386c4ced5dcbcf82e07b16d43b8c370b8ab7eae4b066a63bf +5c02087c7bc44da5edcacf2872a1f9877eefb92f8b3ad8d09c8253113e86b3e4 +5de95e5aa816e874be796f7d08399d745e52f37d05d5a8b05b1daf3b9c43697a +175c67ff7960e294b914413ef284800846cd64267e9ff55fc60eecbb15718ab2 +1b98a94cb87b40dceea707abae478f46a9e43d1ea967b5872b4e2f24b02483ef +13a12dcdf63acf0c823f059ef18ffd9614526f81c1fc60897056caec7c80ec63 +50e41d6944c631e6afc9d9a98b6544d763e09a930516edf3037f1eaf77485ea1 +d7c71a48c990aabbd986ff2ac45fa3d2612b6c3d4b98c38b6f395fc98eea1a41 +91af3535256d9431d4ace06118f06a87dc379436fd74b7ba3c48e601d4e67e4b +18d33d45f825336936715ba8dd7edaca75c68a30421bb5fa647cce1842c846ec +c8c725fc5f191d2859e1f6a1db62ac5d56953865d0dedca131873b1109875d8b +eb2235fc73575d1ca1a8bc380ef5cfdbe8d114d1dfe43cc87824ef9f95d0ce70 +399a16d85a5c59f5d09cc78049c4ba133e46654736e23a05fd237c130e9115db +e51a9d9384edbe0a0d0699f836e470d343a58d0d74112c0c404262c86cc6f1f4 +4cdf3b4c41b33970246dca4674aa5509a6e1ac52b89d0ce1267d143463dd5b63 +76647f61fd4eb9d8f7ccaecbe42f76d60b62fe4658c173d65424685f3c0ba348 +878be12a1a20e0b2ae36842a7e8a9abcfa5d1b1bdbde8416c34d9a7ea400d352 +e85db8bd90e425b7aae22fd88df212751bb4d470911d63294516b13dd7db2e73 +5f40e0be6cc6ad173481327ae6dcf766d202aa6bccd5e4ed3ab44965c730b6b6 +b298a9cf3ae4071c4c6ed5431edc1067e877a839b3294b6e4cc904d1ddcac87f +75f517dd8b973001fcb0ac2aa23b6e02202d68ee6154959e1f2800aefd99e0bc +43734a5f9a95845b935d009366f72305f0663ad5ad2e9c0f9d3a858a42912070 +e4ff563eebe225fa6ed237976989c782e4da50410f4080846faada5317de9307 +3010cb45ceb4df6596ebe20566789f517f8703a041962e0b3f5e2f42044a5bbd +9ebddf73a00abcf8e9d004f0eda9138359cffe2453584d5de107ffa7aa95b669 +67b5ba0270ccc6534431d55d945fba9fb6c1ff9f1de882234cbb511fccfb05ca +2989e6a9c09d3c135d93b5d3ce0b4b5a36fcf8e6e0382c79f6c0dab296670608 +3f447200f91f1445e64ce24f10b10be4026f23908c203d2afa4daf39a90cb1b2 +d83b32ea48bb2cb0abd3adf3c6e902fd97558364b51da6ea6d2be2faeb0fb18a +4727bdcf5a9f3969fddc734321356dee29acb950971a1c19ba4da039b501474a +880a020fc3fa5b8ef6a2e6d3f1d6196f59e34788582c3768b7c08ace68d2ff42 +aa64915974aeba237769c87cdaa0b3178cb691c40c3d42b5d918cb8732d7b66c +bf87e972c4f9d792ecb00f446f557d2281342c8b1aecc4943dd276778ab0ce33 +9d03dafc8b4f5ca029cea53c3b9aba6c7a0400182a327c7266c60a86a51cb228 +0d12b6c5ed8cb551f6f57fcbf46bd515b71b83618c72052738951c8d658aa713 +0cbd11d5580d5c8937dcc1eedf400fe69830767b41b0843e414030c6084dc1fc +b00e9a5648d553a3c1fd72b57ad4dd962deed719e9aa4e12d01facc994e4e078 +35f0470547841d88fa7fad4c13cf6cc107d36e0fe4cd99bbcc12b751a3b8cbba +a17c0ebd60dd1108d39784be85f50a694e87620e0873aeb457dc97b687667b90 +ec22c1e34b045712bc42bb212bcc349901aba829bfd0ca5425e66eda138b9948 +24f60b7ef0fe9d01fda32ccbce9bec2a0a8f4f377c1fc6b22d93e812d4e13b97 +779ea9d25be4eaf08d55a83c024fd1dc062d7778d95bf5a745b047a2ba2af99c +2727a58eac8aeea4055f1073b3af31a371ed290e3a72ddab4f563eb9d22443e5 +ac61a36ca4144bdc492aaa82276969908db4cbe7f03f5c354eab637bb911f2d7 +141ea651e94ae92002e293d228da9d2e9ab3a324e7bb971164cc8c408ffec7f7 +cdc761a1ac2f54d50b8463d97cf03866d1b737f75e525ce92c1ab61ede108b08 +1b17cd308ad5e2557010d4252380836817aff29cd3ef4525c147dc1ec7d28f65 +2c6dc08d1ce3309ce2589ec8c505ee64c4d375807682d5d532ec10a52d7b1965 +688c2f23ebe0ead8454e26a83e2c6c5e619dbf4ace662cebb3ee8545ae44afba +15df86c307d4959bce95a18fb836a88d3d9d056a89b8f54a6b4583ae706ff37d +3916eb3faeb35474b4783b5a75c79f9c4b0421ec8e9d2ad8876835baed9615ed +ad8d296fc40f72681712b9a33893c799aee09caa6558c0da551a8ddfc064d5d8 +5c55de924cab48280a1b77a2f4b0d711d7a9d369f16085d56b3397503cbf0714 +e206036e55d099e2a3c9dd07fba59a0d3949934b3da67d767e93e09cc06cd0da +47f45c4d69e7a657d3e919cc0fc92a2ce488096b374a7ccad222a80c123e415b +c0fa5193ea947eef14effd837e94c4274da3a6158fce1549b37e58b59d6b3ad1 +d4c5b38eff8a403e9e160aa7711d17f4d30f0023207c60237d4f090108d07002 +f63e34eb139152279646defaa9737b63ea79f01c09c7c4df259ce172ac35adcc +133e15eea8e8c503853296c34556503d57adf8bb32c2129f7d463b33e708ffb3 +c00fb23d7c258a9503514feb072f8c64128d4b5d80ab6a1728d8b797f656c082 +669a28ac380b0ef95510e97583c2f563c83fc13fd7643dfe7671793e4a2f5b0a +7a8dc8f472da3ebd0abfef1dd2d40de225f1b6ba6d3fe7397cf123a0f4124b17 +bd24fe2c0dd6f52c7b9e76626db03a003a52c78be0dc3fb6ac1e75b66c4f840e +8a13dc6a44e5a92832482c401ed0147a231beb60f62f9b1694525251ce0acd7c +8b4d3ef0472972bee1d06fe598113897e6c9e4fc0d01addaac37b1bd205d459a +33842d95f21e07927b141cf7c8591497d1a7ae5bcc16c9adb8b69b4a9508d156 +fab96326916144591b49d5646e0a04134be875d822f0ec18bdaed15e9c5bf02d +0fb57241e7689c74ea3073fe2b24d388143b1d377a3cb9e2eccb9770b78859e7 +bf4a97ba6c5f37c22691d68cc21a35d791b8f776f3d38a7aecd35e22c62b3bc3 +0daf3f07e1cb7e1ca7d77062ec6c9c208ac39d1db9b796bafee38e2eeb49c4d4 +0b3c0f5204197115737298969778526a5b8856acba77fb6befedbef70a3dbc21 +781ab8caf6027e98e7987d1a31171f9380761b4b9dacb7d8eeda7cf46b35d132 +fd1ddb60ae1b75e9822d96ada79ae73d26bcdf571ea9f6bf4f156f7a5b10097a +01680a26c049a674692b070d4500cbc68b0ef7d0da210765003e99a62466322f +af2d2ebc3e761faf7acee58959019e14e8a2855e921803e7cebe7e5386349dda +47d9e9eb332727629a571136f661882dd09f12e6750f4e2b12ffa1895d2500d1 +e86f956dbe5eeed732d4cb80e5137f46315505d2cacc8a4e6c408f35cf93ec5a +412db01ab295119971ad7e37deb61d522daba8231db0f4d218421025d53432b5 +de268f18dd06458c6e256236788048584e91ed657b7f5466734974431abe4af8 +7e461026bed0ea2263cd14f62616f984b8c7e3f8e73fba51db591a3c8d619d46 +dc520d548ee6a67b77f26c65d5a7b68ce764545aa3dbadca7b414608eb18c65a +e063213d8ac848eda7ef176ab0469bd67cb74d2cf1565ca6ff297efd71e3cf73 +4305abe2ea960bb9eff8545a3a53ac39dc7805f6f83985669ed7e2e9ebf63a92 +3e209d47cf62fcfa6a50eb737528a0b5eec16a216a1066e5dde4b1e6c792b053 +3fadd040b9446197a225c0aeb2b483de1d2586258ee36fd620cf133a4d302234 +c8c30285ab99eea809a5c62af92dd28f0feb90b75ab77db3ad2e3b4e6b9f0c82 +619787b101d88b6e9b8cffea97e4555db78f3aa6cb3c67d72fb7ef9956249266 +ec309c24bb574f6912b1a2a816b93bf88b4323ac5edaa5feb3cf6138a2b448e9 +54a38f3b906079a144027bd5d8e5474e2bd19fd59a07a4b75eea748afd5d08e8 +45e513e9b8a21ce0f230eb0bddd853232a92228bf276c5b8ce2299bc5fe25471 +951bd253b5b0f9edf45c7580040ac124c794798d5c7ddb84700a93a1fcd756a6 +107e92a4c3f2de4d4fea8f146b4d0a64c346e8c7958b1a33239e022547726d3c +8a4c55f6e5df50350b19d545efa1397061f5bd59f88df5640cdb89822c7efac1 +06b58ddd6b365fd8c51b5d03e4057486e0acb6af286af629faab51708dfc7fae +8cd76203a07d429b2abe884abd526dca69f51866fd79bfdf36f65b790d75ef68 +e5b6f9c6c24af1df04e1f3ecb6605f110558255890f39c4d0e42d7dbe383dbf0 +22a544ee891ca358df76a278e1d958ba41d79dd614be3d571f3623c4e39900cf +ebf5e5608fac71ed4f33ba3c59e464c6e0648c90b15f2407fdd8b11f340379c5 +8fd3a7b3983d8432a968fc11053e78a4181edea1f7ba5f757cc8bd7bc061bc98 +614794ef58affb8d00d4aebb08d03cddad9f0c74ab7739f54e81cf4a3a443b11 +90ec075c621e662c8677a1e3a62b7e3b9d1a85eaaddeafef35022e4cfe2269e5 +9d6a395298d25ff0e4369b44997f10073be042ea972a20cb72638d9a512bec07 +3f135956f5cca66891fc01b565d0e5b83043b67c653359af2497b1b479011ef4 +c7188de0438ab7889a8e42053eb4ede923025e84faac75988cc0de5e7300829e +aad507f7e3a4adf52b01e0f9dfdb442499d912ae88bc4780ef8d7e9b2f3a82d0 +ffb4bc8061da725b74ca4533f5ccb7ecf1699e4212a0d2b3eef59a8a7cc72000 +1f7e2f39b55d4169d297f0a383ff3be81b17e331e2a5160fa4c8ea9cbe90fa4e +9f3e323aa95a5485fd2decc4a6f6b167e6bceb45985b73aa65e704de9c78abfd +6a0a3dc7fcc6da1846597cbb9f5e7bc59116a89bd26e4df374aa364a46965b44 +7060061ac899f408e475285270ba2e8cdca39d4c808a0f9174f3c74a2ab2cd1a +f56b20e35b40d943c9b24ef18ca8ffa4193f514caf145712376639a2ee01832d +0418992cac1dfa02e5303b062cef7e18bcbb8e2ea9fee509f8687ded2c3412df +4dddcfde83f8b3770c08cd885ff1284c53dc93167c88f10d85419cc3ef420d3f +480c400216661a2ff0a7ff77e3f6cd15a590f6f120380e5959b19a8cfeb0e940 +6c3c961e6baa8a106c29ab4416bcd10850cc77fc71b3b234ec93f44b50d0593a +1fc0ecb00915715440cac22e000037fb584dcabd14f1957ff8b3d264579cc9ff +5873c130496ef32b8cbf9343cded991b38ec5f6c9f5e49f504516e1b6707394f +651450c56c20931da717707c60ba113845c5341820d5acda094614b4f02998bc +55122e0d925f44bb80331c4a886dc2426eda8818c3c45ccd8ac72d13931adc80 +c988cf8478a36dd202c67980c3e4d03272757167d28b910ac294105df3e966ab +ad10af3e0d58f7debab5196cf48e1d956e8a3a804cf8a09e974663c9c9d93002 +bc394add114661bfd45dcd5ea994f3a7bddff3bebf5548900425d2cb66b30c9d +3d849a6c8efc1603e25a1841b687c1f2f66736135a08647c51478764f09a793e +7d2a907196f595c06bf332a36dbdfdd05f4432be08229bcb2cab514a54c3a8e5 +20dcf14ba340e61f6390cc20e8a4a4b5fe9f76373054aa1dea8e92df9f0f9436 +d19c642452dc978c38644c2dec767c6c6d3b1d3a2f8f09fa5747fb3ac2d89e8e +0693aa822494a8648ac7c601ffac904233e8525ab092a18300b0da561c246c01 +9effc450828ab40cfde5a5f597f8ea26817528bec8b931b87ed325594bd98f57 +4ccfd56b96fceb3cb9be2078f5e56e6452e038a5ad2c3d412f9a84910d9cf4e4 +78859b51566b1d29da0cd301d4ce9a8497d2c9fa53ca2d2e1928213de014b8fb +19758eb4dcd6d00ce818db89f3c69e1a8fda80148a6beeef26da1da3473cd6e1 +7c498ba68ad68afb5219e52b2b0709b7e110adc49ef224a8c4cec33861b423dc +7ccd13f1c44556716f3b95c2ed5028a788ba91280fb3db039cc29d00e3728ac8 +333da4653a2dc0d2ae331d55fb3e00d4a958c2ea0c72f5cb14eb5232803e9385 +2c36bd4945f86ba9305e5bb72793a769390efb9aec1fb3394e8f7e1c41559cd3 +d739ce26756434a1a9350218cf8199cb2278a99f80c2e562f0b2885368739043 +4edfbab1c249f050b4ac3328174aeb182120e7a4f9bc8120c6a01389a8371927 +e4d0fff90a5402bfbb9b64e360a0a64f19261764e9ef02d97a39f87aadfd2695 +c8c9aa146ba54e4457863c1d0451d46612902594e7216ba2d336329344e22051 +9db662cdea34d38f80b264cea3366be0f92f43b2cfec1effcb2f3be47c67bfee +47514b2b6a4ff3e1761a7a9c10e535dd5ddb7a14e5d023708195101666bb2321 +a17384102d81f2692224bd5fa64abc173c913b09801e7450dc9ac31ab643e1a9 +13da35e6b650d97eddf1dabd588de8a9e5144ec087069d7a146f28616e0a032c +c12bdb893618dc40d2cabc993aa28a204c7df2c4f6dc2997b74e5676f4cc0ea9 +3b4b1fa9c6cc1ea0fbbae145587adc1595ce3ed8a61dd8a51ea2a8a37e6e39be +8311270d6cf4d1fc4193156745e52c2e9e3a1c914955d126c39bd870e308f9ef +6d0314d75e78839bd4dc0c77221b656802a7bc59b231e1cd3ea58f8af9be2978 +543500f1f63206e9291875c624007ee6f8624f1331b5bc97bceb9d56e8056105 +e821a90b8e4421fa6953ad043b4a6e32bf1a6549cf2bcf9caec49ff4b56d2f25 +f1f61aeb8f6ffe860a8e1897b92ee7c1a5ec248851dfd6ecdba49c6962c7d992 +5a67ebd8e214c3684084ef7291a822a67df69835a040316f73ca1dea12aa2c41 +a44c76cd931c2cae48ce55ad9a1142d852fc1c9d1212b74c69f1fbb0fd8a1f20 +84d80ee62507c8481061312df1ef6971ac72e96735e20ef72e27fcf42c18a6cb +0cd2e8eb43bd2825d1c51b90cd3c077a14eb25b1119af9819cce579726ecaaef +2346e0d4c40953236cdfd490b15bcbf14e260aef388b95b5239559e609ae9da2 +9d4f260b55b19245d77685a9eab97808adabe28b2827139e7893fffabc3ce833 +da8b4930fc5f71bc8490750277e2ce802ba5a4ef6f3ea8092870af05630fda1e +380f669acf6d4d988570f7386f4d27e71e53007ad8c5182c6d112f609d336639 +cbbe04f0355b8fd0b968b9cd20c0e136f655f5b256483cb876b6c41fb37e979c +1175ac394a6843355c0bc8795bb579f202f9594546f1d79941e5826c85336279 +170df60650c8f5b3a8aa02fc6f84477d52e63237e3aee3980db8c89205b1b976 +f9a04d1273b6af62753d31b6e0d666cfdef297dc51badbaec894551d9b5acf37 +682a0dc270b2f86e51be705a7103e5c05fd0ffe39a53cf4b394f9889f922a20e +b2a47894a321f94b43d0a7e99146d710f26ed026f8fa9eb82c01208e13822dea +b9468abcfbe6df9070ecefd22818e3bac8b3226b9a42d65fe9165b6783785d52 +e27b464218a72b830fdcdffb5cd9e166cb9519589d1530254afbf6475c24840e +b6570f9e15d0e0cf8181ab2d50a0bb1c5abcb31d8fac82bc2479c0a736dd5705 +75339238e97b57bd5c46a3e5373253376d2af9db9e2dbfccdd7dd4e7f79f9f27 +b7450f078f16fd1a81006468cfd16359ea6ea9be78afdd61758ae467620337aa +4da694ec6f94af9382ee240b1978811cb85e7b0c628af7bbef869001abc064c7 +ed5ef1cde8a9507316f71a3bddc076a454ef0b3746ca72868ec0a6d5af3324d2 +6590e0203b40aa18ed29c3ffc182814e303d1aca1ba24347020d4002bf96ccd2 +d414c7994ef93fc6d5ad9e54947a5b444cf8cab87c35691b5a3b9dce1eb48db5 +fef1b999b69ba002e37e59ed7746bdaa02df642e079e7591638db7c55f113455 +667ba3750108b1848b67a0032966cfc54872650efe3895d9998ec34939ef73eb +5dc831d8445226e0e2ea73ab2b865e4aeedee8c3f0f148f494d45ec0510966aa +5edb00673d9ba21f6699864e786ec83d40e48ebdf6be27a16007d9ea102e39ea +355bb1522212788d5281dd6ce4020cab66400db5198649a088f6136cc5835014 +9d26275190994cd80b3dda60cfd8bf064bf043456210d44ad70565502b9ecbed +7c9dfcfd658745eb42cf8df00eac0a3ae4eadace0b7f236f316e12c9bbdb0f64 +a91f854c8c96b5b27e44b21f3ff00e092e434b8c6c5ff642594e0d4e85996130 +b76a0b1a5497361a9a81d1dfe5ddd91b563f7f97d48f11708bf14dd6de8ca5f1 +cf5546b02e8c1d566d32fab589f331c5a8c56f0ebd4baacb853aa8339731cda2 +58f2fe606211e89157f067f243b1f06bfe1485aedce4d3826af37ef18e1532ba +56a66bf1c8bf3ea570bc61ffd320a99395ccc342dd6ec1d2dc63bc809b1a6e09 +15f3bdd14d17ee02ec88f42156d33954af4ce65c1802350be741b219dc490ce5 +eec7d35c60061e3f3adc40f4450568dfaa6cd42eba3424030c04fe44bd4e90fa +fbf328dc5f0db3d32590c71cd0305293ed85bbf7836730d48c260159b6d3838e +b56fc3feaa9089cc8db6cee9efb8df88acf617a5b933787d24e30e693490d8ba +0e4d496edfb393b9180c872d6195e365265d9c2c307a3727e9e7f02e8b08dd3e +62bb7c40c0bdd7502e5d3fa09b5ad6deb5377d025224ac369deb7f9b6eb261f0 +92db883a48d14458d1ba31a9a5494439209feb491658c4b4215e13bc3722f5ed +02e4b189baa653681d1c77d1c1358cc51547e6a93c4b434439b73c3e97530e70 +3b69df3bd0d40f64de9c61a1a533774f3265df261cc4b46315f4e6b1a01fb6e2 +3d96189e237ae529c7f8ddc7059d8573f8727996eff843c7269a7867f7398ad1 +cfb2525345ced8df31915047327b26aac7ebdf8233b99bcbd2194a3f7ffa40fe +5a692aecef3fb07e8964afcf790e27b39192d61cb2a7977f6373c45afe01b19e +d0bac4df505b8b03bf012878888181232737063a7c75346f135e8eeb49404e14 +2f69f61842c06144fd0b3a935dbb51f24e63b7f93745d431331d396dc1392f13 +64fe894b6ce186e8d935f223b47aed372f19f20fccfe1d61fbc1ce9093a73371 +77eda55899b876903db02a5125e203c8ebf30876355251823a05d56ae4b07364 +2cb4237ea70d7f88b7ea756d4d38ce3bf1b08e2c6042b22983a30739bb8cfb87 +49670db89c4d117890bba300c265d29607f5241657b7df19b969690ab6194a64 +123bdc9e0b3a5be61162b2a8f72be354c2cabc4f2db04ea49fda516ae136f355 +3614307994d8c1578333b4b5bfa141e9c3ff24a4495081611364dc7fd9bd1f0d +43ea91054cfaa64cce4a50f17d7f81c44a45ec1dc38f952b26dbd7e5270077c9 +2f7f8a2fb8d77c5df5c40d9af9fe756ab66cb8589fe3360be6216be0d708e133 +4ae0bbe47d942675e5ce3fb349745f1f46c83614a13fba61492966e2cf006696 +0c714bebf03da5c1d7586606e2a74718e1ed31464e5626240fc283e17760104c +6aeee6d164e778657bee656f1c017c7e539de92e31775bb6e26dce292b4de161 +15d2bd3f4ed318b3cc737fc7cb6061ed62ff90de758ae4b6f5beb4c468454865 +de6fe27686579cb15681c4a9f8e204e23e37298974a1c419ba6ff4a645e14796 +7449e2354df4a7707e681e1ee7ae6e733a33a6c4a08ce243a2fa503b6a8922d2 +5769fccc7f058876e73f877bd3b9cbb3b1706d3efa17f607fbcf1079a062c2a2 +a69c97f23670d29b07464a004b0ef1b1511ae32067add366f50e7129cca14a46 +14f8ab4b0a70f2fe775f9592c207c6daae0261d0f30764d307258a461bc0413e +ffef25007e33241864faddc31d66702ccf459794fc1975a72dfa6277787c5d73 +7ca13a92f7135ce1f39fecd92f1fdb1e29187fafc1b071e0b4e1a036cb6a3357 +6ef6f1c5daeb6140c9750c5e39bab1e7c9ed4f7ac4939ae898158cde315ce384 +10686b1031bcddfd41f72589453616d75ab408b91d15082cd6c2499eb04ebb1c +ea9c1c2ad810225b8a95efb876e17cfa1f12779e708ef3300830a7459eaa2f7f +79be3a81fb2dc7add1a4a20d7aa1517da333b0bb6d22fa20bf018dd9a674f6e9 +2f35e82bdcc403bcfddef5a1343fa4e6071138eaff0c7615a301287e789522f1 +a53318055846ac24a77c46bf4cf064a7cba7195d205f59ebfb5b608a83e2e3f3 +856e1cac0b9373b9d07a647fb6b8ffc1d8a1c3ce2f21efbe22eb9ac5977d6e55 +d67c56bc84854cb2517c3484f275ebf424ec5230486ace55bc09008856db456e +988bf4ab5697c09a0c08f6b606fc4ebce976d17d3f453c853a6ce308eb0bb75a +6abec1eb1f529e0c1bbcebf3ddaa44d3f4a6833f91c9e6e828027ec17549e0c1 +1750104c20944ad9e1bb4309ab5b8913fed0eb098c952b0a5876287f71197f4a +e64985ae7e4b4488ebea6aee79a9400cf1bc8dacacbf169daa469e7a66b2bca4 +8ff9c3daa56ce6d0dacb1639f973f6c3ee71af61cb4e14983a38dd5f554832f1 +9b3eeb33eaf90c2488bbdddc8816ee4d4e15b847ff4dcc6799c958365ee9f407 +f35c9f188425e39589fabc3c850b9b921a0dbb6f55b0f49313846e42bc59a25f +62e5a511f74f4199fdd1e1af8a49dd2ba808424363997f02d1cf7b1131f8efe4 +e4878f34cb21faa7dfb3c1dba5914ddb28ef1053831e19124600f6dab03e9eb3 +fac1f6d055d732bd124fbcd79e860005c64241f417b247c25ccfb9e0959c9a7f +f31a0ec8f8c231bc7389269a9f53f6414fc701481fe629e47df3e30b23910f18 +95ce70a080a232a2bea623e18cfddfaed22988399a0f0555b5cd701fe058e309 +421038f6672f0ab579c5ccae51dd82284f325518d4b802c8d91bdf4e95ffd030 +2df0637ecb1cd1d843ea3b450ecfea55fb9496520539bff4462830dfd62cbd1a +ac908dd623aa57425068e3975422cdcd79a4bcd9c452b2c467406cf881ccc1dd +59376157536c2adb055398fb7cba459d6739e2d681d03bd2e854639f89638bb4 +2fa4d75f17b6fb6c0ab3366f6a08dd20592348e207283c8b6f2fb7ed1861c381 +cb7f90b1b1e99c24d93ed9e639444bd4b8a1427588df36e4b2cf4935ba538e25 +8d9c2548708cd211710250411072ce86fe53a98f5735ddfc3bed6734d0126afd +2941bf51e89294cd2a8db5cc8e2d94d926724dc178870d9d1e97d269196c84c1 +cd46bd6870123e62318e6e16488a18fc63cefccb83d7429883aba76e6751cf56 +756454ed6d7507253c9c1b5af0f3146a910ab5d8497a61a7aa45cca7e62d5b50 +e1f1a89150d44d2deb3d0cf66bd720bbfddf5235b43924ec885261ce7024dd64 +5b1f5cc698f6a3a991acf628d3b7b4ae6dfb7251eab4e919dc64878c49fbe7d1 +bbb57d6416ce8746b0ed0971d799b2eb16c6b9efdf6c6514f807a048f6a1a2b1 +de36489f9a5b7107b89d495e6af1f15cae6d341b3f526363c644aa0a405ce8cc +234285b934496ebbc919e55abcc79f3586e4d88d3767a8538dc550839fc201f3 +7019baee1adb974ce48fb8833fdf36ac4091f2dd1e169353bf5cf8ed2c889d4f +e4ab5371d12ccd0ac20d45308bd20c02a56235102967a6761919de8e8976a76d +9ea3a193a77f71e137c67540a8315a0ec988b16ca1f6faa3c22a54efec67e4ad +d0089ef920f1936bb1f694fdea9a6ccc08689f81fd211d2d421d2b9121e1f8e4 +8f9f1d8822859dfb7b864ada6b74c6b1a4f01fcb16c5034de30d912f95148374 +ed9716d112c8816c2e0b8eeb35c8452230aee860a924ca0001ef0a364c399e85 +6db1dbbf71c8931c11a96304cae7401b82e7f439241d52e4aa54547b0f9f68cd +d576a89b781110f1cb965e0bc9008ff7cbbd76e134718fc02cce701721aa79b7 +a24ab16a0e4ef4cd4cbb23554d984d0fc50bd329b6a7ce47814a2318c452c983 +f2c2d741fe99b8e394f990f9e9a827f41bc1f15c448b2f8ec6ea38577a3d24bb +fbbb8763576418e52b553c1c0a9f94456dc641b19565149159c6f1a0474fb1c1 +c3359ff5f7198000b7a88a9852ccb1a45af870a7aba799fb3af750fd4499e7c4 +bbfe18a186b224a5de65b1aab94ebafa1d5f293a9c86d57f5fa00f0570c00825 +8e171ec91caef7220b2eafb68bbdb8bf83648d57cb76df88771ac4f49c3a184d +cdf7f61d5f4af5d5f1bfee97a4a7a1c2821c4c9ebb06821a0de264cb811e0bd0 +e7b236c02db0fd53cb9587627f70bf65efa15d873615e352c08c53edfafcd2e5 +f900311876e75c2fe0054275eace2a55af2a30600f312468a61463633aafcb82 +39114f1c5afe4bf83aa89736412412d52f616e4c673cfd0ff5547c6ad938eefd +2d54a10019dde4519061cd1e5ae0d700ff03c74455961a794d8c1b2e05ae20b3 +81096bc2d941063bdb0361f9f7c764ddaa0f04a1b2d3012b34927048669c7432 +e6b6c3f23ab80e1b31548b69a5fb21e60034f361e68d943ff95ae95a02755e87 +9c333cfd875e0ca3e729e0fb48ae9bd4ca899c04788d59f49c41298fd1df16f2 +d4e83ad1a473ffbb2ea7cef7d983cb03705aa1444a64fec09467cc97db7ccb07 +075fc05c494684977d0ed761d7637488f7676f0d985556871feff0bf69cace35 +74037d523ff24052ed82bc0194f64eec09f04704001a9695e9e9257648716e52 +631ca540cb60f518a070d7ca633732a5765367e6839ac82fb25b6264c8af3269 +b35b4689a2f2903b3cdf2201383eb5b4aa77c92b88a31df43f7f9df1c105f7f8 +0bc2d718f289bc3b0eec45a581ed12fc2a287d1e1e3dce67472df637787f675b +126adfdb0befb249dcac890b9da9df5a62eb33d3d208d1e3223e1f2959981fb3 +6eb5cb39f70cea31d7cd8ea20aff6d2e262efd2b73c89c203d1d38c89618122d +2a939be012c53faebd1d051b971667c25ece09847a3862ecac0ed4492bb19937 +f97ff84bdbb91e675e285812b601a225919f739e7a8a6b863ea206d179cd7e24 +488d5204bcc7d0bb58b408bd863bd8f2d23086d7916bed3e02ec61af30304c5d +e709e1c94f89dfb03da1eb3039ab37d3b298be023cbaf6be30af8d9dcb2e3a82 +3c38936b904bec49c27fc8cfff50bf062292d74104b94bcfb26587984005ab53 +044d67e240c4f435a8c02a3113523f8e5c3543c860ec3f691de7d05847dfc695 +0859b2e7a3a56d2c5cb4420bd1a00e13b291d74e76cbf89cf09843c61011a837 +a5ccc0c095903fde4e295e5352e0c6b7ed51c1064007fd3a3a5353172d5493ab +71e608197215e997fde368717a946f37f151ebbda8c2d2b28045a0bb3a2e0ca7 +9522cbd6e235c2a9b7b537ba14fe96ba5b5e120e7a8735924d848ffc5cfcaa83 +985537b0fe9100abc7332b71b413f5004b7717a1a72604461d41e06eafee640d +3e8935da19c948b35efb8ec78836a8eefaa78c3760f75be80b3cb99b62ebc5b0 +c7f3c8713e65bb9b8cb51c7a7d2abd29b0784e9f06fa1376b8fdd4ec373c748d +e1ee332e28176f4efbb9a06e660bce852ec732d36f8c9d87b71556382f505421 +a870e189cbd175837e573c0095cfbf1c0f3e4905f042b941ba81ecb779ecfe42 +997d20192164434e444fa657929c8a11844ab3c2f0f2be94476d66158f7eae39 +66a75b419dd378b9f0d1a7fd4a47e8b10ea65b4d89db6df07d3665198297f283 +378f482b31ae02f6bb12e00dc1acd4cb6694360a7e25b0d7357df72d51650a4d +111fe1fe00294e29ab679452716746567d8a5770cdead79825604068cb61ea2f +caffd111aa7265ee631f1bac2b60a04982a5c6afce93e22381f578ef6d4077fd +7cbdfde0158efe8584ff287d895c4c58786b1ab0cb1113742c4a0b542800b588 +019b243f4d7aee48db75c540530e4912a217cd3256abefbbaa1fa0962e3db17f +3aa1ed44dba8d13853929da013427525f3a5d837855ab080ce6e7dc0d97d7a56 +151d36be29bd851718c7d3709f3b884346c71739c4c95e94bea60d4aaf053e21 +3a11fae7ba099389f7db4aef9e7659a3d7c5a474ac32fbffc6dc52c3788f531b +cfda11e1d2059dc266c3914c73d6f9a1bd8e8f71b3474057ebbae197e161d946 +c08b7207d30002fa3b3ec2db6c211b40d113911f6407069c0d11c33296d632f5 +5782de99aca7b42eb53eafc82931728083ee2cfaa7dc251b34c7eb0f5a66a16b +47b531120057c188d7e6ca500c12766da1821d12d76a6f7fad4e01ea681b9c90 +119a053bbb9a98f3aadbab3b9ebd88fd1f99451e414c4ffa73f77d371af68762 +aa8d6552fe8964bcff92af081aefa8ca3ee5e976da45d65f54150b8037e434b5 +ac5944a9a056689a0b57b84563290c8cf2527e1cc6de95af25e46f9058a2e84d +43d2a3dd959fb2affbd12ff54382b48753aacd44ff6a7217f76892bf8e8c9611 +aa7590c681cbc31c36842b7c30f22699dcc8f44a4ff5219ea43959187cefe9c7 +ab4df0921cbcf6536c9baa39a0c049cc96c498246c5b686de41edd41a84c2d42 +dc70d6f9046046e782f9436bbde709c64049f79e25f5554bac0720258249f6e9 +f077cbcb479cbaefb8c999449af3f3c5458aeb0876a09f1e03840385c291aa29 +927e4da7b73e711efd3b193ac9cce8c9eb4a09bf200ff7049f20a844684bd8e2 +41ca46914f5046e0fde326425e750b55d6ff639815e1b53b33404b2303859cf5 +b57a3cb24d3f71a152f5e8d3f22ebf7c3f36e36b26df3c34a540083520b1212a +a24f41874e9ae806bf4dcee864cf2c0ceb238bae4f5820f7d6b36b80cbba4f8b +ee8b24453cfffbedbe340460c7f9bdbc28ef576ea4c5e8b22e000d63e7d3ae55 +d0ad476b6d7a7ad4af11a70854c8183f4b96c4708aa39d3842c610609c6fbc87 +681704e9f77bc59efca6b845390f4cd0081adb1655d5b6557f55929509996322 +de2db7cf71af99d2ab6094803d36003b358b6bb49530db6faacefb04b735675d +575cc2906e82a309777502f5eca3de3751423e44aa7dada41a0027f2ae6b1824 +4e15782023301665e405eda37039af4d6e42f43225ca5b1b9ce04027df93640b +43693213e67498808ad095ff89704198143d1c862b068ed6aacf7d08f3d17dc6 +78fcb056896b1c0fbbb8f543e931af3be034d816be76aaad7fd959abe953f454 +0054e21c9b4d6cf3bbb6b9b356a0262e2ad47612cde0fab2c4096c11cacc55e6 +76bb1b862cc78516e1515701dc6899b97e2ecf018753a8efbf0fc86424c6d279 +e83dca6f7fc8671707f94aed0b7982c7d0a3f9a75b96a9d4d599775815e87df7 +b42fef60528529c81f158bf4e764951ba43866952b392fbffb6236673c8345f7 +3c6173e2e67bd36a4108603b154f3bdd5e95e776f42a9bc4d950e7272f1ec31d +4ce6d31934ae2f7b537b11501df7e6b618975f0e9f2a0f0b3ebbab4114fc879c +dbc5335062dd12e1fe34facbf5c8afca8db44dbe3319422a1790ce09e841eb72 +0989df767892b4dbfefc303327f003a059a709a794c1cc2b12cc2ac61e62fee6 +3b32bfa104cc47cbba07e8215f22f0788561e3b18decec58ce902753c2756536 +e4b9eb5746e1ffdb6310c38b333747137cafd742d8c87444ac354d992a06e36e +9e1aabdd2f47f5a86ae67e26a0771f119956a0318318b3c55f321cb384bc2bef +c0ef8a2061b3540dbf0bcb51e54e5adbc5ef8857943b5fcb5b9229c052a52664 +3c2f7b2a0febcbfb06c1428bf99e10b705093e8665a06b6fc76e38a2213888e9 +85fb6e9918435f8985c259391ab6cb6135e042006d69177f0d121a3a1478c713 +2b35a091d4b8b04cd2e519f45d6aefcdce1fc67153db5c5f1dd36ee270232ef3 +9cceaf270434c03d6086f60bac0c3390766822a150a050c1f7c073ae9f147b39 +f5af34e6a8d5e750372e69be6a547627c4ed07b0d9c7c74b543e98ce7a15f623 +dd2cd047536eadf4c2eb5586026d082eccae5c8c9fab8570b16535c2d0e9b57c +580c74b012195f1a155702b80f317232f54c82a30e082c23687ae456950cedfe +b34f8bc3b1603d930a449f74253110e499ad79b7bbf5adc6ec9f044e8cdfc5c3 +7ff0affc6bc8f60768c4d25bac2932f2c16f07c6d097962be867f539d8bc0e38 +98f8909a42b97f7162fbd24fdb3bc5b55544ccd757ef4b96b2c51e83c6c7560a +7666777aa9e231c977ffc3bdf731b0ae5ab5108126eaab93bd335bc6f93f4d66 +cf90dc3dc092130a3cfcf7713bb1c8ca9d5b08f348c822bcff4e96717ed04c06 +b2acd276449c774d2e78619bba4ec4513c521b0fc5b06b489649896cb7eb140a +a70a1a9d6d10680d6bc3d973d472060170f54d5443ff8b6df91f7a6ff639bfcf +83839ba28d83c86fda54ec13858cb296a41e42e99cfb52c2e988b0e02d5c1566 +0fe37d304f19b6cf831981765553b11010f084145cb4100aea9c0616b45f01d0 +21116a1640ab67bf38725fa9a76888ab87febb3f41dcfb51130f1745a2765011 +4357d52f61b43a3452349c7242c72cfd5980cdfd87827c411fe92659c4e8bba2 +9160f004f39d6e83d108686b5cc1889c3709516548418a1b4e9488daeb4ef41e +36fabc86a223e88309c5fd3620cac45665f6748fba2b597f96a44b809be5c6a4 +62de394c7268e9dbb179bba0cfd19d946e4593c24fe6561b88f7cf85fc072c04 +28dab0a6c03da0f92e181f0ee2113a0383276771c7889a27a6db87d138b613aa +1d3622924b4a6b5a7e81aabd410c66e70c3e04b0cbf3888e80a13237ff4039a4 +a8e808d9cb4ca818cbebc05906a1c030267584730bb37dab045d1d6e376f41a9 +59c3c2067200cdba4a702c4994d8a2a5aeccaaa2b583c21ee251ec349f55cf8d +40db3c5624392e24962e63d5141ee920efc405180e59ac0437bda0d8568ee8b3 +c4098df3f929df95bb7bc0edfdf9cb5af7852ca4ebcafcb7e6fcfae83326fb37 +7f0249995ce19d7062878184cd34754ecc1ff150a30929694b99f8659305e0fe +5888bcadfadf2755d327875997024cff098f45f4b56011be5a07f1fb70914610 +2426cb03cde44c34ffd153243b0ebc934b502096b26bd4a174d1dc823977685d +70413f2cb0b641a831fb0508f1c9e16a3b2714183c3c33e799e2aa3bb8a5b3af +50e4c066bac80572bcdace38111981510eafa73ffba260bf5b245d316a120708 +d227040eb20ac1ff3ce86f867ce0e46fab0abcecd3b41eb5a0e484aa7002035b +9e39ccf1db746d1fcf62db699542fd5994fb25202cc91f445485201d8107dfc7 +71dcba01b7420e8449aad7d63a8f724ab7833456933296df08a52c08f7564a93 +f6e746cf6d78bdd0f0311ae5a79ecf9a8d50f8716aff8ab2590d3818ca00ca32 +32a4145520cd462fe7fb273e63eaca1b7c6ca22c2ed0daf029d167a90c699033 +efe652b73eeffabab02a5211b576535d57b9c0d316f50310063fa3c134e000fb +a6c9b09d515056f04df075106cf9fd4e68dfa65a2b5466cccf8fff59e20c07a7 +c6376c537b64755f238453e53f05ff7343d78f1fca0107f94dcfabab3311e869 +8275b557e528c5c6b745fd41d3036ef6559cbcf7b76bf5d2ef2e7310058a9ffd +e870a29f6a9bab43ef6f2c39f497bb5337202206c037291a508b0b544e22d33e +80665f99245f65965a9ffdc81b2d2f60ab83995c25710b27885facd0b5fd8da6 +af279ee72964ccefdb564c72111f55f36ed2af6850df25a0ef97b120e1e8bb59 +41fbcc63da3007538b3855f21eedc38385dd7f82c81ed8b66497379367e207ad +0fda17e3c56470bbe6978d32756d930a8f2c4ec35d6d6521fe192daf84338a16 +a8d7f9ed92e361d2ded1f009c63b93ce72df5c06508df90a9aed91ddf08708ca +6c5a70a7261c7f9a7173b77e60ca8c7c92a24fa6b12524083d10a5e9fa563568 +5d4989ea3cdbc7477ee1ff1f0ceb3ae7acb998ced168c4cab600c88064e73649 +20288d00f245356034f0cf0939311f2262c0d1a6ce6500a60f18b34becdc0ada +c812585e4a8d051274763176413257acacce44813f0dd2669ff033cdf8dab9c1 +a04e5666e44f1347095f6f0d23f8f31a29d14a0854d59fbbc54b4f21a0c9fe25 +c7df2932391ae5f6617b49a5c67437831cfbb0f40d6fd933e6f47012e11e886e +9155e0fc17ff2ae1ced676b54020411edd1f6f8731bfad920df5c57f3c573f59 +c8fe980cf02e37a98a7036c5618a98b5881209335149f950c9d3355d21997e3c +4a87eca1a5df9ccb694f44113347eab59039f5af31a8eb533b2f2a7b0d4b58f9 +667d671f30919822b600c7993a7ff5fdedbacc9eb7054f134320e2cc9fbb536e +9de861dd05cba42715163b0c86ad083a42448233bd54cd7ca8205b55ee0901ab +a145f733e14caa4bc029765a7b4ccf702fcd0fcbbea3da784b2d354214131eb8 +dec85469ec817c1ec2870d0bf5c015001e7203587c18248543bb14a178576959 +3088e9d5a9374fc91206c5c36b5ee31a9dd92d7ce06a1efcaa37072ad7eeb6be +08dde7041b04218ea5ea2b869d3bfca86ce7dd807de726d70e978b276fd39c17 +40a4b963410f0ecf9f17106a8f1e6214dc28cbf65a4c4df8a2585d7813587572 +cbf25504e05acd5eb315db9daf87a7effcb871e7f3b0d22fde025bcea7d1a5a7 +00059148c01115b43ac6a3646410de4c7e6f795ca5f2a5fd94b2bfd157dfb6e7 +70cc7d669c28c35f763167aa61292291a725c0ca68d20fecf23910e774dc561c +25c22a960fc9fc308ca3636cc0c4395346b4c910b8a03558da345437fae46f7c +7a400c67b6c139ff4ca82454f2d944f5094d07c644eed57c0de7bb8ba3698026 +ae43fe5511c554f7c2a44edc8a948d5a003f48e9d871f2b45c2ff833d0716dfd +6b5a710b5d5af9f9bd9824565b8c6352e901fd012cf02da80459eb4dd1714053 +c9af5809ca32fc03216e2ad65c43ac76e3b08026486b2799eb1a5bbe6d761d14 +4116bbfa43ffb410890bd65d3d4f1fbfbe44e8fc9e1077b9354fa06d51b1e15e +e61a694380266fa8da5a8b31ff8ccf14c38e69989459abd40fb45f9c623208e0 +4af88f0a9a495de2663b311167178a7302388505ccfc01c7b9bbfe320694cdbf +ee1c875b4fb95b839286502dfe55c88ebfd75cc568ceaaf3b310b9c9c44c16e9 +53c9b24834501f616547a875ca864dffe9f26ab8285c266035ce0ba522af71fa +edf4bdf3139d2ee8edfe9f2c7e50e6e348fd905d386f3db14697a896125760fd +81a466dce948ff4679c97b2d305f9c4e1b54d23db83e093379330a34f060af3a +f6d0448462b2252c0dcfc9bbd83218efbd81debe672698e87df4a91e33c90390 +53dc12a00ba282854822c76d6fc846782bdfa2f3c5d5f623c2c7d63eb47cb92d +a157348024b821e9b5ce89a387a62ab8c56b21ededf7813e9d8a54c17d154f86 +74e5fa11aa450466c2f0a1c108d1068cef42726543606d4e436efa4d1e43cb2b +a4a6955b8bed047e9b521606598a1998a8701a8edddd5a9228c0e9c15c386b8e +ff1e8fb0860abef2873e9bf9aaa165c4f25567b1a4c48b226ceb0997858c060f +009bbf7a7e4ed17b6859e3303b86f8049b3354b955442f02455cce4f93fd1804 +13814f5270cb452a858d748adbf876362b0e4deb97be30a6b585e4db8db717a3 +59f9de84d8effe8ea7a6e9f089abba7889b08be121347f60d875c94d1facbe18 +89cf18564f757f1d2cb71af7d5154a5ded9f12e0c9a95672d7f7fc1309d650ef +9144e080f3738ebd458975d1408a2cf2f1f74fc41abceb6c453746a616be8d3a +7080f0d48dfe318cffdbcbabf2357d4ebf704e6dd2e7ceab4b8b696c3a84a375 +662f04b054e90f485448e05a8d43152f4336f107ec97a768dc0152295bbfd5b9 +473e313d76eab56e11f47f2cd4e24c1e2b18aed30524850f589385c7f3a3cb7a +832866652ea52f026a24d0ed93dd8b3f91a15d4fe0c3efd1bc86def12344052b +e469c0df697544eeb078fcc5ba01810c05b7a948c4a7a70807511bdd8d0063ee +224b5850db7560526225dffddb98b881083aea728c6d539f7e9f85bb57574aba +9b488f42f8d7434f0cf59d578512137503403d524d7fa94f8f4e0d016c4e9285 +bd64487ebd8bfaebcc5c5618b1f4ebf626a3dfd880900ace953dad02d4b73074 +c019e45a53c2879a7ee55119a1c64f028a5d565843234d16b7bac29a8a538ea9 +2322335e2ca18d1a61fad658f5eef3ccb9eab02d45bafb2ab3ad420954b4dc2b +ee6ec8abc1544c122dbadc9b7606f9f58cf17532afa4cdec5085a3e942ced248 +3169b72a6545f16cecf771687eb7c3e2aad170b3c0580c50434c900e084c92d6 +ed9b71dcda9bf079002c5db8481e964a6a05ed13ab34cf22f4c5ba21cc378137 +82b1a8dd547aeaa867c84d71c136c8d9483d98e312b55acf89d629a8d540e82e +cd932a93b6e6bece7e401a3d6fc00d92f7f4112525b79d02fd9ae4334beff6ed +acc0d450a44e33a849cb2de33b7ee9495f49c63492a0cbd14cad0953aa1b2171 +010f1ec16aff09fd28aab3930cfc448c660412450059d613e58cb82161248e5c +b4e60f564b3b2395deeafd86bc387f19901fada679cf6bd55ff6f229b8a55c19 +59c0638616e759aa0b28b149f16c89fc44e7b34c52f9249c4d73eed427da28f5 +27f1845d7f699f290f8867850e592392404450150d1b8742621a696ba91c6720 +88e64ab1cbe1bbde60c4361dd76358c98bbcb4437f2b918b6181ec2b6bd1d914 +a275a108e3012ecc7b0589b06818456360521d29c550ca17ea369b190a128f61 +cbe0ce2247cb30b2d0049155cec3effd7afefd64efa539797f71b38899229789 +f9faa68ef1ec1ba518679ed074892c728ef01b4ff4d655e87c16100f89d5364c +cbc4216b6d5226e87db718403ad9369c20d65939b1c4dd1c986ee9b9862d326d +60f9ff364f346e24336f9781aff411f9cd52135bf7a622c5e51495f4d5892382 +e0f8f084cfd573ed3e6999e34ca34c2c535a39e0d577b218fc4077a3e22d39db +55289c90d57c19de38dcd43b789300a80254146a8d9e0d1e0fa8f2970d475327 +9253b1a4c04c983258e8f5fd5a8294cbf8c604a7aa01468b126a2cb3e67ce24f +6b71fa8405e4385d113b3b3751cd2c5ad6e978f2b7b3063cadb2436488d7af54 +4f2fff53b818dccd16c6adfb1dc9e8c2dfee21e051ec9b9b3eb7d43b8df4345e +18a162d76e1d06f308888eb750937a91f14f5768dd596f42498bbf682f5c64ba +9d39d227ba229148a5f9cee1302e22b6132fc04fb6cf353fee84b26d39a154ca +266135a6c9e14730726d1c01de783eb18128b49d66782237a2921c9481271299 +e4ce244f9937087c76f59c4cebd67fbb5b9fe1b98174a78f584989ec64d9a0c9 +3470bc57e1e7051e3f5d3a328fc2a802258cdf3049d08333b9fac938211c4a6d +c7794ff42969ce3cc2af8c41927e2d9a84f1f3f45dcabd48d187d39b5424f1e6 +35b1cf1f8f446a283d511127276d4bd9dc80de564dfec7b8e3e4e92050151c53 +1036dbcb410e3678754f5d60a45369bdedc194caaaa8c6a1fb4955afc8458b74 +4aafb815b03dd8176c3894793250b6c479dd8de818edcf1f632a7f4f802d9414 +f6def59098d7d4d34b9963249d8ed3d6cef92e2690a182ded938eb9c372cc108 +4ecd87c3c7d8d449989eee85a136d71a35724089ae4c027db2e3001fbe6e059d +d4fa0cef3e9c1f342e074fee9dfd56db9689191f8b67d6a4f2496815610cc53e +06a95f97f660dd634457d5f6bee8e057c9651b98f2aa6e6200c4585f97aac972 +00126eaed118c1acbe5e307e5e303ca628ec1df085afa5ada14b4f754a69ca6f +89691bafaf55bae34bebbd1e5db7771ad3267a629e2bbe6bd7cbb3fef0def429 +32599fd1459c854dfb252905dfc88ebf9900cca13b9123a94005bcc21dc356ff +7b6631e143e61ac20be9b656a05929df834875dd120cad212ee7335a2f5c119c +657e402f72eaa8e51c64a8a584215c32831ad4da0dbef6be76e78621ddb48bc7 +d9c24fa6d4ee8d0a118148a30718620d1cf0c4436ae0e70a7cdf585a633feba7 +b81916e2530a344824d1443de17efd0fa32bb70aab38b7e90c825b738a8636bd +126c85ab65f4d9ba9ab89cf68181946c826840b27827154ccc3bc54773f40ad4 +083519503843079689d59da80996bbc2c3a64edc539481314bbd245758f02ad6 +07df02b5159794cf4b6c5c847eb391675cafb24a1ad20dc0caf807d967418323 +d50587d3ca015d23e22a398739483c9f986b8850394fe200b0e258ce48d163ac +c4ca4a84bc7151bf6f6d9a46657d4ff930db91dc80848caf804436ae066315ac +f81147f5a1088e8964b701d1b8f4ccf081f4e8dfe79a165c210a8113ccac6abe +adc7d2a94ac28a58a3a3cac61305ed6d9c3823e71e2803a1215b90835d6deb44 +4ffb1e5f9f9c101b709a8f7d8f5851a1dc0421e0bfbeadd36e0b12aef098a895 +3a5212b7cb9b769e82139bc3a9f8af9525ba4ecb8db6c6bf3b187e0427501d32 +54893ce5eb303d2de521aa5e32f270ec843c842a5f4a6abead467137e624075e +5ddebabb3fcbd93718c12b14e07c0cda4784c9ba5149ff949d5ab2255000dd54 +8f769d5bb6eb77252650e58b0c0cf6f4f2c363f65c65c22f29bd1aaa74d77104 +28c6beba5892631306fbea6b58c90e3217f09789d5236591e2d8ba0152dc3c6c +e3f2655b546feed19aa1be02c0f19ea2e3be28ebc1eedb3989c6d3c84f699d4a +f58df8483ac7e4f608e934429aad79d473ca2eb607cbc5a7d46253188c3a0440 +00ac1b9e189c16911ac4fc1f9ec8184817615f990a13ab807a2a12065a3e6fb8 +b39d4ba54711928a9e05243878b37ea0dc0f5921715d3a8fff8112419fe179b1 +b5bb93abae7ff9fde56c1fe48a08a71d3db56936f7c34207edb4515410d3069a +db333e889f5405c95b8df15e99e043d1ceb8f73de634e1c4cc35eb68c6d1596c +5387e8467677fe8a99c7a13a39551e3d5150e3313d2e178204e634992e3b8713 +94973cbe6b76fba8ab9c5fef5adef3ca3741025a7c5ed28cf166597956306ae4 +0bddef2e993d60a0855baa48ca3c3cbe5a244c9f920f43c9e794f66d50fed245 +886b795eaa7e1745ec4c2217ba093b186f989dc3cda9cae26dd7d5664871aa97 +f3c72c9b2f4f95a2a864d9a8ba11ed83e11a494009165847c17e5aba9ecd6198 +a8963cbf763c2c41c619b0642a0454208ca0ccef24bbb7039d8a117843bea1a0 +13af7d3307718f6f29c78df44e1494baa6db40d6a67b00a5c854dee676f065fd +29c9225528285d00a4c2b1aa2c3690da9e56cc89eba47af228caebae88379b11 +b6c9e738f194c49fb366e92854cfeca853438baea2bf36cf69c0a4ff4f6607ea +698eb2c19373edd61129b1539db7ad5838e25cf9fb36826788e4733f97a0fa4f +ad8c2114d9fd464f3eb4f8d33154541c1f622b0a6ef1c9a3a3f7a36e0dffb5e8 +825cae7cd5e69e237af1008ca19f33927e8d94c841f724e15d9953045fc71b0b +dac82f9c51ad8413a6ca8bc569000876d7b90e1d9d0d83ce490da944107942fb +843e48eca1e5062a2421523005f08a8300e5b0330771383c2038ba9da709d197 +5bed5a44112a26cef0301a72f44ea8d97ee2aad506e62123238916b6b1e1d606 +bcf72085bb61c8ddde0981d6399a851dd16582cd712453b1fab6de26cc855bdc +0bcfb7613e829c9c002c3257e0eded88fe4bdd8c8a4965e9e3f084e3ac255df5 +3c121388b7f5a1a49bf24dd0267f0a2c8bb9ed56197ff8049794de9499b8bba8 +7447a30277a87ea015c10ce231c82819032056fdde71d6c17222af7803a9d588 +a2978b39db89f7efeba6dfd3dfb2dd050a9dd8cd226a4227c56000f84207a29e +26bc1d0b1b78b96bc7d4add6210e3a418d97c295f940f287ce1934b05d482d87 +8f03f3ce6b5821ec933cf9347572f47a659fe02cc57b12bcd2638af67116c95b +241b6abbf2823661ce236ecf0d5eaec63c61616ee7b3c7d15cdfe46ad6bceb28 +a77ac97ee491ad9a7ba5f857a458b4ca2acccd515ad65f7416aecaab26ea8de2 +96560fcab6137aa7bd979cc508f0408edbc8dd30ab7cc671c12b148947be1ce2 +fff9b571c5f5afa87bc741b51ad0ae2d57fed5a8120811430dfa413e04cbdf4e +29adce5b0363fd5e32ac268fd6d3022b67c7b83040c68db14b2a3f15399b1ede +02ed548536639c618ab94c2013e469af35b9231ace48dec45af2ae00b54b8404 +93d2bd32ef9d6358208e44ff969a441797cf9db65adedffb43ac16158037b1d4 +6919a4ca18069444a3db40f95ff766a7e7fc8b0c72f8fb60c82722d78b0166ee +8595082faf27ffc8dfbcd40bd382a459af539e559c652bebe3ece9a998c03f32 +1889464a5aadddaecf7da7dcc4ef3b9c702738864a5361143aebdeb5c9beb39b +b65006520f10a4641b9a65601141eebee182a17e896347ee04811d9d27d58d0a +2f733ca0cb4e9b663399adcbcc6da6d8c92b2f14a26112f96e88f3d295f62f75 +b3faca9b1c6d93833edd01ace8f3e6bcd6e9710a79ea5c06d824875329590de0 +68500bd12b802716f1b40ea257ce067bf552d876eabfa8e7ad41d7ae656fb18e +c1d6decc5bfa82e8d0ba0883ee9035fca1d8f282821b8de99904573faa0359a5 +b60e0aa04a6694f2c2f3613d5aa1adab798a53d204866afd5ec47721a0f76695 +de3d94238b2ca694aa0d27db1db35b208d5b7faf9e6184b43860aa57b43f0dc6 +16f8ebb619ac34359bf44f69c0a9d2deb3a36dcf57aa3b4387d3c5193ddab9b6 +4f7e029369df4a117367f77c2345f7ad4689e137bf49924840810b912b655bdc +0c8dc54aeda21d1b7621cecd2cf16512e46ecf57af3239cac703afe70d7ff9a3 +27cd55313b58d5d113a590ebffeb74676b2b04d94c2e9cc7eb365b494d25f3f7 +59d21ff968c523505e4d19e960df014cfc4bb587ed5bdc8e648a0c05762bf9e5 +399150bdd4e9a31fa8abf791ed44ae29559d7f7710952cc790cb528667e7d917 +795b14785aff286774e785c30b5846b44ef9e135c4595e5cf942bc5672633c0e +d34afe4fbdabfb720f523d3637c192e06279a37ca2afcb3dd9985e749e7d3e61 +690859f43cf770e8804f1083fd344cbfe727607590dcbe71325a66db1a505aac +1d6b99da50942bf9d1eab97a3d1496669a987584dded9c38d76a6b1348a98a29 +ab65e9e03c29a8cf9cf3c9eabeb2db2639032efc61f70b827378767828259de5 +99677b8563cc69434e5cfb497f00405132fd4f20f68896b04e9f2f6ac5d10b83 +20cd1dddbed5de096489303f0e0886de03a3687104a6942d434a101a37fe93bb +1d67999f7ec75924b0cc31573f43305c7546fbf4ee1b6c215425795d1f20b29f +09bcfe3d3ecfdac6fb7da72d94a2653b5eff82583d3f28cfb109a29df854de44 +561514eefdb6cb522a0bc306c224697ceef24b1f2e00bccf12d63d975890cf5c +be5cda4690f216b60a4449ee05fc435d57b51d43f0b93cc667d6096b151d6a6f +c4533e5b914246412fa8b801417a1abe874ecf22e1890b2e6608874eb88dc724 +b3d5bcecb90b67799cd762bb3404fdf69713aab3bd1976d6a8d93e0fd2bd893d +de4fb81ea7e9f4ccbbd10dcdc52245b9fd7c11f40a989f20ff4f186b24ae951d +f447cc5fdf2a154c4281c94901bc462ea85e250a1d047f4f88b4a06b6778ec62 +ff47148f9c415c690503976bfe799415ba4ec8ea51e1de1cb3a51c3e175c3a27 +c22e043b25028f2e13e0ef11adf3fca959c07e8e2ee8209a0a9c78fdb76fe8e5 +b607fff710aecdcb090884080c3a31763d12aa62e5c5c363cbf0e1d7e40c9881 +7f6fc5ce377e6197b149b53a57a85caec6b22a7f87637b7d574ec50c30fa2ad0 +4d3d1b49a3e3567605f07496927fedfbd6a40a0a986fccace286bcff6354801f +54bd71f3f6b0565e2887350b02a3d5d82886002a6461e146ba060a4fa1a3e6db +5d98781e9eaa3ca57f81365947078baaa9aec5fa72ef21895c05011b7c6695e0 +4122aa5d53c15b0bb6d98b42a556ffd58381b241e9d8fb0c9c4d23d66352749f +d7753ac5762288c950e930a18b7a545710fad4cc27c2dcf739193a36107e323a +f26608ad228315d2fd15c5e800767ddb8eb6f334db1e3a0bba69ba14f02a82a9 +8720c365e64f5d0341740ac49d1937ffa29915ad480c313eaa8be5bcdc6458e2 +a3796c9ae721764d0104079c1fdf426e0498d29267b5df6b750f3da465d9504b +9b2eaf6b2f2c6abfb3f14d962c87370d261cbe7419c6d403286aa93ae2ae0022 +4ac1e130dcc4ab89ba606b733e2ff57682ce8fdcf4c449adafd2b2b10b959dc4 +b7d7a168c4fe7b68f8822271d557cc11d5e27fdea872a991240fde1a5ccbd2bd +f2c20abd4a5495c4c67b8b05953a015e10e2552ed4d19af91980df8a26b4d007 +52c00e0116dc828b0d4785aaaa79dcb838ba14859a9ac68932d482d015706c23 +4348f20489b2883b31a180c3523e8f2f40205696f53123c25eac2ce31659e77e +cc9f85dfd2a6d9bbcf59777439be2e98ed4e07b504534ab7f85e83e27ec62572 +3a48accdf148a002c9fe0c062ef329b107d2b2276280c471b96152f416b52e5e +0efc60b4aac96b3d5fa8c7ab308768f51d3ff2f296a327ce4d329573b13377ce +071b29970c97171d8c0fe265761be45828afc755750edc65b66aed2f521a6752 +907e4b30927194b1a23fa7f3d924524956a949d9fba626f40b2f0e13b8bd6fa3 +622629d8dd0b1a29025bfc03b8d5f3b4fbe8809f49569d3bcb812f7a6bf35ec4 +6afab508108dc6525f1cfe3b77d99242c30f4a420980facab613a7cbcb184e18 +38c3ff8fe1c48a60695ebc9fec3488fecac30e55efb191c59c9351dfe4dd78e3 +dde3e19c2aa81d740839ca5a450e34d26ac185477ad433be3899a59eab4c37bb +da843d2f9e0760f16e2e62a789f85ddb1992523d76f081f65dd073991db5bccc +e06f48aa41864505105700dac019fde97238d4b84743627e9ebe7b941606b585 +8fcbad4b75b7a77754782dfcd6b8c20df1172d73f5896dd98bad5c9c751e0096 +984ec6916af559669decd3fa24113fad906242ea04595d827450de02ed86792e +e7d30754aed1ddccecc7f21055df93f3195dc1d03f184bf846cc28dd004fa91f +b1a5756f90801aecc55ebadf8d35b27474eb47cdf698949606b09fbe9b671081 +35125d39a54e2aaeb716a1c9969f5bad3735a5fa419b9feeaf5abe7ce44f77a5 +2c7de80b97643b0f4b54ba27230df481010ceb704a6b2e2688752aee5a5d5d48 +fd9e9565ae124a3be78f14f98f5f3672b828230bd25c384c23b7760a8bb35376 +b6deb780eaefaf123f0b1136096ef2a25ac5a3e1838124c5f502bdfcb8779caa +0ee0601e9cb9b894d72e7c256158f04c090d8cab6b142e6901c430a2e5e4795f +857f81dfd70196744709354ed5f76adc33889f8089467e8bd573fa4a87c3cc54 +9f2b936ade4d28c214faa338990c9267a063c5d3650775a57f46da763c25dc95 +2956f557bb79a57fef1a66e0782f7a98da2e1e7c74b1aab12fec3f4ac7972b34 +c8a54478874d98e50f9cd3cf209b561a93204aa5199bb0d85d2e64513633ebc5 +f356be056a201dd1bd4290ca01f813b8c591a61cbc1920628d26b8b0ef8fb1e9 +839bac6a929ad574019e21d7f221a4912d47bc469a6212084f32b3785fdf0359 +0cdbc6695cf60a32f98be5b6e5a782cdfaecca4db8ab4815003d67e83acce9bf +7140291c8836d9aa2d082e2239d13d985bd020ac72119bd67d384048e8d9bccd +8407472a2befa6321a5e0600bcb895a1bb270398b6de2b76dc94b6ce8c5ff6e3 +91e111d66a2e63d45a1f8a45b597b4824d4ff9591361327585e4a31d70716693 +71d44d4db8954ecdd2056b5096698e240c7d65f67f66b8f3460bf0d7b1caaf06 +20d376d4410d27e1cb3321a49e3d2f4d6f6f8da82b8a01fe0f08c38582bdd752 +e87d8868c2f40fef3d7bbf57c2c0385349f0f8851ed0bd6393333a7bb4ab2af9 +8f18bfe3e43f7ffef80b12829a2381d4088155b26e803994c71c0f8d8c874098 +4cbe27d400676103fdd3053ba0af5324b54e2cdd655a5c17ddc90f5bf595cb80 +58ff16f57d67e272d0a85ca78581c00b470e55b04c8d791c8083b3b90c62504e +b407edd8186394a02c1767cb1f403e9df550d2d4b657d8aaa664418d5bc7f1a1 +aca85b4376f61d983818a170c1b0d6c5317fb58a8ba72a8e88cc72a7be343157 +1dfbbf0a8bc0411d363bd5f2f95933778069b11f6ea60a4c3feac544c23473ba +3d78e27767a895ed85da98e274aeb8efae30483ebc65a0508f3ce4c1a4a814fb +6faab172e64c94c8e41f5018d6de74e5da1ddb5ac6e1f2dafa41b386a4ad9893 +b4a563f0b7aff479a5c4c498d7df668cba2d55c2d28ae5a9e66158d5f3f82873 +0250cc0d83d3b87f278fca14729aeca839e2a5356fef875998672436d23329dd +20fcf382440dc94f6700a867928808ceb8af11cf6ce11696cf1475cd22353e5e +ec4818a208530d7cf5b5322a314c0886ec9d4331763ee764b6a391da210288b5 +f30c6e6f12e2e43ca8cdbf33c3ab0ec384f00ff8a81c89e89405fc5ccfa8172b +9caccf50349f7b0713cb5902b4cc7ab92449cf0bb0bf056838bc9bfa5515015d +58cd99112c4035e73bb894ea80b79569ba251e4fa5b223db055d63efa40818ea +ea935b7434b75e66ede23ac28049e15950ece4aed616f62d19d50ed3bc188569 +3996a90db4951a649d54449772861286dda225ac8e542a28d5d42d7c3ef1ef11 +24b22ba7c153434ae9dda98449bfb99eefaa56b876b867ad0840a03c95c20c16 +0943a09e202a12c9a59f211c9b09a29b970ded1eefc11f063773ff2b3402dc97 +0ecce8ddb4d6167024aaaff0725ed58e8439e22461d0c0841f88d4400f2443d2 +27f76fe9b694540ec774a1cdff315955ff57ecc5c2a610c308ed8052dada651e +5a5ea76bab97196de05052ce0ef23ebcaa516ea14c4e82c4dc3c13619cb2603c +5c03faa53fd54b08c205a4c4594e870d714bf0b8ced8653b227ae19e3ab369cc +60f5b3c0502db72914aaef1c189339debc7338fc50868fc71f2289390ed9b61d +29a1fe72656eab3d52ba55060ff00b5d9406cc9950eb798273be95c10cfb5da7 +3ca237a6639a6057eb0f1e9eedc5ed6a2eb74bf815bf5512b3afd9481e1c93e1 +ce7449384f2c6cdda90ad4c8626e71cdc8642c66c7ccabd3491b4132ff1647d2 +ced54297de972375f44734d0a58cb75bfdf1c06a4d6f2b40e02ac888785491c4 +92b20c09fe8d08c697b8ffcbb528a5744a566c4ea9972cedaf55e0d1fa8a03b3 +88a08b5db90f0de0ff69da38f05db15c2f1a6677efd21724f098c0c69f63f749 +1e663297016e2fb02742aa875dd04591e43bf2df066fe195f5db9c36b1803de3 +2de791f7c2e76b026414110b4840b05c28b45635b9deaf8636ddae7edfd14eec +f010cd7c7bf069a018b91063fff75a352ea985a60d57fb1e75fe9569dc685b3f +5011a1242a4a41f4410f52010b0fe507d700dcce125d70a93de3883f194a2836 +e498d144a528276ea527acf770c1c076bbce28638c94727732bcf8e5858fd4ef +275a61cd83f57463a1aca51493b2edcdc7d50a8fc5c9a1174c20f7849549c48a +bb850e6300c32eba42ffa1c80e54f0d0ef88b812945b30e62015311ccd88e697 +9860e1e52a17787b56f6183330f3756853c14ca66bdd2974707b5175d96fe5bf +9841c8add965c168600781e85aee0075d7c19129576c0fbe4f0f38836a4e6f3c +5dfcc6ffe93e8077827ff85bb7701b39e3f3313b0a870012627d1af43dbadfdc +3e0625b8dcac245c92db4f60f45db2766692ddeeb907e223f42b4f4064290349 +f6cb4e641092206689e0a2d0818a30f66a227aae0d356e81b7dfcf5f76cb3acf +33e241868da1512c38e086528baa27af236e2a062c42f34155ade29567e96dc4 +e78ecd60b3ab039756e95b96ba1eddc76c4e95cac93a09314eb2eebccbfb01dd +a314864d78ec4d56518b8ca99b4dd477bd94bae56038948fe5174ee4f29bfa00 +6167e3436080b26ece6ed91356f3469303c8c7d828c15331be1f71e1714b1e1e +16ce8efbdc57c4d0c6d8a3e8d5e730b85d56c4914e17fe7d3d50227f68796b2a +c955a7a0d13eb22f8cc98dc015cf739dc99b46d002cccd46c565ab15b1b80acf +1440e1790106f5145ed04193d56f7f000d2d95e5ac7e981f64b3a7de01480056 +09aff911337c775115df4b6464ddccd39da330d80668ed5f81a5e74f87d4f8e2 +7ffe11be316a9e2c9a6183aa1686056e0539fef2e32d52023c66cc96e405c1ab +b2d1f15c37465fd7f77c17d1eec4d8b80f41ecbdbaba7d5889dc656a169a74d4 +21efb4b1d9e5b54f18d4c1c5c3032deae5544931b38f721458e1befe66ff06db +9690b372b495a6bda63ed78f99ca2b968a3d3f202997ba5644a3e9828a270ade +6b771f66b55425fe0e4913b8d7421c3aec405761c6fd20098521a48ece042560 +5514c61dae3129e5010cfe6d77c685e762c3ce18499460d666db09b1f719b081 +05f9dec8550e7c64524b735c1f78dfa6bbb13da7050d6143b1426909110aedbe +98a1f62f127904d735dd3fd7153172f3fee2e7146e1abb57c85bed73c248e687 +0d26b3f00ff3228c2664068abb7890db02777e43e8c4976ab3e036ba10cb3a4d +61cf8cf574e0e22540aa63e050a43e4452e06f3375f0b47b1bc18de52b368b7d +54229ca3c8f1d530033e9d48752d0afe1c668ca85bedc0192bfe60edd71f7b69 +665c2bf248184acded2a0213c09fcb0b6453d8a03a03d0f23140d2973707a78d +6cb4da8a35fef328ddfc2673e3963557f37aba0aa8c6709da096a291ca93cfc2 +47c7b3c9791cf7377c44c88f1a4f7ae0313d4708bc24a445f6daeb0a4e71fe37 +f50cbd0ac1693abb36ee55ebd3d4ca6ea6749a4d07a51aa1da96700c09729c07 +8421820cd564075ad2761f9274a60c851a78e6954d0db10d7818f79de66648f0 +14dcbf03d18ef59c15368112f0a85172ebb772b09d04331beb4f282ee980b905 +d3fb675b668ad2c6761f85fc346d567c66511485a1b6ca9d67dfec549e42afd0 +48f9eb67fa8fe5a2850e3ee6d9a65c1480dde56cb1e43c29325a089842948553 +73249a640ccf46da2770b608ac163e33593992ef1516745436c03eed5a2431a2 +4fb3d3f40c5073b4cf17c23101bc67f735957f0862ad9c0849e233a5f55965fa +58f00a1e0fcdc0851acf12f2fc0275ca6683db286936ae0d64aedc56912e6e92 +58be612105949f517d1738afa5f2b31d9e09cd2fbd08c06b3a5ce642670ef21a +6e21bfad02605aa3aff81105f94b637722a625da8e883fa235413e7853e134a9 +c8b057bf110ca54c480bedd7621172cd1748fe081657832e069182674b1752dd +0af0d344d32b48be98a42335f094f4c83d538277f187579839511e6f99d5aa20 +da9d0c7ba26870d2cc243867b38a7249fec6261b176e52145a393219b52b145a +9dc9bd1bab689792e3edb463c90b3641f824d56ebf6d29ebf3539bb539d7cfdb +610ca066dcd12768f77c116d74e40b2e7e0cb71dbf7b960ba0dc87c88329193e +8fd94990713162c2261cfe95b12159be79160178ac0b4258dabc1700540a88bb +d28f806a6d061fcf84c7ebb8351a8549fa031a807c5490107d5d6658cce0219c +87390eb0a8d9bea50e2c2b424978790aa4d795ff71234a76993fdf0f87d493eb +fe5ae51405d602e58fa5543703a98f954421cd9ca78ee44746bcb296c1273460 +1d8bc64c65c2f2c606a1941aea9de06cdafce63d31ec951278b431edd1b25265 +98078d7678d27d41aa71a0466018aba29156ea34b1d272f9c503064dce6e93b1 +ce89f2d444a4f84b9e7af46dce213d383c994de6066b2dd403a8d6e2e1b8685b +398f20095d579a774d705ad47651a5834fa8a72dc5de7323b7ca3881166304ec +4fec6d3c24e7d8aa7265c4690d9057894473bafe69c7d72705ce289b2a9f7f98 +edffd8428136336b37609978a148849d96c74d246f3b4e42424cd81b57f41394 +9fdb112bb67d9d0c298e282cca54d2a03ac76b1dc04f010aead283622d8c0027 +8ef692f7730491a7004872094b4ca8ae4dca4862f9adc11e302fc44da0125c3b +00aa19ba7630e8cdcac08febe64b0d35ceae21ac0b505702ec5d8bd3efe132fd +e226a950645ac39b9484dbbb550b38c39c48f583bc3dc9ce8b0126b5c529a883 +bb41776922708d3007a2cbc5eb9a91efbdc0f0284f6314193fdffb358c2a9cdc +641f955522f2c0bd762d3006f6af0061318ae8e3fd60598e42b814e7b80dd16e +e6a1b9233c6c4dc0f92a11709881d4279dc89f1b55d5a7135ec37afe2316064d +29e3d58510306ea13e78976ea805f9aa6cbf0c598483170f90a00ce84b5fc2d6 +f036aee7eaea899e9c1aa1a4ecf77bf95bd30ec3cf9ae82aa8b14e96c83f61c3 +d2fd1465d4289d7294959cbd198474646a4df37b8e6c1495bec0206a730d5c15 +2443ab1d3571fb2652bb16bb8306e593c5bf999b3541524909ddea118a8baa16 +5fe022acd6070f15a937c9a52977c69b76fc22305ad3298b59c93a6d70417c73 +2ac295927446672324657c4cb20f03c612d69ab12900a8b475438cba1c5fda32 +eeea6466391bd6d4ee8ae352c94bb140cc4998c9ee3e0f46dccca7b3620e2164 +8e03ae7f233ecd16393a8c01ee781d6f71c07aa2937131577fe800c1d32507aa +8ba017c22d6d30491468cc7bdd6aac119f77fee0ff85ed35502100ba5f914f4b +8ed665441fbfd9fbb7f59ca3b70a0baf90ed1373135350988b1324a021177931 +29baa41be1f5aab8f63b60a62f1db569e8e3f280fd50896f88c5f903dcb3e3f7 +66f6cc8d07bfa1030b1f7a2302508c4015b1e14c8268eb4a495d432fc1be56ce +7bf483238621d6455f3c5423d7155a46286956fba08385ebc8f8dd195fdab6a9 +15f5264739d642d51cb9b13bbb594fa550f4381e3596dde7cd7247ef7e83a9fc +37d7fdd981af2607b56a9898358e07b7607534d947cb96209e127f3f95cdd949 +421b6b9df5bc3e178b9efc169314f97544a4453798f30467875504b3a3ff96ea +1d07f1076132ced60fc6bf04147e2895dcb90408f52813611293dde95e362440 +4cbf480169db4774386ebea3d4167b99e8ac31e7d053f6a8df26e64feda3ce5f +3f8a8d5a30c1cccc088dcdfb901195e19de1d42e0f7fed505cfa118e6e26af61 +f4724af46add79921896f83087c31f99602a54043307eed96598b4063560a76d +7f88108cb06cb46bfde2dfeb3ce53ea014d229819d65ae45dc077bfc5c0823ba +9c183d568f9b899db0601c0589fd3adf37c256b6637fa389071873f194b38842 +ee7afee7d4b99c4d079bc31ee1e3f234e32cd2cb82bdd8b3ab342b795ec2d4d5 +516483f9229ff391010ab8883ee4c91ae2f50039236411a39c47cba2960c9c4c +891946ef499f0bfde0dd644ddb3af6e467d23c7857aac9076f21b0bcdd5ba5d0 +ac521fc30745729cc24eb4779a8da50fe93883ce5013fa28385935dd38777b46 +c86b02671bf83766ce81c0599ca6dd47cb0b5bbf298e1a62e84d49025dba78bc +778d7883fd610bf6e90698fd69f5278288efb351ecfc74e78d6f4099feb227f0 +ddfb3b95c7a58ae98d5457fed660079069bd308ed47d3e98fc178fc632c88acb +2fc3ddd45373208bfadcefdae2b0c15d5af94d6562861021da9a25028c7248f0 +20737dd41c0796055aa7f4cfc46f5e497cf4ac85561e15bffc368a84af4cd310 +caa4d653ed5309fd474c2999dba309852539e937855c087f4c550fc232cedbc8 +c14399156b5e980a0c4703f3b7a6c91782ff77911665528e048e3b6ed3efc6ad +71db1601f0387281859c8de56c7f5fe63b60afe3da357505ee0554378146b2e1 +49e617f168a847e1dbb3569568896beb6f1d16ff9d2332bceb457e495996f647 +56b70dc7ab3ff12bf989af87486bb776c7fd8f5509fd3bbe4ee8227ba6d54a6b +679015531852cf81f553c5bf82e46a028bc65f9c0d438e4ea58c9882941c82ad +e53a2b823ac1ad17e8faff7c8f45d8cd8f6d76168964274432e743226fc56eb2 +e3762cce7dc3e48eadf696868844bb0de69120ba6247e3024bed5bf3c5304e74 +a9274e50e484d2bd2e92e81155955ae92c7c4eda1beac9dd11c540b9c6d74c1a +0365ef75549468ae01ba49a15a631fe84065b5027a1886382e00bf6d00bcfb85 +70d07d9fab5d172e04103b45924b8d4e855c30cf5c674368ccf3476481e56ae6 +6075f4c8359aa49a6bca93400953b7ea7a66b8fc13f136dc919a391d256133fa +5363bc06182ff592dd7a1579afce9f8cae92021f0671b5ef64a76d1eb12d9629 +0419553a5e17705ad46a9c2d5d3baf5ef618274e62c51780c2cfa87bc537dcb9 +c3d3c01d09b90f288b5ba7229f8fa64f5488d14a5d481d18684d24a8b36ee326 +4411991826173125c0a8bd6f3ff7326af28f3a3e8633153196257df48aa17a1a +1e933b65900b80101ef223f3fe1428ab5ce6a52fb30eda2b13cebf4af522741a +4e2cf96b01caa9c8d0652fb2a9d288ad0f933690626caa212134ab65ae8f3c5a +a9b7a956c80dbcc6d4944ec563a7cb0aff5896f3ca04f13e0979556e03090729 +b6f67b0fa907efe2e92b81a7709e3285a83614cfdb839428393b9075eed875ce +b3413fff510b890e4bcd480b7905a881ab90fe692dc76f91752243a32d85bccc +0e797dc8e7344ec2c1cb8a03d80dc091fe6f3bbd646a2c411c187441fd2eb6cf +2844f1001627604091690dd83ebdd95e5c9b296ec4f9f6f975c59bdbd346bf5c +c854b4602e506bffa555deb5434560c757da7e6e3a9b9f0bdecc37c3d594cd7d +44c7c928c47b978cc38d2063774b95dca5f0dcdbc1e43f0d37af99d68631fa31 +31fb3766321100958f6e5f95138561c5ea51f4b0a149f6cb8636fa1744e404d1 +2d36abaf98969200236171014081aec3fac77dcc3c5b33124edf8085ebf91097 +b13a98a3f20205825a905dd1a672587ff97c2b77d721119782cfceb8bae83c65 +c778a29b2bd59d13ce22a8dfbcd16e9c924969858c828ca672ca36e1714226fd +583a5a82d7c6d4675ba1ccaa09a9e7020c265ed0c639714aecd78f56c2e17e18 +5bd41cf7b1431b58ee3a420ab90f0822c217549d413366b0a02d923d77f75236 +dd61db5d64528b38c4c24864a26aa6ae936de97b7c175753801f1195ba2f66d3 +10842ce7d1fe75c90400c6820644c98bf85573d528febe3f7005d4aa814be9bd +0c41102c82b0df19fb6b91ee156187f31e16269f3f42dd84c952c7eafb5c83e7 +4877283cb92b7fe91fc1d30af6c6f3023301935bed82f5de119b6527e47cd3e7 +51b9070912e7a29e0f40a201fb32ac4da4ed3219ecbd6e90ea4bf93f462d6a00 +025148eb98893ac3e6b0cc8c1994cbf2b4a782d5740991cd6032d2dda23ecc6e +299a5f45d0ff0b6bae8b88328c0d8ae3c8a938f708a0d75a960cdb598d245d3a +05e961e9e97b5038a06728489720cdf19eb076ad5ddbea5703a28f050e7f49ca +98442acea9d2946b42abada4ceaeca268abab3a7b1fe4b46aa6dde55d393392e +7f22cc0c2c316fa736897c4ddbacc685ff319660c8c0bbb4b06274aa505a6f6b +e8a694fbb60fde12c21fb8832e67b749c5c5bb1840b1b186a7bb261f84c006f2 +34ab2c1900ad8a1fc68f0d339cefa86a9a2eec5614b1eae5a53f85f90c018e75 +953a22aaba0265eebc39f4ce7e185b3d3c221c2b17b40ab7e08c2d5864b5ac56 +5ceaaa3a23d455ff42f876fc0b3b9d7ca058821da17399a12adb9217e19d267d +4769b30423fab28b216f070cf543136982eaee4af6ab634e6bc7668b2ad665ec +785340cf9d7a92cfb0d10f74162de6dc824e3ee46be0d1dc7908475ebfb5e3b1 +8156181873584210370c09d0378c69fc3b75a3903a709080f2037fc765df14ba +2ddbf8df0b8c7945c1bd610de459d5258a372760f8461cf6d6df8f2e3e7a50d3 +71e51be05a6855c9d2233068ffffe95edcb7a85c293567104b66af35565bdca1 +7951550dc4c6fdedf7ac121edfa2e322c9078874a6838a703b39de5aaa5f0c42 +39a66876e009e06a4a7e7669f74c641c82baf9b5d62819253e36b13d88482f1c +3e255df34cd2f028fde7b01c2e1ca8f9406ad40d9f3fafa04450cbe98f914021 +37240509260fd50cf46acef977f6128b8424874b226041eba85121bf4b5ad451 +b2ff3e293e6566c2ada35d8f536935cc9d41774fb591b31e23b2a53c7be7bb96 +014059f15eff8caa96c81204a1a4c463a0f8553b21f55c3f3bbe325f185cc57e +892ab4efe0935c333edf152d57cdbef1c600dc15d4be6fe236bf2e2afde903b6 +dda4dcc12aec13bf66f4af0f0727c6d071b21d6eb05114fb85cd4a82dd97dcb7 +ef744ebc7b2aa63aa0bdb8e122fc324af10a9bb6de033f95414e3fb0282c7955 +5f53aed6ef74aeb83246e6ee1b94bec4735b3404d77a958eabd5ff5194330085 +132b32710afeef424e5bcac24b61829db7df6808fd55c6f605e9453ef58da015 +bd66f18ecb4eec34e8953769a6a6fc49767eabe251a804269d69f7efbd8988f7 +51ad04ad91fb77766493263a6dd861eefdd062b26043af944ba5932d42eca55c +b86ffb942c5b484a5d3a8a5d88a1bf63028a65717522299b5ad4629f7c24d83f +a741f7a83ccccb314076cbc427fd792b9be3169969175ec3f60163bdc660654b +963a970770157ddfe4082798600704cdd937d5a90b2efbeb5c99231d55dfc031 +70428731a9c53813da0b87d139ea014ae96eb9acc6087f3a69ec466334b00bb1 +441493b21d0f2ba8c0a38be6eb7598dc77550812ef5e8a0eb10a6e672ad7071f +1518b0cb4b58b43a1fb04318452709a7715fe7109b230df8e876965457f33f72 +005a8e945adc9c355805e076bb0ea657f10b91cc2db6acef781915a1bb687961 +e328b5409cf15b61ee408e1a1a6babe56de1766ea56d61fbe6ebee8e6c93dfb2 +d743ce2d1f7dd30b3dcf2d5cf2330dcbbc083874d76e6bf4a39be15813b4eb7f +20bb746f0d377413c950d8591ca00d827568e111bd1152c5ca180169c42d809b +c7f435e931dac6741d78fc32da2f59141efad44dbed21454ab43c8c9d4c03720 +4f0acfeb1dd606d855f99a04dc367f0d1b70f9df5c6e77777c3b70505e2e7aa7 +39a35fb9561e2ba31597944db45a4b7d7029b5b5b36314717d93c0c429c79d29 +09ffbe51a6f3bb0e60f4249feea9d51fa065f03294b4d6eac9c045821d1627a4 +75835c915532889a7c8fcd1acbbff8179026530c1940a482686f3ff21aee2ea1 +0c70194767ee80b65aa555aefcf69ea83f31ec877a1be06f7a93c4fe6d13e9ec +7f58ae2fd828871db867225f765025faf26648758d59424c1deb700c16ff31b8 +dcd0d1e87cc3c7adb927ad63a4cbf5a9440559c533dce172e70c25313b9079d1 +cd13b2a400f534dd0842f38ab1d8719b65f6d36865d8d4cce5e0c5a795948a58 +c2c5603bf91097eb2502c799a486ebf19a21fd01cc176931b8dc8c646cf91a4a +89bedf986d7071f287a6cade2b0d7c3d3e3e315dbed488819ba47793f9ab33de +b470e509057726c8ee41e0a867d322502850809ddc417514b18ff74fdb30b53d +c3863c41c5d5b9847287f381632665dcb2fd829036221f6b14576680b4ddccf1 +c513e48cfca3ca724b10599f415775ee7b841eb6d2a305ebbe413c676696f5a0 +51284dd32ddc2c5d1679adbcb77db675c1e9903f1eabdb24f75459d858b5012a +4e2f7fc15537407900fd9515567e4872a7c0c70a7580fc46e642c64282007461 +12631064e70f5f7be8f19ec211b6b89ea53d20b40ffb443fcf93305cd675879a +d62f4e30e49d0f1541d7f61242269d61368a763a9292b2f616fcf57f0cde8b45 +b7a1ba30527124f0c3020f45b1ba8fd1974e3b968eb13e02f61d216d67e160bd +f5ec8ba9111d719f631681fc1ad77ebaef79465942ac26caeb926c99b24d5eb9 +1bbe59bb7b798f2dea49d2377ad00ea51c5e51a9bd804cdf69c10691ef618232 +c743d391b5d61022401f0238918929ade0e84dbd7a4dbf5f7936fa93601e2d5b +d64e72a9140eac9aaea89e4d76ac3de44091b64fa7667ef1884c38f1ba8949e0 +60303ed7745d9cd4b114bbd4205d21530b3cbafb76232d116ddb7e6615d9498c +9411ee7f7dd78da1a93361bdfd452b059f1fc7fdd521867bd18ac937e17ce16e +59fbebbe19371fb12fda4a4963fd65d796f1bd300fcfd0c464f960a7c1ae4fc0 +10a3085801b42a50b0669d640b313111ae6fe65d63189386820fa79e5e579af1 +6ee31a9cefe5382621d534ff3ee4f152f18ab80ec8223cdca38c78dca1145eb9 +b1cea9022044521ae0003f8d856f105539e26eb8f2612e3dfc25a2e889e5041a +a480e9705ff36a3a814486e7e2d3cae4c69c3a084eb6db232cd696c839fffa72 +f4e5a6ec03076f1ba72c4ea47d0fb3bfe55e2780435fa7debe89516b59decf21 +3bdba4c2eee0b2364c7787819baa89a3c68e4034a322f8b60a3d882be9bcc930 +d35e43d8f367a3136b5529fee24687d4fb574274ff6d936347d17e2bc714fa34 +ea719a34d44b3fb2cf46451c6194cdfab32766c2180b4083024eb1feef9b9ec7 +b7a212b23f5b729f854d32944e1f450f9cee0bf65999bafa8e0e8fcdfa71234f +b1dbb2f0613cd5c5cd184c994e27ea054d1957943875560f2438abf7c61c15b6 +be7685b64e5432ffd8a1f68503c1423a5606bf28df647451a22334b322ac2579 +b9489ef1aed21ac9f9ee3a9b92d3eac4c2c798c48d34cc5b5082ec84a56775cc +4f5b5dcfe385db2c4c159bd16880074841a62e1201c8ddf867683cbb394bf5a0 +8721b2127aa1da54bd55a96fb47fe773a1ebd8f76127e45f281581a72bb8a8f5 +edfbb047547be1db2d1324b24353c004fa12454821817fe3f6b01c8d3afa1c64 +072b79cd8ac62705d8c2a5584634ee6af7224ea655df945f4959e5a55a9399c0 +c977ccc1e7b8fca49dcff33c069b3ee8ff181b8591cca7b693f3b0170f3ad3c9 +0cc645ec67ecf6d714f9e692ff3bc8fc77374e6383f8528f68f8a05f4b23a860 +7ceb1fbad2f0eb7948afebd54c8c379d44287b4a76668db2d4673dbc4bbc5bc1 +34163f9e2de0d79c1baa89a21b5aa3060d6f22a7ae3a777612762dfa2d4ada20 +b3e502c33b9de683f2783f5ddcf9630233933fbe059212b8366e91493adef5a6 +206ee10bd9464de76063aa3f77f4952e079e272b3c6467eea66bb65e03aeb281 +4e2c064288cc297007a9ac101bc345edf760a1392981e82b01c50c9623b4826a +826dc4f672bdd94a3e1bfeb0bcbd0a6c60c6f8cc9eec6e49bb356de2224764e8 +6866935e62c867ee079e1035d395add18d5c4c289bc39b6835db41e686403063 +7d7358daf769f11cd18b0cced96349fe009644418c2f35b8058422a963934c8e +4f20bbdf17359b29044056ebc276409c9a9ba33ac9aa4199248fe8c0ae99b65c +7f0a33904c7faf7406e0705e6b81bd5f42272612f4ce5464af86023729175656 +2333a46510a899a39100618531da128eee1e86edfac792a7562429dc371bdd87 +059a5f648fa31550112aef15cb042131334d3dfc2c36f229061de0e3354f2d90 +7bf67c9940c1a28e0657f6b689d9e9fc2a8e03383a70f91ebca33c569bf0e7a4 +93de928f26a49b62ef29db4f60ca42c8312a4cc92db25e7eb7230724e6a8d65b +e00d565b84da6d7a544b2fb55bdb18c685bac282b70218878d927e87dcefeda5 +6c38c0d285cee36b221e1583c1dc300ba48d28def0d0c31ade499b9be103e514 +6bdd8591ba5ae601352d8372a1c3f118caafcb02c5010d1d58484dccf0238ba2 +0416b3f3f8a7c42085f5e1ab0b9c2e2b1ed5ed6e10533ad554aa114908c988eb +9057f61f64c5cef00de13a9b4aa947659d6977febfce46e2923d4b524f76cca2 +a73cdfc10f09a04b781cdfb2f77bdbc6c99c767523d46ca3244ba945aebab8fb +cec291c7a234b3e000deb45507ac2ce345382b90f9d4264ebd642f59631c3e1d +9fd179512602f0420af1d9fff32d4679bc63168e7adcaa0ae582845f3008a46c +e6d955cea83cdec00c1699caf79eeb295966416b6a75fc2dd499269a8118e002 +ce10e59d5970037d51afcbfcead8d2f7bfb07bcf1f48b0707692fbe136621d6f +599bdf361bb158242c41510b42145ddef8472743cba30b32e704ecd43f088e37 +becd5facda6758017ef6a00e1b3a513ab6ffca2d0bf9f2823e325497723c4b2b +a62b51a3dd168d1f15728956504c9b5e7966bc429113f98867b615a6f7a62581 +bd227099a509cf934d934eebba18084cf798a0d002217701dd15b96d80a3b7f5 +003ee5b54b1f566aeaae0b302712f8e81eec99a8ed1261ae79c190861b247ca3 +988e3de7f64140ca9a5e2c91eaefe63c489e26a635dfa0d02ca43cd85aee45bb +48a2c991b6ad187837ca44035d68f7706f8938c2745a7bf3f4ca8514d0420a34 +c86dec308919799e17163108b3605299b53d094fb2af13028b8a21400de8ca7d +12b9bf3416b35aa265ed633c5b196cf2b7e5502c7082a6f682ddbf23d0a82f50 +6904f5f728b81b37b7f36ba9349447c1556efba2bdcc3a918d59becae309da75 +c04fc56e2e98f1e5ee2497da9f199a3386dc9ad646e9779e704668f37172c1b8 +45ba2cd7a507f1377f783f6775390f3e52c1d73ea5da10de5155160afca96c6e +a7e1e5bcedc796b219a3103eec2d226c2cbb73974a9fdec7948c70fb80849392 +6ea9becf62815930af8aa8ebe701821fdd34b595e07f92663a0304de7977b0af +bda049cba1a1004eb59f60fe2ce6e11cbb0c376df018d8da017ed4334336b425 +b40db6e4c7ca9c852a62c6497a18c14376c9a466cfd88ec440219c55f634e3ab +2d0d41f843abb754e565204aa2787983d57e8853a75e8fc840fc5dc7fcdc5b61 +306034fc181e4301345e54089407249aaf1bcc92f0a4672aa76aa22fcab0ddcb +b0f14fd5fadc6a956343174f011a0d2669837239a68304970c5525b9ccf047d8 +fbe82f61a86f14ce69afb53805b542b11622881f21a6e4b0a098d078aaaa2240 +3541ab072c8eb0c721233b5ec012e7a65fa4dc276884ea7b64b47f50334d7127 +98bcd577ce57bc5e668a15114b391165315106b19aa782c10479404c8e30d2f5 +6c4aba175fb828800a3001539a14f9dc9f1afbbc3a7e0c0499ff30e244c39637 +553784d3a13638f7c297bbec13d45d2545c7ec75856e2b6aceafed2da6ffbf48 +5e71ea170d9f1d1dca26a70f1107a4b2ff2050b1dc61253e3db4e5179ec2cac2 +fe9e157b79cf5c95bbd3df837bc5837fa0fce65ac54880f1318711879d51b9ff +e71629073a44e1139c2e25a1ddc4eb51b6f723317f8c99ab466319efb4a7c442 +d2e4d5640bf1698d5a114c2ccfd932e5ceb5a7bef737e7c908cf02727c9fa92c +4892b6abc8d731d05c67ef1041e76bbc30161dc6eedacbbc45923e7e1fe49780 +6b97995ecefd43d1b8b561f05f022dc135a6065842fc687532686c31c3f23f01 +04034b2f2428d23bbba9588193578e15cb0c09ff7a0c45371f31ed71e806891a +3229a374b0253cb4beb46e7209edc740712c6407eb7dd423f867015eeddd5d84 +8b0741e2f8c8de056e9c31361cfb086084a9c52826611ece3ec9e3b73a0ce94b +22e71e538cc8ea0f0bdfa50e4f8dbb0fbe3c840f8170b3664a6da032deaddfa2 +a637619472974112ef65959743be056480582a876eeae28dd9fbd96806ce2850 +2a871b839071b2b32eff7ee2f0ce4c37c385232b9dfaf462f313b0b0d511eca5 +5ed7775a07f7a2c81197b1eca1ac1257cd35727990ab5bb5bd70671520ad9b81 +8eada4fe0e923b0152436166682f8c192df30554a4a54ef36897144aebca2b24 +328cff11885ef56211242d34f8a4dc9681c49c80df4a50d051cf149b6c319edb +2c29f665d2463320deeff97d9640da064f777583733886c92b498e4fe0fbe3d6 +16c9aaf37e2b4287e3ae8d15b5a465256f10eecd3cf078a9e2a6812431f77e34 +2d3f57bf1b7150a9d2e98cb68d6a511dfd7748bf833b842870cf7f9604f2a9b9 +093bbb470ef3f1610a99ba6ea7636344f90714fe0e5d61ce9d7eaac7e70f3bde +d1bea9c0bbe98055c8518d67c3a835616bc7c84529c695aba9e6cf9ff6ae772b +3fc2e8425d9c6825dffb52694cdb136e92f4f29557127bff18f0f2cf5bbf7312 +f4acb220660e6d110290210c90d5eaafd06401aadf2cc24c17652fb506c0d4a5 +1d6e4442f98588cfda61563aaa134b3ca65a39f496430e4f29c51e435f8aac0d +c3f9bb0c9f8647596eaec82047a64ff22cbf9e7f4dfa7e2634ef2a1ec4809286 +2a0315cd143344b665cf6af4bf480955e948fc3f1ff297204ddd90321a5d06ed +9dc34a767f821678f8e5a24dc8f322c3bde8a379e2a4ffde266176a2af43cac9 +4de851a9e94ee64593edbdbc6abae36620bef79c42175aeb4901cc398707ec4c +214dc8d3ec184080d06b701f7ceed69b66f2f62d22d251a9750fc83740ff74e7 +63f11ee4204206ed97b16eda1bf043af6ac9a8bda00290473c39b5173f990a4c +b1a3b99c816df0f83eb6ce1f28fa79ca0b0ccdb950ac6c4c314be2001f0f7bf4 +26d604ad1a8a503e9e06bcec364fda1f082650818b2bbd45505e65fbebf8072a +8e7654baed2e337a43650945d170f679e87eb2207d2e31d29af28015e7de3cb8 +f279650fc48d2980a36c91b0b50dfff79766f535bc81f14a0e3b899d6066c235 +c3a579256846ccb9f5a18b1006b152288564abd6009256328d3e10031e699bd9 +b59fe5de47db46dbe65aecf8b7af33514f57fa0dc18b1084b86d7c91a744d220 +86c69b4890b27402fad388d8804f881afa619244dca0be168e4aa2ec246dd3b3 +e3bc4618c116cfe526a681a0f2cf7fc6924f4a6c95f5c6db3eab69a8682a7866 +20f6df63d138baa107a6854ae53b2e2cc2dd0c542e17a4c3f186406a8d2d9143 +e6a7145f9c6f6a88eac1919409d03e8e9b5bbe1cff642cdbfb814ab53e0f50ba +eba27970f793bf2d1c3964e674a5b471384ff54bbb7f36bfe3d41436612dc450 +feffcdc1006c087fa611b3c85c6c1ad07ba24ba23e57110b054ac2db71b20ff7 +4471e42097a609ab4389683ab1b4c373dfdc39706b403f2bf4d6f43ed7be6d60 +bd38a88e1ebd29bee8272a6b214dbec1e78127ab5bf7884886056592eff58d1e +6a93edb3136fffded41614f8d10fb55552006c71ad3ec15facc5b80acd3ba75b +ceb229fafd52adf20d538360f1646c61814d9536298a2d6dec0b1cb05843390a +67ffc74856c6928085fd41aaf0bfc087910d1f70cfa55bba686c7a58fe61e138 +973089d4a18dcd8ca164898f655d80a8a64fdc35c28b4e02036f5aef38c9ef99 +d6bef76a6c4e4888ac94ed42e27f9ccca6cb96055a3da2f1daa929b781153cb5 +eb93505d378cb968291854e8eb8f1e65b64e5b1ddcddb8bae6c52d55e2c1e866 +24a4727060e0860706b631d89337cdd483564d5b9cc2ce37755aadc990d4b3b3 +d3eea4369070d8fbc79d480188d77c421a47583f49f3185b972a9e00884d54cf +4a0ec2d1ebf1ce9ef6e8a2735245ce44759a24a60216b2cc49ddcf2c97893a7a +19999ed9b1f8b18095a1522ea4e1f62bf2cf488ff732aaa60d4c31bcd527d1cc +e11d9368a8729b5e66fade59a92dac562565381631b56d4736c352ecdd3ca2ba +51f066849f5d21f29e5de3421624bc6d4715ae6c4ba8b97722f4f714b5fbdffa +bb4cc10ab10023870eaa9b90e3e14c94795f5b34e2d75a921e3cc99e58cdb415 +2f3fb3cd5f1abbedbeb73fd650a89756ae642cad347f5149f706628f4996df31 +407435fd345d151a90923bb9000b38d5ba555cd070f2f2a68db629cb17660adb +b467b61cca2cec50d497a5d34e56d211dd126ae6df835d8ddd06c77059222844 +7b56466c429a2af02576e36989ee297b7dd258d9c6bb51de218b960ec79b6b56 +f684c3a05fe58cbf879a3282dd85b6b659424768eafe8a3319aaa224da4e6988 +c56470f7a8e72b31ad194a2c47804435832e4a3554da80b8ad75ae9259ec2721 +4f4a91bdf3ed8f34240611a1f1d941d415eac878d49c0761c316e43fe0c578fd +465abae5fa87777b32c2995600fa650f115245378a02b8e54728e4c812d889d4 +0c75ebd002d5231fbca893a44090173200f7ff2d286c822e371604bf6ec1e1f7 +791e23d021f6a9886f2297a93b7e3487579c63f872e305f126b87ea861ddd146 +03ddc6bc12ef8f7fb8e98b63cf1d9cc1d24f135e414d2c1a435cf523501a5562 +87efe59298dbff5ca16fa3d83748cfc4e9159506e21d0f941d4ef244b7241f9c +c99ed624b38bbcd8a17b3db877613e981436dfa41bc85c4fb18380f7df40c9a0 +41c4677f89cfe71422aa8a59f8b700d1eae965c0844626aa688178bc9849636e +62bcdb178411d539663a18ef987048386b51bd182d4dbb5e05bf77041f169099 +d5a937c77c4d73fb1cd358f195d5db231d5303fd977b5f9a01151fa5375b73c2 +ef68e4af9a57a435e7ed7a3a80daf7daad772f1f6feb897fca53c84ba11fe545 +a80cf3e957c2ad3a98cc9fe4bd3d389b73f053ca1f32238400ddbd0180bea970 +444da1e8d9f46fe00822bf3db5d9734a27fbe74c7262a7aa932cfae939350b24 +8235eee6f357cc51d941af42c3d429a83a50020309b7f4e0b5370963c27f55a5 +fc059da70a358fee279343108b934dca2671caa7d2c42da790be0a0514507d35 +c6ead0a0a901fce3fd49646513c149700f983bf88571e0d37b289a7433b15327 +1412881bb7513971faefee0704bb26466e5237149c323cc09ab8afddf8ea1f8b +5d54e2b2aa297ea258097f6f9a35f26f7f2793df6109ce761bd31f7e86e0f3f9 +1527f264081d4e1d9e11dae023c41386acc830c0831e1665943e72f7668c9857 +8cb12ac1ac532ba449caf0e85fd3080ae2c92f709039936cc5657dba308f59ae +0b6cd99fc241724382a43d607f93129dd7fd268b7e9ad8a6186b08ca809ff562 +8af88c9a27155f12e94399ad1f53b4d21d30f10ffa88e6a09535108c1273d25f +fcbcdaf2f12398b62fabed4ce8447ab125ee9848186d734139ab387995d4f276 +cfb987146e2b705119297a355cb32ef3282a9c24c9b8c8e95c2af4bd4addf08a +a5cbcc197d5741e59079fc91a5cabeca71532b80fa47e4b8b52ddf6b429cb517 +c270d8cc112644083a670a4cbf13d6dffb60a3ecd5b414cccf104309b8eb7f2f +dadddd2a1a5dc61bdb8c9ff31d1bfc669307fe2160a2519eb2e435ad8756d02e +40cc2556afcd6f86c01a23a857f85648060cb0a28bc9f9f8d5ddd6e35d5544a9 +bf5e0c74e25b0f44012187e73cd297f0cc14e7619c4a9f2a8d8aac3e43fc44ff +c2cc1726edc740e054ecef69bc804d08bf2e17d7ecdd5128e3d7269b2f510616 +fd8f83083dc98b925451262529dfb2cece5782274402b1eb2ae782d7a4568f56 +beb145cb6dd288b54904939abaa7613005f4fd0b201bf973b3929401033c9cc6 +2353782ad2fb9fa6e2cb719290b5202a9bd15683b8e491182e8d5598e8979df2 +12857f0a105128f1523fe4bef7ee8aa02f2baf987e22ab6980c53de79f534bd3 +391f4d52f00afbd1b51cd707379fd9b0f3ca6f476a16c0bfab7198dc0fb95227 +990c40c8dcf09a28035711fd06d04d40d2331b2ec5744953a2a743f3fee2531f +23336ed8767d10ada7614af5ebbb879ff569e15695050b87654d0a22bc849f8c +f39b79f2bc77e7d77f061b1981ed26fe0acae9fe349c690f9edc5af63430ae39 +7ed63301256973751757c74e2fe747483cfa78f575ac4ed00851a2def0c319cc +b6527793589c07d93cf6d5e13b77936b78e496f870d0082ec605618f5238e143 +1f30534b684072038e3aee8d5401e980f9c8c7c47efa37f1f8d6866fd9acf94f +87bfead470304dab26be3db71ff112d1466a72fb3668284a62a7d066bf427985 +1abff206a8963009548e77bc8147c626008c3c302ce80ab5c243cd4039013748 +597b931b492a09c73c1fb197da28b3fb75ab51cab1707d303900796be0bdf30f +5fc6c236e423cb4b7b266c3f933188bdfca2791786a388b3dfbf7122e1ea06be +1a7abe8655410b8ad6811b74233e9c61c6a3c15c9521bf6e3214cc918d26cc86 +0ba0b5627b6ddbed809fc8ad6a383d4ed67624f69886bb85f7bc9e10508ffaa8 +97de2d8427e714642e15b9858812b991e29201aea62e276c15acb96b2ae18225 +91df42041e1464b087b092c6ef36b4dbd8fb79d66e0149186d73a7d9911e6c6c +94c33e0336761863f92e939071c95f0476c7d5ecab5866bc535790812b20582e +a6ea90e33e3585f3e4bcd021f9e8cd6deaf2f0432a535f2eb34becf7b6d5f939 +462a6d9c038a741729469b0f0b49acafc43eb9b7857d69a2ba8105247307625e +d3df0c14b1d60f49f07af6d033d37acdb36ae37930790e9b4728efb3a4895564 +f9ed1df2fdf8537e8af088399598b9e6b834184c50e8bd24f926e1ad5c5f2df3 +2567cb0d771d844090421318dbe0369fb6d635665722701ddf23623e0e305a39 +3d025271e522aaf27c2947dc27fcab48c199feb81614a56d3bcd5420cd68688e +e78bdd61b05277dddea10b44f00a291601cd45bc04b9feb42a9184e857607e5e +96980b0a5658b1cf24352fc054392447e6b0d2a7ddf37094e0885b1fb3986b33 +1639a71b7b310828596472be426e8c7d3269152a3c922c4d910013557e2f8bc7 +db4dc318877126c67887bd4b6f28c1fee091a7ecfc2a9e13cd6312a8f35b187a +ea9f66c6160e3d013b9e2c870e17fd9879e0f15703fbed215cb8ef0deaaf6566 +2fccccf3a5d3194657ac30d6af20123eda495b095d88428ededa8c0ae9a7ca88 +0676f1a9fe46b74b98b9f941adfd0724d2e771316709e3dc753c1f8e8de09e4f +0913108cc06027dafc3326e70ca50d5ff99294e5c8cd1a7899e8cc8622eb7790 +f2195cb98c1f7b40cf390580e531c5534b774ba17f0a92487a2c84ef91218934 +9708dc4b54e134b7237a49fea40cd479b146e9d42be259c313c520d629a0ebef +ae6aebd870e06ae9f4c5a727ee5db100c3a45331b8d121b7694f116d1f9090ba +de5bb170e27604ab523f0891b3410bc09fa08a9b0f64354e9d70cfc71a216569 +17e0497cd1b2cb62330c16394ceb7d6e60fdf4536bde5d8afb48998a939e0866 +03c921176890ce3412ce67b6f46109e4e7c249f7eaf1002faf08bb1c104668e6 +a1f04bd087c97bb5b5e7769dc2c0417f7da51a9f86db9e737820abbe62084cc7 +2b7da73433f82d445c14504dbaba57d58c7659ca812ee2e2a7b00fa1bcc9d331 +57fb026f0861f45fe5f95724c72fac1147d77925ca10640d949debae692d89c1 +d785fb9612f34d49592db9208351f3d01a023910a0080f4c87a100809ed96a72 +eff11a7ba7d84c99216cbe455aa8d79577df2417d49dcb099a258784252ee4c5 +fd8fbb9cc2e248a5f407846fce471d3b303f0c214b10e7c0d7ac0acfe600d140 +1f0a5eb04022c980da09c70947e15553757e19114d9fde1b66cace6dea7ab564 +1af6a000ece5ebdea59406dc2913331ea70e255bf4d4d5188802205eaa36c802 +2f0e8304ce6d4fd80a7f5d94749c6db54896360c2a1362c17f42ab411764b3b9 +9b30a7f5447e9db51d734104ce5fc8fa52c35c45c80a8b31fc06f61d64fd9d2c +8ea1bd0d297384955c38e380306150023d495adee6775a04d07811d9519df142 +d61d3ec52592a5e6c6b99e3d49c84e2e084720387ada2c8d32dc87a86f2968dc +7917a0be428f51d5f0f8fb29f732892371879e7dc0de7ce228efbe3720d09185 +932200d026cbb95faae4584f6a14cac0ae6a7854a6668d7c1890146d1855e4e0 +1a583cbfb5b623678ff1e24854188f9434330532a98d6df4ebc0bc10917f18f1 +001c038f710a08526f63e6e8e2fb979dddce16468444b19a5eae3da58649aacb +7dff813ac32588ba1c87fd7544c1e084e5974e8d7fd48886aa0782cde421fcf0 +a01a2cb85e50ddc2247119746addf8a566acf92dcd1c68b95ebdb67791dc6fdc +62532363c91efe8b073c797f53cb11c960b84ec2850cd90644198426c64bb055 +d932bfd04b48ec00068b161e0f0cb8a713b69a9dea296a2bb0385211e93910e4 +20949a527e26a259678ca9697caec782d53a13f90834a8e1c88b2d751e2317a2 +1c6cb922fa085726014365ca13db7fd71bcbb4ec2c4f47b06189cba6b1770ae4 +746532c8dd14a8fb012a900c0abea5ff8209f574b484e2aa49aaac244c8c55e8 +ec444812fe826b1719f5a6cade376b5ebbefdf3c4ab88f08d427e74541429f60 +f23012afd684fdf7395c96640bbbe91d9edd5295c4c547cd39f10641cbbae5c1 +25a580df67beae1280458cda3eb9e12d8c720e4a95486772e35ee1867c0da749 +301a449da87fb1decd396d177f7a1da6aa8352e727bdbcb99aa93e8135f820a5 +9044c3a2d7c34fc8eeada6da1056086288b4b56734f400fd754ca1926c0d28d5 +70106f7295aeed5f60b4a10307f6f19f81d86a40624bb44cd753f1e5b4a95a1c +d5d1d30bc2c84f99fe1f350611367fab239d93c10c97675fff6527ae9095b606 +9652430ac922ebc8e7e287e9e605c44271c45e693daed8aef24614afe1e56c7d +0bb128002f07afa1e86c7ba0d0b2d7578831f21a3b87cdfa04727feaa1bb4c4a +ddd474d219bc96803419bc98c2c11e565d8fa5b7bd401e4839ac0cf1833b6d41 +12b5627835f1c24e2c5c752c569462da8dc5f1b437f8e8da1ad1b7d60dfe638f +b516f493de5fa350dabaedf9a763556092ee773c5db23d14c93f254e8aeb7635 +c8463505f37f122da1abedb2ca8ee42c8f50ff8293babda17d778d4d8d1d76a6 +f4c1b7858204235cbb62f7ca2abb8b2b7ecbc3c806995047958f3c72e14dd30a +3cdfe3273762b038a9244c1c10b961465e3a6b3f1ff7dffe4688c8f3fac06ce1 +13b583f8ce18905686487656b6934932175d20499bcae2d44d439f7bceaef088 +ec0702057866890a0abe2642614ca5755fe23ada6337b6f121a6c0468902493c +791d528db8c9620e07650f1083decf1b18b106bb8206ceaf272e27c84e186573 +95d1478c9ee65e4e6dab16a2e1dcac0332c807f88151ee61817b0fb7b93dc761 +fe4870690d4f519ff2d3cd91815adfc7afa8798b0df100514c28a1d8a3b95b23 +b601c08a6dfb7dd8d868b66a2bcb961221fa7f11a4b9ed1eefe7f027b5e2bb0c +e6efe3a83d0f7d6b7854d8f623409decdad8e63633440a018415107243bb182b +bc388adaa05fb95a467ed2c2d909c9f5977d3a1ceaf1ff4b7d9a6c4782fdc7e8 +c31fe415c7f10b3f423a97412cba9cb03ebdbff7570e02b4c974f62194438be8 +a22a0e1191b6005581f0ee42e231636e63ec1bf1ba0655f7165f12c61aad46a5 +0db1cbb0d1564b7b8abdc7b4ef1fa020c18179eebcf264f51b94e50ad6f4d053 +bc0941d67830f18e2393c44997b5731e40ac7d24b9a39925b8fb19ee3e0d922a +0a0a990783ab2a020cd73447dbe732274080daab4dacdfa2bf5b9ec8236b37a0 +1e2a414bf6419cfe432724af1b7c243aabd37cb86506afe2050c662d830c7f08 +e52d4c410e4a8043b4a1bd69769c6601884e66df2d15b4cc3f4a0b94544a29a2 +6bce25d42ba0f0963823ac43dc3d63d5b66c5f8050d99a2c66f5fd70bc9f2f9f +a4d6375549c25e023e02508638b23195053d134abcdad88353ba4d059058ced6 +1f9f86ae84b016159a60b549ac5a10cf7484b737add8ea816994b07a631ad914 +328d1abca7eb3801b2c1413b59c2674e8cc439fd994742dcb401afa92be22fa2 +4d63819bc7488f4e1a7ed469d49ed465bf421a3c7217e36b92f1099ce5cd61ac +4043e3ac3c7d6c38844633d0421b46a384ca546fee03478ffdafd023ab103756 +52356675982e0d549fd97033cbb2391d55ff1b835b0073c3ede6bb2c9ef9b4f2 +fc07a1af54e4189ba22989aac6015a2de43e3ae589aba35a1a77e32e07a01b43 +5b9f2a9333741a2efb12705cbe42c4b8e3c138fc17d4d2bf765cf7a324c70fe8 +e6a691a2e73036395d2ed8b5c706b2bc51be24a195c3562d40b7f850ea098e32 +562ac721d9cd806f5b94504a1b4d7e195d5b6b39b17e4a1c89f73af3737e4b13 +0f619834960fa4d571e6f44bc968ad9476e8c90f28cc0b5b11bd3bbf1953be5f +7d52a146df65628bd6f9deb539960768a161640168eb275cfdaed8a2df33cb45 +5ef711477a3644cd4a0b9233bb62babbf4ea2375cdd03dbcdd937cfd4fc35f8f +a03e972064bacc8fdd4be51d670b44f27fb558edee26679067e1615376288cc1 +8efd896cc48da73f06398090e72945affd5e955cc5f8bc905d147c587326e6b3 +e2934bfe94fb905faef4453b0794d41688c73b323446b9e3616860975e8b936d +1e64602359e1cbe4a8778a3ee67dd252ecdee77b088683de65a049f2f8ecd9e9 +16d3851b707369bcf6adfd177900c8cf0cfd2ef3d3b0b0ea6a5aaf86bab1b1dd +ae7713cb03c867d20fb5a0271b86349082a1342a7916febeb8a54204263610aa +607a1e17c942e87e9613d5e4cda1c56b772a41d61fa7113b4b3666e35c60ebed +65d4777284bb6f06994ef8b1fd105379581641e5fd279cb3649d5f98f99cf91c +ee8d6d1e8352ba770aa360346e8b8f2e23432b18ae98ab35e97bd6dc03c7f85b +a588d006861bfdfa2a4f6f87468d45e002ec5fa792c8b6b22d936623cb179d2b +9d440d8f544128eb67e2cae825d6282b2f9643d8239874fccc5933f1ce0f5306 +f113fbe9d6c432d0273cf4ae38ec4e0b52398cd1248aba9a36f49f65f7a6b0c0 +de20fc96828704f95ff7a60764352434185c8e1785bd1d159b39f835dfea8426 +c8315d27f4f51ae946944096074e3bafb12befa5a8fc97870395335d8f947de5 +d098095e247b23553d3c9f0d15728a833817b5bdd1454eca694d304152f53830 +f4b24b8199d8e3e46de8a945821bce555aa42f163720b2622894ffc3c898fc44 +207ad8ebd4fd4b7ab3cfd8d3a6f55d69c566137b6d6a302d37e00ce6c6cce517 +5f329b6055916723fdfd936525d671f852d75a2219a756517dd276606e3cfaeb +51edfa23aeca85c0b71565d16b00a8c606339b6bcd56e38dbfe820f319a46950 +cb1e236311a21da5ca43dcd0731a908e4fca0f4a11f7f12670e0625a61e83839 +5ffffa87c94c7f6830b454604b451d2f069bb2cbf5984dcdd0dff897967c0fb0 +80a4cdb6c36fee56e9c2c2f46c92b4554808da4411f30f4da3aafe8321a1dc0a +fab05ba8958f693daf1c7f12ebfb0ee5e48224faef7f8eeee485739faf0f73dc +fea761175595068b95cfdb0278fd682c577694ecd3153d1442409370f36e03d2 +86b33473486582ac217eb3a635fed74b872153e0936967299cd5d50f21de4d23 +db9abb6d01c6a64c9967cd15492679945eb2069e1d28f1234d96495669281972 +2a2a18c241603802a5f9ed281461757a2bf2e9246ca7b4051f5bc1248c12cd42 +7b39ea5cf42f824e17cf619c1490f7d4714fca3a7e8d416588c3901e44afd9ef +c9526364d2f6e8ce61a94e348a2a96d5c486bdcf8f4cb1264b8e9cc9d83fd25c +78d5129c7f3ca93104042f8a1ff8b2978ee4b5cc39a954452753662cb885fd76 +d13a9167013f53a174b63df320bce6ee8cee0e3aba961eff92b2782e4832a92b +991972059ec35cc20f9d3e4545db41aa9b82d68c053ddf167f2341d3b43ae944 +3353fc18a5f8f81912a1dfd4031755a8ce2cb4dc0cffe3ed349aa8a5b3787846 +89c1a677783a16a10a02e977bac774f8712e2858874e2427e8b3b3956506c91f +ea48bcfaa9f48daa6537c6b2177eede0424e1404a42843da29980b9e7608c0de +e319a7fc7c443242721235db79aa22a39994f41af09e90abe4723a78ae6c085a +f80eec1258424817f90a6836b21e0504fb8fd4033ec46c499f186d4189b34e86 +faf1657037f0eb0ec4e7108a57272272f7db1f40e29e4a822e82c641088b19b6 +1938c18b7b4273defd272ea11f6be718483c5227c4b99a046479accbc26300cd +0ecec2ce5ce021fce7fc84db8ae17dc0a3c4bb248cb782395d9db46d20da9dc1 +361c02b7e206d30e2b419022ca80cbe29070e86f58fa175d7b6956c357805c3a +2692a00e4c906778a03082cd81ebac2e348796030278bbffa3be32471a120878 +bdb179cfb5b4dfe68b818f308f08a645db1385cbf204ade3669cbe2af2124571 +6fb227ac4b38fa67ffca9956149953773433aebead6e46173e991a852afd42a4 +9bf8601712f7860b4bb523bdcb9a2d1a49e3ba79ed48f76f9db33cc42dd44543 +8093416148e554b0a4e3d6f453f9527d6d30b990e11cd1e7cca92eb8b1f1a69b +35fb81a4c240e96dbf67d850225d2f401f8f41ee6540d464802411b70f4f8d16 +1dfba6e4d13fa049f0d26295237681c690525d64b1487c4a5ab6e263372a6ae8 +8472485d0277e3123989fc11238c97ff83e978c3882a39aa11a49d02b47576bf +c07f94b7592a9237ccd7bb98cc57aea58d14dba64f0df1d68c4bdcd9b22039c5 +d4ff8bae4d68901b6cf62b8e6bf320bf6246ca002d5390611966e1ceac802de7 +7cdf9711f4efb280a7418b8a5f1ae0d9a5c2fc7054ede2dfdab6363c2943c96e +e8b7279197efba86b78719b9925650713644767c644b3abb305a936e6616c666 +7dd680727bbe79cc8ef2c7d998a13bdec3f40c9579b8001359bacd3d9d17b461 +1b31ca496f5cd913dcdfb1465829a6320010517207d20056202bb824a5a565d6 +375fd5dc408da9cb6d7f4c06c060a2895004d728dfe93831c2c7ffbe3e2be594 +7b60c7132a28c504dbff32997469fccf45d397d975e0f5e78447eaabd4b1294c +0cd57ece9c34a918d79e60802d2861c3875130eedc87b203429551635fd89579 +195c8c7c44bd3a3d56cfbd48d629e333008cae8c50e4398e81c0673ed3d60bac +53122c9c7f0ce9c20c4efee80fcef53246ac4c737a5253721e8d6013329044ef +8c8fe725a521c855dfbd48fb175e7fef64adfb0bd6d194ca6276f5d7271f5bc3 +7b843109ba6538749f3f75cb4243ae529c061d70af9d3965bded47d5ad6b0796 +84f770c4d048ade3b25ac287fc89918db2517a0c052695567d9e04ce34719da0 +2fdb43100b160e38967a1181ee7c2afafc8613315ef40d50a0c62254bc6f746a +b8120ac67d3c196ec8549718e21ecedc63989b9d739b0612de8ed0c068c26a39 +0ef04a2983fbd27f32e0fc4217d45da2a97af39ed1714bda2f9e7a2c000e125e +2d23d477386f361f55571ee6157d5ea21dc9679a98d4d24d05037d8125582c3a +fd7cb693c0f72315dd09fbd22eeadf2eeefd0fa1daa9aa850e7981674120e934 +c7e174fc93515651d58b84755655e4ed2adbe28fe34c5b6886247628196c81bb +65994c73aa69613e336fc3ca61e59ec099d94cf1562b08a0f4c1f1c9f0ef2afa +af4117082351c3e88ee5520c0bde30690999a54a6e54dbef4b5a7a1e437f5b12 +00a6a79186ff2d0fb5ecb33a0e3c463f0be14329ad6f72162ffa8e14caaa14e0 +8bb0a1089989620dcfbd740a22281fb6fbff9a7bf40485007208a552cd3fa41b +642d60cf27bc7d33126739b1ce986c115aa4cc4a31cd7b38d15a10a049bfe615 +d92385001d544e4103c3bf9d063c60a59db3d005a890963a49690b3939c4b70c +bb544a6c8051823f7de0982d6a640166cfd9d8a9feba715112d356e2c926bdf3 +613f07b04dfbc4166af5b9d8dda4643412bb7bcb8329cdf954cba57657a8692c +f949a94ac1732c8e635ba0d46a36010c9635648bad17f41df0c5b4ecddd1b869 +3049b9585fecaa1f54a0aa5dc282ad4b7e4f7c1cdcb841f79334800859f65ae6 +a8970cea560d2b6176fb1407ba616473dd582aadce98f34d26f57701386a4890 +b6eac4ce9fa52c412d00b7fc8b275fc2f75bdac5df19c345111e182d87543fef +5b5126d769296a7211384f46d2561aaec079ee59657d3d8469f69886ae2e2aba +e2c2f0d895eb410b75557cc59be5f1689a705cf5789f014a2b5471ad6e6d291c +d53efd0936e463f9777a8e1b2e962ea52d9c263fec2aeb1e97d5baca1400965a +c1d3dbbb0945bf12dcb39c1300063fe2c0adaa7a95acb5f3ce50ec87bdaf837b +2c602fb6fc4b2e36ed2d7c87b22a3dfb691113114055c57e6d2a3ccb1bf60eb6 +0200cece0fa068e4ced5b5be5013d67686deb6b376e68c096f826c31066e6fc1 +7ef462342b373cd96211a8ca164ebf85086e598985f8cf45040a2eb6bbf41ee0 +2776bbdf04b0a781c974caa50f005dd9f29a10ac156d9dca7f65a17f8ed94b94 +34c1c4bd10ecfe3afdafbb32f7a3be0af5227ff4d1b8b65f97b49cb568fde874 +cfac3e2e83eb16de6c8978ffcba428bf86cc2c530d8b91775807b31c6017f4b2 +a12ac9b97389731790a74cdaa7459bc1dab5ea04730d02f5a35613adc68b328c +80ae5934269a50cec5f9ddf9cfa3b3ce1309afe8a13fd638fc826ea8cae3815b +1c7436ec4a95d7d0ecdd8145164c0a949f063702b4382ac728e1f9819d42d481 +7204b39731b792d31b8a28b0d32e5131b1af1c5c2c0328e1f5449bf038de76f4 +131a729e41c51e171b88ca9cbc46f9eeaa65a1c0fbc10de4ca4260646604abed +b9bb1849d2b7df6b974a985143e328adb32e4aee7572120adfc8c8682be8b357 +cfd8965207db3ad8f53ab4314429a88243bf4aada5c3f1b7c93371e3c8e587ce +63338fc97ee9919ad208f9a24f78e7be62041fb5828030d6be624015bbff72b3 +b109984942bcf84a6823321a3e5838105b85d8269c49836d5f2a1954c792dc20 +5aff95e39f65123eac7c37d1b2a947131e15a4925580eea6288d0ce1ea7c1784 +e1aa6fc6cd5ad39e5f8153c704fa1afcdade108e0dc8d2cfcea6ea7f882381b3 +87d8f1f452248223f845a8f8469e935eb79d70df344f090e2f9335cb3f5c20c2 +e94cff60225253aaf9bbf4b65feb2519bf38e68713abc8e71493912379408f5a +d8c67611f6f65e85222c77362c30b55d5aa2c402a92da0531fc5c3e33685978f +b7ed5a5933d8a0326bf7212958e371adc3525cd53ed3185b8d52543b14a00008 +ed31070c6e6c8bfcc7c447dd976fa25a65c429e320a98bad15d4188bc86d9de5 +c4b128fe11e07ce52d0b671ec6f6e1db296b150a6c4c8f354da3a878a8a41a61 +bad6b1758b6300f59627e67fa0dbb2eda9108a70f57c7df2535e7b462d570d52 +848186e7aecfbcd1295ce70ace4af4d4e934fb85fc3830d9ec60cfabeb1c5d8a +996354053c2b701fcea2cf9573416ee9ca13ecd43cc38fca8ff492bd7894b906 +30e65b1cbe25c0ff8e4196640afca6edb18dd22ebaf124a2f653df5d7c7119b8 +94b69b35249ddc09eb19e6d7de3d2874e512d6bb5bf1e8201b2caf23cbfea635 +f11f94b9ef8c470e099aa35b0b9d9070de141e37fa1daeae0cab22f79fb97551 +1e119cf31d0773771d5afcab54055513f930080090bb32c0fd74e3ed6b43bfdb +379102fb75144d99a9a7534d70b0436840adbad11341d32552b9a28bdb7c3f88 +b6a5cc43a47b710fa05ce9c9c93aa6e83ed17b8ccfb60489413bea16c2dc3b43 +4fa7a55bcb4829d35d671bd18cd8e1671f801d544edac3a1c50c2805ee17409c +72b3f27f93ebcc9476b6802d371b4d171c269935dd46566114ff3d93d6af1860 +ab167e06bae8a8bcec3f6eb6402135aee0d0ae5fc10cc381e6c170dabab2f0fc +da7ace0869a6888545fcb8906fdbe6b8ed7186559cb160fb917bfcd2d60909b6 +3db355afbbd7419168550957a315117c35d84f16e090e0d6aca7d975354c68f7 +5f729ee0146d223e4a1ebfca7b0b5378cd22cd2101e81e5e2ce87f59df6b72c0 +d5c74eca5f00bb6e8607fe50b5bbb5805cd6be866cc9d65f64996f43ec1a5a1f +c414a9928b9cb04dfba545125e942e1af2937340f840d062daeefea43b4e7dbe +38cdbb13f7d09ce3683008fbc91ca416a6007201b7653ad23d2a5ba78757f090 +88248305d9ebdd145bd2579a5afc7f7ee948242ee1b65149cea47b6aeb5966e2 +30b1213e89c6db6663ad17f6dce581989d21c39e18e2ba013c76409c288e87b0 +4d2fe17d55bcbe2ce1554076ac001f57d7852781a0ab0b013b908b664e002c86 +f8e471ea85f9b850686a154b7527c2d51639703642bb1117680cc418ce7736f7 +4400d505e5a0768089f363252842225ed98ffd3c71a21c612da9e8c1578676d7 +e6ebb010447504e5e29b61dee6de50f367b8520f26d2214c1a1fa3f7189fdd7e +43cf670d61a0ab8d7f7cdac67d7ebc1a62b824b022a52f2e67089b298b0716dd +f07b08c078089d9ba9cc2070f7496b962724496831fe18f386038769b30003ab +d56df5bcca7d0575867055081a1be33ef7786f9983617f2d397abbd03857a488 +baa58a786fd4b6e62f17143cee84e1d1ea1ccbd9c1c15c60fcead4a9bee08ba3 +db9eefe8709ea78e84df589d66c5bd3424ffd1771b614e9aca83a45bd58ac42e +540531b6676254b0fad93ebdc701daad972246e8369f6795c3a1f5067c04b598 +abf240e1753a79e82e04ebd8c65bb22b210f98a8e91e2cd8e382489030d2efba +ae066aec60c2d7eeb0d0c5de30a1ec1060cdc5fd48f5491cca58a6b988650c81 +9df440eb7a742b32456b0c9c8480f18238ffb56faaaf446329be4da858bc5f71 +8c16158bf3896ca2177d03072db65109948247b819feb85bd8a8ca55fbb19728 +9fdf707045b3a0059f7abef9a6a6e8e28e6342a31528081ecec18e4dacff4d3a +25ebea466d5f5864059949ffcbd7f52edacef4c0192673fbee1f59b01976b667 diff --git a/source-code/MiniNero/MLSAG.py b/source-code/MiniNero/MLSAG.py new file mode 100644 index 0000000..bb25628 --- /dev/null +++ b/source-code/MiniNero/MLSAG.py @@ -0,0 +1,85 @@ +#see https://eprint.iacr.org/2015/1098.pdf +import MiniNero +import PaperWallet + +def keyVector(rows): + return [None] * rows + +def keyImage(x, rows): + HP = keyVector(rows) + KeyImage = keyVector(rows) + for i in range(0, rows): + HP[i] = MiniNero.hashToPoint_cn(MiniNero.scalarmultBase(x[i])) + KeyImage[i] = MiniNero.scalarmultKey(HP[i], x[i]) + return KeyImage + +def MLSAG_Sign(pk, xx, index): + rows = len(xx) + cols = len(pk[0]) + print("Generating MLSAG sig of dimensions ",rows ,"x ", cols) + L = [[None] * cols] #list of keyvectors? except it's indexed by cols... it's kind of internal actually + R = [[None] * cols] + s = [[PaperWallet.skGen() for i in range(0, cols)] ] #first index is rows, second is cols, wonder if I should switch that.. + HP = [[MiniNero.hashToPoint_cn(i) for i in pk[0]]] + + pj = ''.join(pk[0]) + for i in range(1, rows): + L.append([None] * cols) + R.append([None] * cols) + s.append([PaperWallet.skGen() for j in range(0, cols)]) + HP.append([MiniNero.hashToPoint_cn(j) for j in pk[i]]) + pj = pj + ''.join(pk[i]) + + c= [None] * cols #1-dimensional + keyimage = keyImage(xx, rows) #ok + for i in range(0, rows): + L[i][index] = MiniNero.scalarmultBase(s[i][index]) #aG + R[i][index] = MiniNero.scalarmultKey(HP[i][index], s[i][index]) #aH + j = (index + 1) % cols + tohash = pj + for i in range(0, rows): + tohash = tohash + L[i][index] + R[i][index] + c[j] = MiniNero.cn_fast_hash(tohash) + while j != index: + tohash = pj + for i in range(0, rows): + L[i][j] = MiniNero.addKeys(MiniNero.scalarmultBase(s[i][j]), MiniNero.scalarmultKey(pk[i][j], c[j])) #Lj = sG + cxG + R[i][j] = MiniNero.addKeys(MiniNero.scalarmultKey(HP[i][j], s[i][j]), MiniNero.scalarmultKey(keyimage[i], c[j])) #Rj = sH + cxH + tohash = tohash + L[i][j] + R[i][j] + j = (j + 1) % cols + c[j] = MiniNero.cn_fast_hash(tohash) + for i in range(0, rows): + s[i][index] = MiniNero.sc_mulsub_keys(s[i][index], c[index], xx[i]) #si = a - c x so a = s + c x + return keyimage, c[0], s + +def MLSAG_Ver(pk, keyimage, c1, s ): + rows = len(pk) + cols = len(pk[0]) + print("verifying MLSAG sig of dimensions ",rows ,"x ", cols) + L = [[None]*cols] + R = [[None]*cols] + pj = ''.join(pk[0]) + for i in range(1, rows): + L.append([None] * cols) + R.append([None] * cols) + pj = pj + ''.join(pk[i]) + c= [None]*(cols+1) #you do an extra one, and then check the wrap around + HP = [[MiniNero.hashToPoint_cn(i) for i in pk[0]]] + for j in range(1, rows): + HP.append([MiniNero.hashToPoint_cn(i) for i in pk[j]]) + c[0] = c1 + j = 0 + while j < cols: + tohash = pj + for i in range(0, rows): + L[i][j] = MiniNero.addKeys(MiniNero.scalarmultBase(s[i][j]), MiniNero.scalarmultKey(pk[i][j], c[j])) + R[i][j] = MiniNero.addKeys(MiniNero.scalarmultKey(HP[i][j], s[i][j]), MiniNero.scalarmultKey(keyimage[i], c[j])) + tohash = tohash + L[i][j] + R[i][j] + j = j + 1 + c[j] = MiniNero.cn_fast_hash(tohash) + + rv = (c[0] == c[cols]) + print("c", c) + print("sig verifies?", rv) + + return rv diff --git a/source-code/MiniNero/MLSAG2.py b/source-code/MiniNero/MLSAG2.py new file mode 100644 index 0000000..7cc1dc1 --- /dev/null +++ b/source-code/MiniNero/MLSAG2.py @@ -0,0 +1,100 @@ +#see https://eprint.iacr.org/2015/1098.pdf +#this one is same as MLSAG.py, I'm just experimenting with +#how to best implement it.. +import MiniNero +import PaperWallet + +def keyVector(rows): + return [None] * rows + +def keyMatrix(rows, cols): + #first index is columns (so slightly backward from math) + rv = [None] * cols + for i in range(0, cols): + rv[i] = keyVector(rows) + return rv + +def hashKeyVector(v): + return [MiniNero.hashToPoint_cn(vi) for vi in v] + +def vScalarMultBase(v): + return [MiniNero.scalarmultBase(a) for a in v] + +def keyImageV(x): + #takes as input a keyvector, returns the keyimage-vector + return [MiniNero.scalarmultKey(MiniNero.hashToPoint_cn(MiniNero.scalarmultBase(xx)), xx) for xx in x] + +def skvGen(n): + return [PaperWallet.skGen() for i in range(0, n)] + +def skmGen(r, c): + rv = keyMatrix(r, c) + for i in range(0, c): + rv[i] = skvGen(r) + return rv + +def MLSAG_Gen(pk, xx, index ): + rows = len(xx) + cols = len(pk) + print("Generating MG sig of size ", rows, "x", cols) + print("index is:", index) + print("checking if I can actually sign") + print(pk[index]) + print([MiniNero.scalarmultBase(x) for x in xx]) + c= [None] * cols + alpha = skvGen(rows) + I = keyImageV(xx) + L = keyMatrix(rows, cols) + R = keyMatrix(rows, cols) + s = keyMatrix(rows, cols) + m = ''.join(pk[0]) + for i in range(1, cols): + m = m + ''.join(pk[i]) + L[index] = [MiniNero.scalarmultBase(aa) for aa in alpha] #L = aG + Hi = hashKeyVector(pk[index]) + R[index] = [MiniNero.scalarmultKey(Hi[ii], alpha[ii]) for ii in range(0, rows)] #R = aI + oldi = index + i = (index + 1) % cols + c[i] = MiniNero.cn_fast_hash(m+''.join(L[oldi]) + ''.join(R[oldi])) + + while i != index: + s[i] = skvGen(rows) + L[i] = [MiniNero.addKeys1(s[i][j], c[i], pk[i][j]) for j in range(0, rows)] + + Hi = hashKeyVector(pk[i]) + R[i] = [MiniNero.addKeys2( s[i][j], Hi[j], c[i], I[j]) for j in range(0, rows)] + oldi = i + i = (i + 1) % cols + c[i] = MiniNero.cn_fast_hash(m+''.join(L[oldi]) + ''.join(R[oldi])) + print("L", L) + print("R", R) + s[index] = [MiniNero.sc_mulsub_keys(alpha[j], c[index], xx[j]) for j in range(0, rows)] #alpha - c * x + return I, c[0], s + +def MLSAG_Ver(pk, I, c0, s ): + rows = len(pk[0]) + cols = len(pk) + print("verifying MG sig of dimensions ",rows ,"x ", cols) + c= [None] * (cols + 1) + c[0] = c0 + L = keyMatrix(rows, cols) + R = keyMatrix(rows, cols) + m = ''.join(pk[0]) + for i in range(1, cols): + m = m + ''.join(pk[i]) + i = 0 + while i < cols: + L[i] = [MiniNero.addKeys1(s[i][j], c[i], pk[i][j]) for j in range(0, rows)] + + Hi = hashKeyVector(pk[i]) + R[i] = [MiniNero.addKeys2( s[i][j], Hi[j], c[i], I[j]) for j in range(0, rows)] + + oldi = i + i = i + 1 + c[i] = MiniNero.cn_fast_hash(m+''.join(L[oldi]) + ''.join(R[oldi])) + print("L", L) + print("R", R) + print("c", c) + + return (c0 == c[cols]) + diff --git a/source-code/MiniNero/MiniNero.py b/source-code/MiniNero/MiniNero.py new file mode 100644 index 0000000..d916f92 --- /dev/null +++ b/source-code/MiniNero/MiniNero.py @@ -0,0 +1,261 @@ +#"MiniNero" by Shen Noether mrl. Use at your own risk. +import hashlib #for signatures +import math +import Crypto.Random.random as rand +import Keccak #cn_fast_hash +import mnemonic #making 25 word mnemonic to remember your keys +import binascii #conversion between hex, int, and binary. Also for the crc32 thing +import ed25519 #Bernsteins python ed25519 code from cr.yp.to +import zlib + +b = 256 +q = 2**255 - 19 +l = 2**252 + 27742317777372353535851937790883648493 + +def netVersion(): + return "12" + +def public_key(sk): + #returns point encoded to binary .. sk is just an int.. + return ed25519.encodepoint(ed25519.scalarmultbase(sk)) #pub key is not just x coord.. + +def scalarmult_simple(pk, num): + #returns point encoded to hex.. num is an int, not a hex + return ed25519.encodepoint(ed25519.scalarmult(toPoint(pk), num)) #pub key is not just x coord.. + +def addKeys(P1, P2): + return binascii.hexlify(ed25519.encodepoint(ed25519.edwards(toPoint(P1), toPoint(P2)))) + +#aG + bB, G is basepoint.. +def addKeys1(a, b, B): + return addKeys(scalarmultBase(a), scalarmultKey(B, b)) + +#aA + bB +def addKeys2(a, A, b, B): + return addKeys(scalarmultKey(A, a), scalarmultKey(B, b)) + +def subKeys(P1, P2): + return binascii.hexlify(ed25519.encodepoint(ed25519.edwards_Minus(toPoint(P1), toPoint(P2)))) + +def randomScalar(): + tmp = rand.getrandbits(32 * 8) # 8 bits to a byte ... + return (tmp) + +def xor(a, b): + return intToHex(hexToInt(a) ^ hexToInt(b)) + +def electrumChecksum(wordlist): + wl = wordlist.split(" ") #make an array + if len(wl) > 13: + wl = wl[:24] + else: + wl = wl[:12] + upl = 3 #prefix length + wl2 = '' + for a in wl: + wl2+= a[:upl] + z = ((zlib.crc32(wl2) & 0xffffffff) ^ 0xffffffff ) >> 0 + z2 = ((z ^ 0xffffffff) >> 0) % len(wl) + return wl[z2] + +__b58chars = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz' +__b58base = len(__b58chars) + +def b58encode(v): + a = [reverseBytes(v[i:i+16]) for i in range(0, len(v)-16, 16)] + rr = -2*((len(v) /2 )% 16) + + res = '' + for b in a: + bb = hexToInt(b) + result = '' + while bb >= __b58base: + div, mod = divmod(bb, __b58base) + result = __b58chars[mod] + result + bb = div + result = __b58chars[bb] + result + res += result + result = '' + if rr < 0: + bf = hexToInt(reverseBytes(v[rr:])) #since we only reversed the ones in the array.. + result = '' + while bf >= __b58base: + div, mod = divmod(bf, __b58base) + result = __b58chars[mod] + result + bf = div + result = __b58chars[bf] + result + res += result + return res + + +def sc_0(): + return intToHex(0) + +def sc_reduce_key(a): + return intToHex(hexToInt(a) % l) + +def sc_unreduce_key(a): + return intToHex(hexToInt(a) % l + l) + +def sc_add_keys(a, b): + #adds two private keys mod l + return intToHex((hexToInt(a) + hexToInt(b)) % l) + +def sc_add(a, exps): + #adds a vector of private keys mod l and multiplies them by an exponent + ssum = 0 + for i in range(0, len(a)): + ssum = (ssum + 10 ** exps[i] * hexToInt(a[i])) % l + return intToHex(ssum) + +def sc_check(a): + if hexToInt(a) % l == 0: + return False + return (a == sc_reduce_key(a)) + +def addScalars(a, b): #to do: remove above and rename to this (so that there is "add keys" and "add scalars") + #adds two private keys mod l + return intToHex((hexToInt(a) + hexToInt(b)) % l) + +def sc_sub_keys(a, b): + #subtracts two private keys mod l + return intToHex((hexToInt(a) - hexToInt(b)) % l) + +def sc_mul_keys(a, b): + return intToHex((hexToInt(a) * hexToInt(b)) % l) + +def sc_sub_keys(a, b): + return intToHex((hexToInt(a) - hexToInt(b)) % l) + +def sc_mulsub_keys(a, b, c): + #returns a - b * c (for use in LLW sigs - see MRL notes v 0.3) + return intToHex( (hexToInt(a)- hexToInt(b) * hexToInt(c)) % l) + +def add_l(a, n): + return intToHex(hexToInt(a) +n * l ) + +def sc_muladd_keys(a, b, c): + #returns a + b * c (for use in LLW sigs - see MRL notes v 0.3) + return intToHex((hexToInt(a)+ hexToInt(b) * hexToInt(c) ) % l) + +def mul_8(a): + return intToHex(8 * hexToInt(a)) + +def fe_reduce_key(a): + return intToHex(hexToInt(a) % q) + +def recoverSK(seed): + mn2 = seed.split(" ") #make array + if len(mn2) > 13: + mn2 = mn2[:24] + sk = mnemonic.mn_decode(mn2) + else: + mn2 = mn2[:12] + #mn2 += mn2[:] + sk = cn_fast_hash(mnemonic.mn_decode(mn2)) + #sk = mnemonic.mn_decode(mn2) + + return sk + +def cn_fast_hash(s): + k = Keccak.Keccak() + return k.Keccak((len(s) * 4, s), 1088, 512, 32 * 8, False).lower() #r = bitrate = 1088, c = capacity, n = output length in bits + +def getView(sk): + a = hexToInt(cn_fast_hash(sc_reduce_key(sk))) % l + return intToHex(a) + +def getViewMM(sk): + a = hexToInt(cn_fast_hash(sk)) + return intToHex(a) + + +def reverseBytes(a): #input is byte string, it reverse the endianness + b = [a[i:i+2] for i in range(0, len(a)-1, 2)] + return ''.join(b[::-1]) + +def encode_addr(version, spendP, viewP): + buf = version + spendP + viewP + h = cn_fast_hash(buf) + buf = buf + h[0:8] + return b58encode(buf) + +def hexToInt(h): + s = binascii.unhexlify(h) #does hex to bytes + bb = len(h) * 4 #I guess 8 bits / b + return sum(2**i * ed25519.bit(s,i) for i in range(0,bb)) #does to int + +def intToHex(i): + return binascii.hexlify(ed25519.encodeint(i)) #hexlify does bytes to hex + +def publicFromSecret(sk): + #returns pubkey in hex, same as scalarmultBase + return binascii.hexlify(public_key(hexToInt(sk))) + +def scalarmultBase(sk): + #returns pubkey in hex, expects hex sk + return binascii.hexlify(public_key(hexToInt(sk))) + +def identity(): + return scalarmultBase(intToHex(0)) + +def scalarmultKey(pk, num): + return binascii.hexlify(scalarmult_simple(pk, hexToInt(num))) + +def scalarmultKeyInt(pk, num): + return binascii.hexlify(scalarmult_simple(pk, num)) + +def publicFromInt(i): + #returns pubkey in hex, same as scalarmultBase.. should just pick one + return binascii.hexlify(public_key(i)) + +def toPoint(hexVal): + aa = binascii.unhexlify(hexVal) #to binary (new) + return ed25519.decodepoint(aa) #make to point + +def fromPoint(aa): #supposed to reverse toPoint + binvalue = ed25519.encodepoint(aa) + return binascii.hexlify(binvalue) + +def hashToPoint_cn(hexVal): + #note this is the monero one, won't work for C.T. + #however there is an alternative which will work for C.T. + #pk = publicFromSecret(hexVal) + HP = cn_fast_hash(hexVal) + return scalarmultBase(HP) + +def mul8(point): + return binascii.hexlify(scalarmult_simple(point, 8)) + +def hashToPoint_ct(hexVal): + #note this is the monero one, won't work for C.T. + #however there is an alternative which will work for C.T. + #returns a hex string, not a point + a = hexVal[:] + i = 0 + while True: + worked = 1 + a = cn_fast_hash(a) + i += 1 + try: + toPoint(a) + except: + worked = 0 + if worked == 1: + break + print("found point after "+str(i)+" hashes") + return mul8(a) # needs to be in group of basepoint + +def getAddrMM(sk): + vk = getViewMM(sk) + sk = sc_reduce_key(sk) + pk = publicFromSecret(sk) + pvk = publicFromSecret(vk) + return encode_addr(netVersion(), pk, pvk) + +def getAddr(sk): + vk = getView(sk) + sk = sc_reduce_key(sk) + pk = publicFromSecret(sk) + pvk = publicFromSecret(vk) + return encode_addr(netVersion(), pk, pvk) diff --git a/source-code/MiniNero/MiniNeroPubKey.py b/source-code/MiniNero/MiniNeroPubKey.py new file mode 100644 index 0000000..e6fe226 --- /dev/null +++ b/source-code/MiniNero/MiniNeroPubKey.py @@ -0,0 +1 @@ +MiniNeroPk = 'cd9db8fafbf2b99605cee870ada0dd64ae5a583a4414c3d5d34e8e8072d520b6' \ No newline at end of file diff --git a/source-code/MiniNero/MoneroProof.py b/source-code/MiniNero/MoneroProof.py new file mode 100644 index 0000000..a6d2c6e --- /dev/null +++ b/source-code/MiniNero/MoneroProof.py @@ -0,0 +1,50 @@ +# shen noether - mrl +# this python script computes +# a (Keccak) hash of your document +# and then turns it into a monero address +# for timestamping c.f. github.com/ShenNoether/btcProof +# + +import MiniNero #for creating monero address +import sys #for getting command line arguments +import binascii #for converting binary data +import Keccak #for hash, we use this instead of sha256 +import ed25519 +import mnemonic + +BLOCKSIZE = 2 **10 +l = 2**252 + 27742317777372353535851937790883648493 +def cnHashOfFile(filepath): + #c.f. github.com/ShenNoether/btcProof sha256OfFile + bin_data = open(filepath, 'rb').read() + hex_data = binascii.hexlify(bin_data) + print(hex_data) + return MiniNero.cn_fast_hash(hex_data) + +def moneroProofOfFile(fi): + s = cnHashOfFile(fi) + #s = MiniNero.sc_reduce_key(s) #if you are testing, insert + #an s below this line + + sk = MiniNero.sc_reduce_key(s) + print("secret spend key:", sk) + vk = MiniNero.getView(sk) + print("secret view key:", vk) + pk = MiniNero.publicFromSecret(sk) + print("public spend key:", pk) + pvk = MiniNero.publicFromSecret(vk) + print("public view key:", pvk) + wl = mnemonic.mn_encode(s) + cks = MiniNero.electrumChecksum(wl) + print(cks) + print("mnemonic:", wl + " " + cks) + + return MiniNero.encode_addr(MiniNero.netVersion(), pk, pvk) + +if len(sys.argv) > 1: + #print("address to send to :", moneroProofOfFile(sys.argv[1])) + cnHashOfFile(sys.argv[1]) +else: + print("provide filename as argument") + print("example: MoneroProof.py Keccak.txt") + diff --git a/source-code/MiniNero/MyMoneroImport.py b/source-code/MiniNero/MyMoneroImport.py new file mode 100644 index 0000000..0f90893 --- /dev/null +++ b/source-code/MiniNero/MyMoneroImport.py @@ -0,0 +1,19 @@ +#use at your own risk +#Note, this is not quite working apparently, +#apparently the viewkeys from the main client and mymonero +#although, if they were derived consistently +#(which seems reasonable) then it should work +import MiniNero +import mnemonic + +def importMM(wordlist): + print("for testing purposes only!") + sk = MiniNero.recoverSK(wordlist) + print("vk", vk) + print("pvk", MiniNero.publicFromSecret(vk)) + key = mnemonic.mn_encode(sk) + cks = MiniNero.electrumChecksum(key) + print(key + " "+cks) + +seed = raw_input("12 words?") +print(importMM(seed)) diff --git a/source-code/MiniNero/Old_Ring_CT.py b/source-code/MiniNero/Old_Ring_CT.py new file mode 100644 index 0000000..ae565cc --- /dev/null +++ b/source-code/MiniNero/Old_Ring_CT.py @@ -0,0 +1,97 @@ +#Work in progress obvously. This will implement the modified version of gmaxwells Confidential Transactions so that they work with ring signatures. +#The math is outlined in mrl_notes v4 (v3 is same but sign of z should be - in an equation) which can be found in this repository. +import MiniNero +import LLW_Sigs +import PaperWallet + +def getHForCT(): + A = MiniNero.publicFromInt(1) + return MiniNero.hashToPoint_ct(A) + +def binary(n): + b = [] + while n: + b = [n & 1] + b + n >>= 1 + return b or [0] + +def out_commitments(values): + #do this first + n = len(values) + values2 = [None] * n + for i in range(0, n): + values2[i] = [MiniNero.intToHex(j) for j in binary(MiniNero.hexToInt(values[i]))] + #returns a list of commitments C_i = y_iG + value_i * H for outputs (these masks are created randomly) + masks = [None] * n + sumMasks = [None] * n + for i in range(0, n): + masks[i] = [PaperWallet.skGen() for jj in values2[i]] #binary decomposition for range proofs (could also use another base) + sumMasks[i] = MiniNero.intToHex(sum([MiniNero.hexToInt(a) for a in masks[i]])) #sum is what actually goes into the ring.. + C = [None] * n + for i in range(0, n): + C[i] = MiniNero.addKeys(MiniNero.scalarmultBase(sumMasks[i]), MiniNero.scalarmultKey(H_ct, values[i])) + return C, masks, sumMasks, values2 + +def in_commitments(input_value, sk, masks): + #for now, assume there is one input, generalized after get that working + sum_masks = MiniNero.intToHex(sum([MiniNero.hexToInt(a) for a in masks])) + z = MiniNero.sc_sub_keys(sk, sum_masks) # z + sum of input mask values = sk + C = MiniNero.addKeys(MiniNero.scalarmultBase(sk), MiniNero.scalarmultKey(H_ct, input_value)) #input_value = sum output values + return C, z #z is the sk you need to sign for this commitment + +def CT_ring_sig(pk, C_in, C_out, xz, index): + print("Generating Ct ring sig") + n = len(pk) + pk2 = [None] * 2 + for i in range(0, n): + pk2[i] = MiniNero.addKeys(pk[i], C_in) + for j in C_out: + pk2[i] = MiniNero.subKeys(pk2[i], j) + print("check validity", pk2[index], MiniNero.scalarmultBase(xz)) + if pk2[index] != MiniNero.scalarmultBase(xz): + print("stop lying, you don't know a key") + exit() + I, c0, s = LLW_Sigs.LLW_Sig(pk2, xz, index) + print("Ct ring sig generated") + return I, c0, s, pk2 + +def rangeProof(C_out_i, masks_i): + n = len(masks_i) + I_Proofs = [None] * n + c0s = [None] * n + ss = [None] * n + C_is = [None] * n + for i in range(0, n): + C_i = MiniNero.addKeys(MiniNero.scalarmultBase(masks_i[i]), MiniNero.scalarmultKey(H_ct, C_out_i[i])) # masks_i * G + C_out_i * H + C_i_prime = MiniNero.subKeys(C_i, H_ct) #C_i - H + C_is[i] = [C_i_prime, C_i] + print("generating LLWsig for range proof from Cis, masks, couts", C_is[i], masks_i[i], C_out_i[i]) + I_Proofs[i], c0s[i], ss[i] = LLW_Sigs.LLW_Sig(C_is[i], masks_i[i], MiniNero.hexToInt(C_out_i[i])) + #ring sig on the above, with sk masks_i + return I_Proofs, c0s, ss, C_is + +H_ct = getHForCT() +print("H", H_ct) + +a = MiniNero.intToHex(49) +b1 = MiniNero.intToHex(30) +b2 = MiniNero.intToHex(20) +x_priv = PaperWallet.skGen() #our private key +x_commit = PaperWallet.skGen() # our private commitment key +#x_commit = x_priv #do with x_priv = x_commit first... , then modify by adding another mask +Pk1 = MiniNero.scalarmultBase(x_priv) #our public key +Pk2 = MiniNero.scalarmultBase(PaperWallet.skGen()) #other sk (we don't know it +print("xpriv, Pk1, Pk2", x_priv, Pk1, Pk2) + +C_out, out_masks, sumMasks, values2 = out_commitments([b1, b2]) + +#testing rangeProofs +print("testing range proofs") +I_proofs, c0s, ss, Ci_s = rangeProof(values2[0], out_masks[0]) +print("Iproofs, c0s, ss", I_proofs, c0s, ss) + +print("C_out, outmasks", C_out, sumMasks) +C_in, z = in_commitments(a, x_commit, sumMasks) +print("C_in, z", C_in, z) +I, c0, s, PP = CT_ring_sig([Pk1, Pk2], C_in, C_out, MiniNero.sc_add_keys(x_priv,z), 0) +LLW_Sigs.LLW_Ver(PP, I, c0, s) diff --git a/source-code/MiniNero/PaperWallet.py b/source-code/MiniNero/PaperWallet.py new file mode 100644 index 0000000..e32eb8b --- /dev/null +++ b/source-code/MiniNero/PaperWallet.py @@ -0,0 +1,60 @@ +#monero paper wallet test code, shen noether mrl +#use at your own risk +import Crypto.Random.random as rand +import MiniNero +import mnemonic +l = 2**252 + 27742317777372353535851937790883648493 + +def skGen(): + return MiniNero.intToHex( 8 * (rand.getrandbits(64 * 8)) % l) + +def pkGen(): + #The point of this is in testing functions where you need some arbitrary public key to test against + return MiniNero.scalarmultBase(MiniNero.intToHex( 8 * (rand.getrandbits(64 * 8)) % l)) + +def skpkGen(): + #The point of this is in testing functions where you need some arbitrary public key to test against + sk = skGen() + return sk, MiniNero.scalarmultBase(sk) + + + +def keysBoth(): + print("This is for private testing purposes only, use at your own risk!") + print("this function will generate an address that is compatible both with the main client and with MyMonero") + print("shen noether- mrl") + print(" ") + while True: + print('.'), + sk = skGen() + + #s = "3c817618dcbfed122a64e592bb441d73300da9123686224a84e0eab1f075117e"; for testing + + vk = MiniNero.getViewMM(sk) #note this is the sc_reduced version.. + worked = 1 + #uncomment below lines to make viewkey a point.. + try: + MiniNero.toPoint(vk) + except: + worked =0 + print("bad vk") + + if vk == MiniNero.sc_reduce_key(vk) and worked == 1: #already reduced + break + print("found key") + print("secret spend key:", sk) + print("secret view key:", vk) + pk = MiniNero.publicFromSecret(sk) + print("public spend key:", pk) + pvk = MiniNero.publicFromSecret(vk) + print("public view key:", pvk) + addr = MiniNero.getAddrMM(sk) + print("receiving address", addr) + wl = mnemonic.mn_encode(sk) + cks = MiniNero.electrumChecksum(wl) + print(cks) + print("mnemonic:", wl + " " + cks) + return sk, vk, pk, pvk, addr, wl, cks + +if __name__ == "__main__": + keysBoth() diff --git a/source-code/MiniNero/RCTUnitTests.py b/source-code/MiniNero/RCTUnitTests.py new file mode 100644 index 0000000..d0377b4 --- /dev/null +++ b/source-code/MiniNero/RCTUnitTests.py @@ -0,0 +1,143 @@ +#!/usr/bin/python +import sys #for arguments +import MiniNero +import mnemonic +import PaperWallet +import Ecdh +import ASNL +import MLSAG +import MLSAG2 +import LLW_Sigs +import RingCT +import Crypto.Random.random as rand +import Translator +import binascii +import RingCT2 + +#Schnorr NonLinkable true one and false one +x, P1 = PaperWallet.skpkGen() +P2 = PaperWallet.pkGen() +P3 = PaperWallet.pkGen() + +L1, s1, s2 = ASNL.GenSchnorrNonLinkable(x, P1, P2, 0) + +print("Testing Schnorr Non-linkable!") +print("This one should verify!") +print(ASNL.VerSchnorrNonLinkable(P1, P2, L1, s1, s2)) +print("") +print("This one should NOT verify!") +print(ASNL.VerSchnorrNonLinkable(P1, P3, L1, s1, s2)) + +#ASNL true one, false one, C != sum Ci, and one out of the range.. + +print("\n\n\nTesting ASNL") +N = 10 +x = [None] * N +P1 = [None] * N +P2 = [None] * N +indi = [None] * N +for j in range(0, N): + indi[j] = rand.getrandbits(1) + x[j] = PaperWallet.skGen() + if indi[j] == 0: + P1[j] = MiniNero.scalarmultBase(x[j]) + P2[j] = PaperWallet.pkGen() + else: + P2[j] = MiniNero.scalarmultBase(x[j]) + P1[j] = PaperWallet.pkGen() +L1, s2, s = ASNL.GenASNL(x, P1, P2, indi) +#true one +print("This one should verify!") + +ASNL.VerASNL(P1, P2, L1, s2, s) +#false one +indi[3] = (indi[3] + 1) % 2 +print("") +print("This one should NOT verify!") +L1, s2, s = ASNL.GenASNL(x, P1, P2, indi) +ASNL.VerASNL(P1, P2, L1, s2, s) + +#MG sig: true one +print("\n\n\nTesting MG Sig: this one should verify!") +N = 3 #cols +R = 3 #rows +x = [None] * N #just used to generate test public keys +sk = [None]* R #vector of secret keys +P = [None]*N #stores the public keys + +ind = 2 +for j in range(0, N): + x[j] = [None] * R + P[j] = [None] * R + for i in range(0, R): + x[j][i] = PaperWallet.skGen() + P[j][i] = MiniNero.scalarmultBase(x[j][i]) +for j in range(0, R): + sk[j] = x[j][ind] + +print("x", x) +II, cc, ss = MLSAG.MLSAG_Sign(P, sk, ind) +print("Sig verified?", MLSAG.MLSAG_Ver(P, II, cc, ss) ) + + +#MG sig: false one +print("\n\nMG Sig: this one should NOT verify!") +N = 3 #cols +R = 3 #rows +x = [None]*N #just used to generate test public keys +sk = [None] * R #vector of secret keys +P = [None]*N #stores the public keys +ind = 2 +for j in range(0, N): + x[j] = [None] * R + P[j] = [None] * R + for i in range(0, R): + x[j][i] = PaperWallet.skGen() + P[j][i] = MiniNero.scalarmultBase(x[j][i]) + +for j in range(0, R): + sk[j] = x[j][ind] +sk[2] = PaperWallet.skGen() #assume we don't know one of the secret keys +print("x", x) +II, cc, ss = MLSAG.MLSAG_Sign(P, sk, ind) +print("Sig verified?", MLSAG.MLSAG_Ver(P, II, cc, ss) ) + + +#rct Sig: range proof true / false, sum Ci true / false, MG sig true / false, + + +print("\n\n\nTesting Ring CT") + +sc = [] +pc = [] + +sctmp, pctmp = RingCT2.ctskpkGen(60) +sc.append(sctmp) +pc.append(pctmp) + +sctmp, pctmp = RingCT2.ctskpkGen(70) +sc.append(sctmp) +pc.append(pctmp) + +#add output 500 +amounts = [] +amounts.append(5) +destinations = [] +Sk, Pk = PaperWallet.skpkGen() +destinations.append(Pk) + +#add output for 12500 +amounts.append(125); +Sk, Pk = PaperWallet.skpkGen() +destinations.append(Pk) + +s = RingCT2.genRct(sc, pc, destinations, amounts, 2) + +print("attempting to verify") +print(RingCT2.verRct(s)) + +#decode received amount +print("decode amounts working?") +print(RingCT2.decodeRct(s, Sk, 0)) +print("decode amounts working?") +print(RingCT2.decodeRct(s, Sk, 1)) diff --git a/source-code/MiniNero/RingCT.py b/source-code/MiniNero/RingCT.py new file mode 100644 index 0000000..cce28e9 --- /dev/null +++ b/source-code/MiniNero/RingCT.py @@ -0,0 +1,123 @@ +import MiniNero +import MLSAG +import LLW_Sigs +import PaperWallet +import AggregateSchnorr +import Ecdh +import Translator + +def getHForCT(): + return "8b655970153799af2aeadc9ff1add0ea6c7251d54154cfa92c173a0dd39c1f94" + A = MiniNero.publicFromInt(1) + H = MiniNero.hashToPoint_ct(A) + Translator.hexToC(H) + print(H) + return H + +def getH2ForCT(): + A = MiniNero.publicFromInt(1) + HPow2 = MiniNero.hashToPoint_ct(A) + two = MiniNero.intToHex(2) + H2 = [None] * 64 + for i in range(0, 64): + Translator.hexToCComma(HPow2) + H2[i] = HPow2 + HPow2 = MiniNero.scalarmultKey(HPow2, two) + return H2 + +def binary(n, digits): + b = [0] * digits + i = 0 + while n: + b[i] = n & 1 + i = i + 1 + n >>= 1 + return b + +#unused? (Maybe I was just using for testing..) +def dec(binArray): + s = 0 + i = 0 + for a in binArray: + s = s + a * 2 ** i + i+= 1 + return s + +def sumCi(Cis): + CSum = MiniNero.identity() + for i in Cis: + CSum = MiniNero.addKeys(CSum, i) + return CSum + +def sumCiExp(Cis, Exp): + #Cis is a vector + #Exp is a vector + CSum = MiniNero.identity() + for i in range(0, len(Cis)): + CSum = MiniNero.addKeys(CSum, MiniNero.scalarmultKey(Cis[i], MiniNero.intToHex(10 ** Exp[i]))) + return CSum + + +def genRangeProof(b, digits): + bb = binary(b, digits) #gives binary form of bb in "digits" binary digits + print("b, b in binary", b, bb) + ai = [None] * len(bb) + Ci = [None] * len(bb) + CiH = [None] * len(bb) #this is like Ci - 2^i H + a = MiniNero.intToHex(0) + ii = [None] * len(bb) + indi = [None] * len(bb) + for i in range(0, len(bb)): + ai[i] = PaperWallet.skGen() + a = MiniNero.addScalars(a, ai[i]) #creating the total mask since you have to pass this to receiver... + Ci[i] = MiniNero.addKeys(MiniNero.scalarmultBase(ai[i]), MiniNero.scalarmultKey(getHForCT(), MiniNero.intToHex(bb[i] * 2 ** i))) + CiH[i] = MiniNero.subKeys(Ci[i], MiniNero.scalarmultKey(getHForCT(), MiniNero.intToHex(2 ** i))) + L1, s2, s = AggregateSchnorr.GenASNL(ai, Ci, CiH, bb) + return sumCi(Ci), Ci, L1, s2, s, a + +def verRangeProof(Ci, L1, s2, s): + n = len(Ci) #note there will be some fixed length eventually so you can't just get the top digit + CiH = [None] * n + for i in range(0, n): + CiH[i] = MiniNero.subKeys(Ci[i], MiniNero.scalarmultKey(getHForCT(), MiniNero.intToHex(2 ** i))) + return AggregateSchnorr.VerASNL(Ci, CiH, L1, s2, s) + +def ComputeReceivedAmount(senderEphemPk, receiverSK, maskedMask, maskedAmount, Ci, exponent): + ss1, ss2 = ecdh.ecdhretrieve(receiverSK, senderEphemPk) + mask = MiniNero.sc_sub_keys(maskedMask, ss1) + CSum = sumCi(Ci) + bH = MiniNero.subKeys(CSum, MiniNero.scalarmultBase(mask)) #bH = C - aG + b = MiniNero.sc_sub_keys(maskedAmount, ss2) + print("received amount:", 10 ** exponent * MiniNero.hexToInt(b)) + H = getHForCT() + bHTent = MiniNero.scalarmultKey(H, b) + print(bHTent,"=?", bH) + if bHTent != bH: + print("wrong amount sent!") + return -1 + return 0 + +def genRCTSig(sk_x, sk_in, sk_out, Pk, CIn, COut, ExpIn, ExpOut, index): + #sk_x is private keys of addresses (vector) + #sk_in is masks of input commitments (vector) + #sk_out is masks of output commitments (vector) + #Pk is public key list (2d array) + #CIn is input commitments (2d array) + #COut is output commitments (vector) + #ExpIn is exponents for the input commitments (2d array) + #so each row of this is going to correspond to a column in the actual mlsag.. + #ExpOut is exponents for the output commitments + #index is the secret index + sk = sk_x[:] + sk.append(MiniNero.sc_sub_keys(MiniNero.sc_add(sk_in, ExpIn[index]), MiniNero.sc_add(sk_out, ExpOut))) + CRow = [None] * len(CIn) #commitments row of public keys Cin - Cout + COutSum = sumCiExp(COut, ExpOut) #Cout1*10^i_1 + Cout2 * 10^{i_2}.. + tmp = MiniNero.identity() + pk = [None] * (len(sk_x) + 1) #generalize later... + pk[0] = Pk + for i in range(0, len(CIn)): + CRow[i] = MiniNero.subKeys(sumCiExp(CIn[i], ExpIn[i]), COutSum) + pk[1] = CRow + II, cc, ssVal = MLSAG.MLSAG_Sign(pk, sk, index) + return pk, II, cc, ssVal + diff --git a/source-code/MiniNero/RingCT0.1.hash b/source-code/MiniNero/RingCT0.1.hash new file mode 100644 index 0000000..c019e22 Binary files /dev/null and b/source-code/MiniNero/RingCT0.1.hash differ diff --git a/source-code/MiniNero/RingCT0.1_copy.pdf b/source-code/MiniNero/RingCT0.1_copy.pdf new file mode 100644 index 0000000..880286c Binary files /dev/null and b/source-code/MiniNero/RingCT0.1_copy.pdf differ diff --git a/source-code/MiniNero/RingCT0.2.hash b/source-code/MiniNero/RingCT0.2.hash new file mode 100644 index 0000000..4f87cc4 --- /dev/null +++ b/source-code/MiniNero/RingCT0.2.hash @@ -0,0 +1,5 @@ +724 +0 +('checksum', '`\xb1w\xce') +1FpHkeBrkjffXd37y7bwa7gBJDUnvSrkS1 +https://blockchain.info/address/1FpHkeBrkjffXd37y7bwa7gBJDUnvSrkS1 diff --git a/source-code/MiniNero/RingCT0.2_copy.pdf b/source-code/MiniNero/RingCT0.2_copy.pdf new file mode 100644 index 0000000..13032df Binary files /dev/null and b/source-code/MiniNero/RingCT0.2_copy.pdf differ diff --git a/source-code/MiniNero/RingCT0.3.hash b/source-code/MiniNero/RingCT0.3.hash new file mode 100644 index 0000000..9a53ec3 --- /dev/null +++ b/source-code/MiniNero/RingCT0.3.hash @@ -0,0 +1,6 @@ +943 +0 +('checksum', 'E\xc1Lg') +1N8g2cVBnZvq7GrfvTrmWTqXwPQZhAghf4 +https://blockchain.info/address/1N8g2cVBnZvq7GrfvTrmWTqXwPQZhAghf4 +Created new window in existing browser session. diff --git a/source-code/MiniNero/RingCT0.3.pdf b/source-code/MiniNero/RingCT0.3.pdf new file mode 100644 index 0000000..6310b4f Binary files /dev/null and b/source-code/MiniNero/RingCT0.3.pdf differ diff --git a/source-code/MiniNero/RingCT0.4.hash b/source-code/MiniNero/RingCT0.4.hash new file mode 100644 index 0000000..3d364c1 --- /dev/null +++ b/source-code/MiniNero/RingCT0.4.hash @@ -0,0 +1,5 @@ +811 +0 +('checksum', '\x9e\xb9\xce\xc4') +12ioqmWrLT5rjH3eDcgra2Bog6AfXDd83u +https://blockchain.info/address/12ioqmWrLT5rjH3eDcgra2Bog6AfXDd83u diff --git a/source-code/MiniNero/RingCT0.4_copy.pdf b/source-code/MiniNero/RingCT0.4_copy.pdf new file mode 100644 index 0000000..b1b3e78 Binary files /dev/null and b/source-code/MiniNero/RingCT0.4_copy.pdf differ diff --git a/source-code/MiniNero/RingCT0.5_copy.pdf b/source-code/MiniNero/RingCT0.5_copy.pdf new file mode 100644 index 0000000..6f427fe Binary files /dev/null and b/source-code/MiniNero/RingCT0.5_copy.pdf differ diff --git a/source-code/MiniNero/RingCT2.py b/source-code/MiniNero/RingCT2.py new file mode 100644 index 0000000..bbeb46e --- /dev/null +++ b/source-code/MiniNero/RingCT2.py @@ -0,0 +1,331 @@ +import MiniNero +import MLSAG2 +import PaperWallet +import AggregateSchnorr +import Ecdh +import Crypto.Random.random as rand + +#set 8 atoms, since python is super slow on my laptop - normally this is 64 (note these range sigs are going pretty fast in the c++ version) +ATOMS = 8 + +#implementing some types +class ctkey(object): + __slots__ = ['dest', 'mask'] + +def ctkeyV(rows): + return [ctkey() for i in range(0, rows)] + +class ecdhTuple(object): + __slots__ = ['mask', 'amount','senderPk'] + +class asnlSig(object): + __slots__ = ['L1', 's2','s'] + +class mgSig(object): + __slots__ = ['ss', 'cc','II'] + +class rangeSig(object): + __slots__ = ['asig', 'Ci'] + +class rctSig(object): + __slots__ = ['rangeSigs', 'MG', 'mixRing', 'ecdhInfo','outPk'] + +def ctskpkGen(amount): + sk = ctkey() + pk = ctkey() + sk.dest, pk.dest = PaperWallet.skpkGen() + sk.mask, pk.mask = PaperWallet.skpkGen() + am = MiniNero.intToHex(amount) + aH = MiniNero.scalarmultKey(getHForCT(), am) + pk.mask = MiniNero.addKeys(pk.mask, aH) + return sk, pk + +def getHForCT(): + return "8b655970153799af2aeadc9ff1add0ea6c7251d54154cfa92c173a0dd39c1f94" + A = MiniNero.publicFromInt(1) + H = MiniNero.hashToPoint_ct(A) + Translator.hexToC(H) + print(H) + return H + +def getH2ForCT(): + A = MiniNero.publicFromInt(1) + HPow2 = MiniNero.hashToPoint_ct(A) + two = MiniNero.intToHex(2) + H2 = [None] * ATOMS + for i in range(0, ATOMS): + #Translator.hexToCComma(HPow2) + H2[i] = HPow2 + HPow2 = MiniNero.scalarmultKey(HPow2, two) + return H2 + +def d2b(n, digits): + b = [0] * digits + i = 0 + while n: + b[i] = n & 1 + i = i + 1 + n >>= 1 + return b + +def b2d(binArray): + s = 0 + i = 0 + for a in binArray: + s = s + a * 2 ** i + i+= 1 + return s + +def sumCi(Cis): + CSum = MiniNero.identity() + for i in Cis: + CSum = MiniNero.addKeys(CSum, i) + return CSum + + #proveRange and verRange + #proveRange gives C, and mask such that \sumCi = C + # c.f. http:#eprint.iacr.org/2015/1098 section 5.1 + # and Ci is a commitment to either 0 or 2^i, i=0,...,63 + # thus this proves that "amount" is in [0, 2^ATOMS] + # mask is a such that C = aG + bH, and b = amount + #verRange verifies that \sum Ci = C and that each Ci is a commitment to 0 or 2^i + #"prove" returns a rangeSig (list) containing a list [L1, s2, s] and a key64 list [C0, C1, ..., C64] of keys, it also returns C = sum(Ci) and mask, which in the c++ version are returned by reference + #inputs key C, key mask, number amount + #"ver" returns true or false, and inputs a key, and a rangesig list "as" +def proveRange(amount): + bb = d2b(amount, ATOMS) #gives binary form of bb in "digits" binary digits + print("amount, amount in binary", amount, bb) + ai = [None] * len(bb) + Ci = [None] * len(bb) + CiH = [None] * len(bb) #this is like Ci - 2^i H + H2 = getH2ForCT() + a = MiniNero.sc_0() + ii = [None] * len(bb) + indi = [None] * len(bb) + for i in range(0, ATOMS): + ai[i] = PaperWallet.skGen() + a = MiniNero.addScalars(a, ai[i]) #creating the total mask since you have to pass this to receiver... + if bb[i] == 0: + Ci[i] = MiniNero.scalarmultBase(ai[i]) + if bb[i] == 1: + Ci[i] = MiniNero.addKeys(MiniNero.scalarmultBase(ai[i]), H2[i]) + CiH[i] = MiniNero.subKeys(Ci[i], H2[i]) + + A = asnlSig() + A.L1, A.s2, A.s = AggregateSchnorr.GenASNL(ai, Ci, CiH, bb) + + R = rangeSig() + R.asig = A + R.Ci = Ci + + mask = a + C = sumCi(Ci) + return C, mask, R + +def verRange(Ci, ags): + n = ATOMS + CiH = [None] * n + H2 = getH2ForCT() + for i in range(0, n): + CiH[i] = MiniNero.subKeys(ags.Ci[i], H2[i]) + return AggregateSchnorr.VerASNL(ags.Ci, CiH, ags.asig.L1, ags.asig.s2, ags.asig.s) + +#Ring-ct MG sigs +#Prove: +# c.f. http:#eprint.iacr.org/2015/1098 section 4. definition 10. +# This does the MG sig on the "dest" part of the given key matrix, and +# the last row is the sum of input commitments from that column - sum output commitments +# this shows that sum inputs = sum outputs +#Ver: +# verifies the above sig is created corretly +def proveRctMG(pubs, inSk, outSk, outPk, index): + #pubs is a matrix of ctkeys [P, C] + #inSk is the keyvector of [x, mask] secret keys + #outMasks is a keyvector of masks for outputs + #outPk is a list of output ctkeys [P, C] + #index is secret index of where you are signing (integer) + #returns a list (mgsig) [ss, cc, II] where ss is keymatrix, cc is key, II is keyVector of keyimages + + #so we are calling MLSAG2.MLSAG_Gen from here, we need a keymatrix made from pubs + #we also need a keyvector made from inSk + rows = len(pubs[0]) + cols = len(pubs) + print("rows in mg", rows) + print("cols in mg", cols) + M = MLSAG2.keyMatrix(rows + 1, cols) #just a simple way to initialize a keymatrix, doesn't need to be random.. + sk = MLSAG2.keyVector(rows + 1) + + for j in range(0, cols): + M[j][rows] = MiniNero.identity() + sk[rows] = MiniNero.sc_0() + for i in range(0, rows): + sk[i] = inSk[i].dest #get the destination part + sk[rows] = MiniNero.sc_add_keys(sk[rows], inSk[i].mask) #add commitment part + for j in range(0, cols): + M[j][i] = pubs[j][i].dest # get the destination part + M[j][rows] = MiniNero.addKeys(M[j][rows], pubs[j][i].mask) #add commitment part + #next need to subtract the commitment part of all outputs.. + for j in range(0, len(outSk)): + sk[rows] = MiniNero.sc_sub_keys(sk[rows], outSk[j].mask) + for i in range(0, len(outPk)): + M[j][rows] = MiniNero.subKeys(M[j][rows], outPk[i].mask) # subtract commitment part + MG = mgSig() + MG.II, MG.cc, MG.ss = MLSAG2.MLSAG_Gen(M, sk, index) + + return MG #mgSig + +def verRctMG(MG, pubs, outPk): + #mg is an mgsig (list [ss, cc, II] of keymatrix ss, keyvector II and key cc] + #pubs is a matrix of ctkeys [P, C] + #outPk is a list of output ctkeys [P, C] for the transaction + #returns true or false + rows = len(pubs[0]) + cols = len(pubs) + M = MLSAG2.keyMatrix(rows + 1, cols) #just a simple way to initialize a keymatrix, doesn't need to be random.. + for j in range(0, cols): + M[j][rows] = MiniNero.identity() + for i in range(0, rows): + for j in range(0, cols): + M[j][i] = pubs[j][i].dest # get the destination part + M[j][rows] = MiniNero.addKeys(M[j][rows], pubs[j][i].mask) #add commitment part + #next need to subtract the commitment part of all outputs.. + for j in range(0, cols): + for i in range(0, len(outPk)): + M[j][rows] = MiniNero.subKeys(M[j][rows], outPk[i].mask) # subtract commitment part + return MLSAG2.MLSAG_Ver(M, MG.II, MG.cc, MG.ss) + +#These functions get keys from blockchain +#replace these when connecting blockchain +#getKeyFromBlockchain grabs a key from the blockchain at "reference_index" to mix with +#populateFromBlockchain creates a keymatrix with "mixin" columns and one of the columns is inPk +# the return value are the key matrix, and the index where inPk was put (random). +def getKeyFromBlockchain(reference_index): + #returns a ctkey a (randomly) + rv = ctkey() + rv.dest = PaperWallet.pkGen() + rv.mask = PaperWallet.pkGen() + return rv + +def populateFromBlockchain(inPk, mixin): + #returns a ckKeyMatrix with your public input keys at "index" which is the second returned parameter. + #the returned ctkeyMatrix will have number of columns = mixin + rv = [None] * mixin + index = rand.getrandbits(mixin - 1) + blockchainsize = 10000 + for j in range(0, mixin): + if j != index: + rv[j] = [getKeyFromBlockchain(rand.getrandbits(blockchainsize)) for i in range(0, len(inPk))] + else: + rv[j] = inPk + return rv, index + + + +#Elliptic Curve Diffie Helman: encodes and decodes the amount b and mask a +# where C= aG + bH +def ecdhEncode(unmasked, receiverPk): + rv = ecdhTuple() + #compute shared secret + esk, rv.senderPk = PaperWallet.skpkGen() + sharedSec1 = MiniNero.cn_fast_hash(MiniNero.scalarmultKey(receiverPk, esk)); + sharedSec2 = MiniNero.cn_fast_hash(sharedSec1) + #encode + rv.mask = MiniNero.sc_add_keys(unmasked.mask, sharedSec1) + rv.amount = MiniNero.sc_add_keys(unmasked.amount, sharedSec1) + return rv + +def ecdhDecode(masked, receiverSk): + rv = ecdhTuple() + #compute shared secret + sharedSec1 = MiniNero.cn_fast_hash(MiniNero.scalarmultKey(masked.senderPk, receiverSk)) + sharedSec2 = MiniNero.cn_fast_hash(sharedSec1) + #encode + rv.mask = MiniNero.sc_sub_keys(masked.mask, sharedSec1) + rv.amount = MiniNero.sc_sub_keys(masked.amount, sharedSec1) + return rv + +#RingCT protocol +#genRct: +# creates an rctSig with all data necessary to verify the rangeProofs and that the signer owns one of the +# columns that are claimed as inputs, and that the sum of inputs = sum of outputs. +# Also contains masked "amount" and "mask" so the receiver can see how much they received +#verRct: +# verifies that all signatures (rangeProogs, MG sig, sum inputs = outputs) are correct +#decodeRct: (c.f. http:#eprint.iacr.org/2015/1098 section 5.1.1) +# uses the attached ecdh info to find the amounts represented by each output commitment +# must know the destination private key to find the correct amount, else will return a random number + +def genRct(inSk, inPk, destinations, amounts, mixin): + #inputs: + #inSk is signers secret ctkeyvector + #inPk is signers public ctkeyvector + #destinations is a keyvector of output addresses + #amounts is a list of amounts corresponding to above output addresses + #mixin is an integer which is the desired mixin + #outputs: + #rctSig is a list [ rangesigs, MG, mixRing, ecdhInfo, outPk] + #rangesigs is a list of one rangeproof for each output + #MG is the mgsig [ss, cc, II] + #mixRing is a ctkeyMatrix + #ecdhInfo is a list of masks / amounts for each output + #outPk is a vector of ctkeys (since we have computed the commitment for each amount) + rv = rctSig() + rv.outPk = ctkeyV( len(destinations)) + rv.rangeSigs = [None] * len(destinations) + outSk = ctkeyV(len(destinations)) + rv.ecdhInfo = [None] * len(destinations) + for i in range(0, len(destinations)): + rv.ecdhInfo[i] = ecdhTuple() + rv.outPk[i] = ctkey() + rv.outPk[i].dest = destinations[i] + rv.outPk[i].mask, outSk[i].mask, rv.rangeSigs[i] = proveRange(amounts[i]) + #do ecdhinfo encode / decode + rv.ecdhInfo[i].mask = outSk[i].mask + rv.ecdhInfo[i].amount = MiniNero.intToHex(amounts[i]) + rv.ecdhInfo[i] = ecdhEncode(rv.ecdhInfo[i], destinations[i]) + rv.mixRing, index = populateFromBlockchain(inPk, mixin) + rv.MG = proveRctMG(rv.mixRing, inSk, outSk, rv.outPk, index) + return rv + +def verRct(rv): + #inputs: + #rv is a list [rangesigs, MG, mixRing, ecdhInfo, outPk] + #rangesigs is a list of one rangeproof for each output + #MG is the mgsig [ss, cc, II] + #mixRing is a ctkeyMatrix + #ecdhInfo is a list of masks / amounts for each output + #outPk is a vector of ctkeys (since we have computed the commitment for each amount) + #outputs: + #true or false + rvb = True + tmp = True + for i in range(0, len(rv.outPk)): + tmp = verRange(rv.outPk[i].mask, rv.rangeSigs[i]) + print(tmp) + rvb = rvb and tmp + mgVerd = verRctMG(rv.MG, rv.mixRing, rv.outPk) + print(mgVerd) + return (rvb and mgVerd) + +def decodeRct(rv, sk, i): + #inputs: + #rctSig is a list [ rangesigs, MG, mixRing, ecdhInfo, outPk] + #rangesigs is a list of one rangeproof for each output + #MG is the mgsig [ss, cc, II] + #mixRing is a ctkeyMatrix + #ecdhInfo is a list of masks / amounts for each output + #outPk is a vector of ctkeys (since we have computed the commitment for each amount) + #sk is the secret key of the receiver + #i is the index of the receiver in the rctSig (in case of multiple destinations) + #outputs: + #the amount received + decodedTuple = ecdhDecode(rv.ecdhInfo[i], sk) + mask = decodedTuple.mask + amount = decodedTuple.amount + C = rv.outPk[i].mask + H = getHForCT() + Ctmp = MiniNero.addKeys(MiniNero.scalarmultBase(mask), MiniNero.scalarmultKey(H, amount)) + if (MiniNero.subKeys(C, Ctmp) != MiniNero.identity()): + print("warning, amount decoded incorrectly, will be unable to spend") + return MiniNero.hexToInt(amount) + diff --git a/source-code/MiniNero/RingCTExampleOutput.txt b/source-code/MiniNero/RingCTExampleOutput.txt new file mode 100644 index 0000000..e598dd3 --- /dev/null +++ b/source-code/MiniNero/RingCTExampleOutput.txt @@ -0,0 +1,23 @@ +('H', '61fe7f0f5a607a33427d01dd1fded5ffa03fae2e9df9ebccf2e0a2f5bd77a204') +inputs +('b, b in binary', 10000, [0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 1]) +Generating Aggregate Schnorr Non-linkable Ring Signature +outputs +('b, b in binary', 7000, [0, 0, 0, 1, 1, 0, 1, 0, 1, 1, 0, 1, 1, 0]) +Generating Aggregate Schnorr Non-linkable Ring Signature +('b, b in binary', 3000, [0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 0, 0]) +Generating Aggregate Schnorr Non-linkable Ring Signature +verifying range proofs of outputs +Verifying Aggregate Schnorr Non-linkable Ring Signature +Verified +Verifying Aggregate Schnorr Non-linkable Ring Signature +Verified +('Generating MLSAG sig of dimensions ', 2, 'x ', 2) +('verifying MLSAG sig of dimensions ', 2, 'x ', 2) +('c', ['80a3cfd06dd2862307cd75c2a1566f20cd743dbb0b9feb22d79dcbecb9023f42', 'a9b7342ba7bf2f102505ca19dab734fde638916c0a29f5b30e49833ab51393ea', '80a3cfd06dd2862307cd75c2a1566f20cd743dbb0b9feb22d79dcbecb9023f42']) +('sig verifies?', True) +('Sig verified?', True) +Finding received amount corresponding to Cib +('received ', 7000, 'a488ec68732fb551841c2c6dcc7ffac895d98ec7e9378275ed20ea12805fc18e') +Finding received amount corresponding to Cic +('received ', 3000, '1b46626858e130a0f3884c74c9fdeabc4d812c519103ea16a35a3f82a3d0ed6d') diff --git a/source-code/MiniNero/RingMultisigv1.py b/source-code/MiniNero/RingMultisigv1.py new file mode 100644 index 0000000..7fa2dc6 --- /dev/null +++ b/source-code/MiniNero/RingMultisigv1.py @@ -0,0 +1,8 @@ +import MiniNero +import MLSAG2 +import PaperWallet +import AggregateSchnorr +import Ecdh +import Crypto.Random.random as rand + +#def Initiate(skIn, pkIn, pkOut, diff --git a/source-code/MiniNero/SimpleBitmonerodTest.py b/source-code/MiniNero/SimpleBitmonerodTest.py new file mode 100644 index 0000000..ac8f9a8 --- /dev/null +++ b/source-code/MiniNero/SimpleBitmonerodTest.py @@ -0,0 +1,17 @@ +import MiniNero +import ed25519 +import binascii +import PaperWallet +import cherrypy +import os +import time +import bitmonerod +import SimpleXMR2 + + +xmr_addr = "44TVPcCSHebEQp4LnapPkhb2pondb2Ed7GJJLc6TkKwtSyumUnQ6QzkCCkojZycH2MRfLcujCM7QR1gdnRULRraV4UpB5n4" +xmr_amount = "0.25" +xmr_pid = "d8dd8f42cb13f26dbbf86d2d1da061628cdd17781be95e58a21c845465a2c7f6" + +bitmonerod.send(xmr_addr, float(xmr_amount), xmr_pid, 3) + diff --git a/source-code/MiniNero/SimpleGetTime.py b/source-code/MiniNero/SimpleGetTime.py new file mode 100644 index 0000000..8349c25 --- /dev/null +++ b/source-code/MiniNero/SimpleGetTime.py @@ -0,0 +1,35 @@ +import MiniNero +import os +import ed25519 +import binascii +import PaperWallet + +import json, hmac, hashlib, time, requests + + + +def HexSigningPubKey(s): + return binascii.hexlify(ed25519.publickey(ed25519.encodeint(MiniNero.hexToInt(s)))) + +def Signature(m, sk): + sk2 = ed25519.encodeint(MiniNero.hexToInt(sk)) + pk = ed25519.publickey(sk2) + return binascii.hexlify(ed25519.signature(m, sk2, pk)) + +def Verify(sig, m, pk): + return ed25519.checkvalid(binascii.unhexlify(sig), m, binascii.unhexlify(pk)) + +#get saved access pubkey +from MiniNeroPubKey import * +pubkey = MiniNeroPk + +#ip = raw_input('ip of your server\n') +ip = '192.168.2.112:8080' #hopefully you save this in your app... +ip = '192.168.137.235:8080' +ip = raw_input('your ip?\n') +ip = ip + ':8080' +#sec = raw_input('you secret key?\n') +timestamp = str(int(time.time())) +r = requests.get("http://"+ip +'/api/mininero/') +print r.text +print("your time - server time is:", int(time.time()) - int(r.text)) diff --git a/source-code/MiniNero/SimpleRequester.py b/source-code/MiniNero/SimpleRequester.py new file mode 100644 index 0000000..3b7d1d4 --- /dev/null +++ b/source-code/MiniNero/SimpleRequester.py @@ -0,0 +1,57 @@ +import MiniNero +import os +import ed25519 +import binascii +import PaperWallet + +import json, hmac, hashlib, time, requests + + + +def HexSigningPubKey(s): + return binascii.hexlify(ed25519.publickey(ed25519.encodeint(MiniNero.hexToInt(s)))) + +def Signature(m, sk): + sk2 = ed25519.encodeint(MiniNero.hexToInt(sk)) + pk = ed25519.publickey(sk2) + return binascii.hexlify(ed25519.signature(m, sk2, pk)) + +def Verify(sig, m, pk): + return ed25519.checkvalid(binascii.unhexlify(sig), m, binascii.unhexlify(pk)) + +def offset(ip): + timestamp = str(int(time.time())) + r = requests.get("http://"+ip +'/api/mininero/') + print r.text + print("your time - server time is:", int(time.time()) - int(r.text)) + return int(time.time()) - int(r.text) + +#get saved access pubkey +from MiniNeroPubKey import * +pubkey = MiniNeroPk + +#ip = raw_input('ip of your server\n') +ip = '192.168.2.112:8080' #hopefully you save this in your app... +ip = '192.168.137.235:8080' +ip = raw_input('your ip?\n') +ip = ip + ':8080' +sec = raw_input('you secret key?\n') + +timestamp = str(int(time.time()) - offset(ip)) +Type = "send" +amount = "0.1" +destination="1em2WCg9QKxRxbo6S3xKF2K4UDvdu6hMc" #just a random one, I think it's the hash of mininero.py + +#this should be base 64... +message = Type+amount.replace('.', 'd')+timestamp+destination +sig = Signature(message, sec) +tx = { + 'Type': Type, + 'timestamp' : timestamp, + 'destination': destination, + 'signature': sig, + 'amount': amount, +} +#print("curl -d Type='"+Type+"' -d signature='"+sig+"' -d timestamp='"+timestamp+"' -d destination='"+destination+"' -d amount='"+amount+"' -X POST '"+ip+"/api/mininero/'") +r = requests.post("http://"+ip +'/api/mininero/', data=tx) +print r.text diff --git a/source-code/MiniNero/SimpleServer.py b/source-code/MiniNero/SimpleServer.py new file mode 100644 index 0000000..ccb426c --- /dev/null +++ b/source-code/MiniNero/SimpleServer.py @@ -0,0 +1,88 @@ +import MiniNero +import ed25519 +import binascii +import PaperWallet +import cherrypy +import os +import time +import bitmonerod +import SimpleXMR2 + +def HexSigningPubKey(s): + return binascii.hexlify(ed25519.publickey(ed25519.encodeint(MiniNero.hexToInt(s)))) + +def Signature(m, sk): + #note this seems to return nicely sized version of the signature + #contrast with, i.e. tweetnacl.. + sk2 = ed25519.encodeint(MiniNero.hexToInt(sk)) + pk = ed25519.publickey(sk2) + return binascii.hexlify(ed25519.signature(m, sk2, pk)) + +def Verify(sig, m, pk): + return ed25519.checkvalid(binascii.unhexlify(sig), m, binascii.unhexlify(pk)) + +class MiniNeroServer: + + exposed = True + + def GET(self, id=None): + times = str(int(time.time())) + return (times) + + def POST(self, signature, Type, timestamp, amount=None, destination=None, pid=None, mixin=None): + times= int(time.time()) + pubkey = MiniNeroPk + message = Type+amount.replace('.', 'd')+timestamp+destination + ver = Verify(signature.encode("utf8"), message.encode("utf8"), pubkey) + if abs(times - int(timestamp)) > 30: + ver = False + return ('fail based on timestamp too old') + + if Type == 'address': + if (ver): + print("do rpc call") + #bitmonerod.myAddress() + return ("Your Address is ") + if Type == 'balance': + if (ver): + print("do rpc call") + #bitmonerod.myAddress() + return ('your balance is ??') + if Type == 'send': + if (ver) : + #create xmr2 order async, return uuid + uuid, xmr_amount, xmr_addr, xmr_pid = SimpleXMR2.btc2xmr(destination, amount) + bitmonerod.send(xmr_addr, float(xmr_amount), xmr_pid, 3) + return ('order uuid: '+uuid) + + +if __name__ == '__main__': + + #check if api pubkey is created, if not create it: + if(os.path.isfile('MiniNeroPubKey.py')): + from MiniNeroPubKey import * + try: + MiniNeroPk + except NameError: + MiniNeroSk= PaperWallet.skGen() + MiniNeroPk= HexSigningPubKey(MiniNeroSk) + print("Your new api secret key is:") + print(MiniNeroSk) + print("You should save this in a password manager") + print("Your pubkey will be stored in MiniNeroPubKey.py") + f = open('MiniNeroPubKey.py', 'w') + f.write("MiniNeroPk = \'"+MiniNeroPk+"\'") + print("Your MiniNeroServer PubKey is:") + print(MiniNeroPk) + + #Launch Cherry Server + cherrypy.tree.mount( + MiniNeroServer(), '/api/mininero', + {'/': + {'request.dispatch': cherrypy.dispatch.MethodDispatcher()} + } + ) + + cherrypy.server.socket_host = '0.0.0.0' #run on metal + cherrypy.engine.start() + cherrypy.engine.block() diff --git a/source-code/MiniNero/SimpleSign.py b/source-code/MiniNero/SimpleSign.py new file mode 100644 index 0000000..1d6e65b --- /dev/null +++ b/source-code/MiniNero/SimpleSign.py @@ -0,0 +1,16 @@ +import MiniNero +import ed25519 +import binascii +import PaperWallet +import cherrypy +import os +import time +import bitmonerod +import SimpleXMR2 +import SimpleServer + +message = "send0d000114545737471em2WCg9QKxRxbo6S3xKF2K4UDvdu6hMc" +message = "send0d0114545747771em2WCg9QKxRxbo6S3xKF2K4UDvdu6hMc" +sec = raw_input("sec?") +print(SimpleServer.Signature(message, sec)) + diff --git a/source-code/MiniNero/SimpleWallet.py b/source-code/MiniNero/SimpleWallet.py new file mode 100644 index 0000000..f16536f --- /dev/null +++ b/source-code/MiniNero/SimpleWallet.py @@ -0,0 +1,3 @@ +import os +sec = raw_input("wallet pass?") +os.system(" ~/bitmonero/build/release/bin/simplewallet --wallet-file ~/wallet/testwallet1 --password "+sec+" --rpc-bind-port 18082") diff --git a/source-code/MiniNero/SimpleXMR2.py b/source-code/MiniNero/SimpleXMR2.py new file mode 100644 index 0000000..d468ec3 --- /dev/null +++ b/source-code/MiniNero/SimpleXMR2.py @@ -0,0 +1,48 @@ +import MiniNero +import os +import ed25519 +import binascii +import PaperWallet + +import json, hmac, hashlib, time, requests + +#gets xmr address, xmr amount, and pid for xmr2 order +#inputs are btc destination, and amount in btc +#also will return the order id, so you can track the order +def btc2xmr(dest, amount): + #First create the order.. + url = 'https://xmr.to/api/v1/xmr2btc/order_create/' + payload = {'btc_dest_address' : dest, 'btc_amount' : amount} + headers = {'content-type': 'application/json'} + r = requests.post(url, data=json.dumps(payload), headers=headers) + data = json.loads(r.content) + uuid = data['uuid'] + print("uuid=", uuid) + + #wait a few seconds + print("waiting a few seconds for order to be created") + for i in range(0, 5): + print(".") + time.sleep(1) + + #get amount, address, pid + ipStatus = 'https://xmr.to/api/v1/xmr2btc/order_status_query/' + dat = { + 'uuid' : uuid + } + r2 = requests.post(ipStatus, data=json.dumps(dat), headers = headers) + #print(r2.text) + data2 = json.loads(r2.content) + xmr_amount = data2['xmr_required_amount'] + xmr_addr = data2['xmr_receiving_address'] + xmr_pid = data2['xmr_required_payment_id'] + print("send ", str(xmr_amount), " xmr to", xmr_addr, "with pid", xmr_pid) + return uuid, xmr_amount, xmr_addr, xmr_pid + + + +#dest = "1em2WCg9QKxRxbo6S3xKF2K4UDvdu6hMc" #your dest address here +#amount = "0.1" #your amount here... + +#uuid, xmr_amount, xmr_addr, xmr_pid = btc2xmr(dest, amount) + diff --git a/source-code/MiniNero/TacoTimeExample.py b/source-code/MiniNero/TacoTimeExample.py new file mode 100644 index 0000000..192ee7d --- /dev/null +++ b/source-code/MiniNero/TacoTimeExample.py @@ -0,0 +1,22 @@ +q = 2**255 - 19 +l = 2**252 + 27742317777372353535851937790883648493 +import MiniNero +import PaperWallet + +a = 3655169758690262480859172686034352748701568204867449275194046101565641063400 +b = 2196281112309589493539510630657048805544016132079821556435431458072258858680 +c = 1680308020000391016811131033972168547846809685867129675902005632340344199616 +d = 3102886190919558838979092227453570755967767872654511102581747930112259050736 +e = a + b + c + d +print(e, e % l) +pk = MiniNero.publicFromSecret(MiniNero.intToHex(e)) +pka = MiniNero.publicFromSecret(MiniNero.intToHex(a)) +pkb = MiniNero.publicFromSecret(MiniNero.intToHex(b)) +pkc = MiniNero.publicFromSecret(MiniNero.intToHex(c)) +pkd = MiniNero.publicFromSecret(MiniNero.intToHex(d)) +A = MiniNero.addKeys(pka, pkb) +B = MiniNero.addKeys(A, pkc) +C = MiniNero.addKeys(B, pkd) +print(C) +print(pk) + diff --git a/source-code/MiniNero/TactoTimeKeyChains.py b/source-code/MiniNero/TactoTimeKeyChains.py new file mode 100644 index 0000000..b442920 --- /dev/null +++ b/source-code/MiniNero/TactoTimeKeyChains.py @@ -0,0 +1,19 @@ +#you += hash(pubkey || index) to both the private scalar and public point +# [02:35:38] so to get priv_i and pub_i +# [02:36:06] priv_i = (priv + hash) mod N +# [02:37:17] pub_i = (pub + scalarbasemult(hash)) +import MiniNero +import PaperWallet + +sk, vk, pk, pvk, addr, wl, cks = PaperWallet.keysBoth() + +print("making keychain") +for i in range(1, 600): + index = MiniNero.intToHex(i) + has = MiniNero.cn_fast_hash(pk + index) + sk1 = MiniNero.sc_add_keys(sk, has) + pk1 = MiniNero.addKeys(pk, MiniNero.scalarmultBase(has)) + pk1_check = MiniNero.publicFromSecret(sk1) + print("Check", pk1== pk1_check) + print(sk1) + #print("i, sk, pk", i, sk1, pk1) diff --git a/source-code/MiniNero/Test.py b/source-code/MiniNero/Test.py new file mode 100644 index 0000000..3b50cd4 --- /dev/null +++ b/source-code/MiniNero/Test.py @@ -0,0 +1,377 @@ +#!/usr/bin/python +import sys #for arguments +import MiniNero +import mnemonic +import PaperWallet +import Ecdh +import ASNL +import MLSAG +import MLSAG2 +import LLW_Sigs +import RingCT +import Crypto.Random.random as rand +import Translator +import binascii + + +b = 256 +q = 2**255 - 19 +l = 2**252 + 27742317777372353535851937790883648493 + + +if len(sys.argv) >= 2: + if sys.argv[1] == "id": + Translator.hexToC(MiniNero.identity()) + + if sys.argv[1] == "smult": + a= "87a61352d86f5cb0e9d227542b6b4870b9a327d082d15ea64e0494b9a896c1ac" + aG = MiniNero.scalarmultBase(a) + print(aG) + print(MiniNero.scalarmultKey(aG, a)) + if sys.argv[1] == "add": + #once it's good + A = PaperWallet.pkGen() + A = "75819750158570adc58ad6f932c3704661d6cd8eafd3a14818293a17790fbf71" + B = PaperWallet.pkGen() + B = "5fbc56c82c6e40596c673e301b63e100f08b97723ead425ed38f2b55c7a6454f" + AB = MiniNero.addKeys(A, B) + Translator.hexToC(A) + Translator.hexToC(B) + print(AB) + AAB = MiniNero.addKeys(AB, A) + print("AAB", AAB) + print("hash") + print(MiniNero.sc_reduce_key(MiniNero.cn_fast_hash(A))) + aAbB = MiniNero.addKeys(MiniNero.scalarmultKey(A, A), MiniNero.scalarmultKey(B, B)) + print("testing addKeys3") + print(aAbB) + + if sys.argv[1] == "rs": + #once it's good + sk = MiniNero.randomScalar() + if sys.argv[1] == "mn": + #checking decoding mnemonic + #seed = "code elope foiled knapsack abyss fishing wayside also joining auburn robot sonic inquest obnoxious pact gave smash itches fierce darted owed queen pool fruit auburn" + seed = "down hairy tattoo ointment austere lush fossil symptoms vary sonic ultimate onslaught pioneer aerial kept linen unnoticed ahead weavers injury buzzer inquest justice nightly symptoms" + seed = "unzip festival cease fences value anchor waking tomorrow ritual hookup guarded antics cease" + sk = MiniNero.recoverSK(seed) + print("sk", sk) + print("addr my monero", MiniNero.getAddr(sk)) + if sys.argv[1] == "vk": + #check making viewkey + sk = "86c5616d91c7e7d96ec8220b15a5d441526ecc09f76347a40ab3a67373f8ba03" + sk = "7eb3f0d43fbe9caee69215fbc360f49ce545d0dfae71390d531c9723cb25e904" + vk = MiniNero.getView(sk) + vk = "bb36fe9e852f617093a1634626268b61c5e5e065f503cbdd105877a0a54c3a02" + print(vk) + if sys.argv[1] == "addr": + sk = "b6aafbbb9a6ee768bf292f7ebf977b6a31f51d4ecbf59186dd8367a3012f640f" + sk = "7eb3f0d43fbe9caee69215fbc360f49ce545d0dfae71390d531c9723cb25e904" + sk = "7c404922198b99c08020468c896f13df4f6e2ff1b5ab3c528e014cc9836ce80b" + pk = MiniNero.publicFromSecret(sk) + print("pk", pk) + vk = "9e71628d6db09405a1267550b902299ed5cd004653e52d0a12129a21ab69900d" + vk = "bb36fe9e852f617093a1634626268b61c5e5e065f503cbdd105877a0a54c3a02" + vk = "7c404922198b99c08020468c896f13df4f6e2ff1b5ab3c528e014cc9836ce80b" + vk = "c1c9e45989cc5fbfe828400886c50b4f58da40692d0f6ce6b3d483c4f1bf4b05" + pvk = MiniNero.publicFromSecret(vk) + print("pvk", pvk) + vers = "12" + print(MiniNero.encode_addr(vers, pk, pvk)) + if sys.argv[1] == "sp": + a = "9d61b19deffd5a60ba844af492ec2cc44449c5697b326919703bac031cae7f60" + a = "c8d603858291b23c42695fec0b3db1b7fcb961e63d885a89c6ef70507a0b3204" + a = "7c404922198b99c08020468c896f13df4f6e2ff1b5ab3c528e014cc9836ce80b" + b = MiniNero.publicFromSecret(a) + print(b) + if sys.argv[1] == "crc": + #test vectors + t = "salads wipeout algebra knife awakened jewels uneven tender nearby worry ferry macro uneven" + t = "sadness uneven boil mammal highway zinger enmity inkling coal essential teeming vibrate drunk drowning sulking unnoticed muffin swagger quick musical aquarium equip gather linen quick" + t = "tyrant bailed lynx symptoms winter pirate yanks jagged dawn germs daily left hull pedantic puppy dilute dash adventure pigment nodes hockey yodel across richly adventure" + t = "irony leopard emotion bovine veteran spout weird soccer adventure jeopardy negative rabbits otter boyfriend jackets boil richly apricot cake hydrogen luggage menu muffin sushi menu" + t = "ivory koala decay whole segments cement natural pact omega asylum onslaught pinched jive thumbs nouns pimple baffles uptight okay itself unmask ruthless asked fossil pact" + t = "oneself zodiac aimless october comb egotistic vastness otherwise nobody shelter amidst nexus costume dash rotate evenings zones hope aimless jury onslaught copy excess unzip october" + t = "fifteen eels reorder sneeze fidget inbound onboard tufts lifestyle rounded lilac opened ascend fonts recipe copy android launching unquoted doctor lids reinvest syllabus five sneeze" + t = "vinegar bubble bobsled southern godfather toolbox online hoax error pegs dice pamphlet knapsack erase lottery aside myth surfer exotic wipeout idled pelican cell tiger aside" + t = "aquarium safety null huddle vastness ruined taken hamburger rhythm costume lion cupcake pouch auburn hashing vulture vitals pigment dangerous possible each salads segments fazed vulture" + t = "aquarium safety null huddle vastness ruined taken hamburger rhythm costume lion cupcake pouch auburn hashing vulture vitals pigment dangerous possible each salads segments fazed vulture" + + t = raw_input("13 or 25 words?") + a = MiniNero.electrumChecksum(t) + print(a) + if sys.argv[1] == "1224": + #sohuld turn 12 word key to 24 + print("tbd") + sk = "536313cc0a88457e3d3e5aadda8d204af20e480416cc522ebd5a67df00ce2503" + print(MiniNero.getAddr(sk)) + if sys.argv[1] == "seed": + seed = "3c817618dcbfed122a64e592bb441d73300da9123686224a84e0eab1f075117e"; + a = MiniNero.hexToInt(seed) + b = a // l + print(b) + if sys.argv[1] == "HCT": + for i in [1, 12, 123, 1234, 12345, 123456]: + A = MiniNero.publicFromInt(i) + print(i, MiniNero.hashToPoint_ct(A)) + if sys.argv[1] == "RingCTSimple": + #see below for ring ct with sliding exponents + exponent = 9 + H_ct = RingCT.getHForCT() + print("H", H_ct) + sr, Pr = PaperWallet.skpkGen() #receivers private/ public + se, pe, ss1, ss2 = Ecdh.ecdhGen(Pr) #compute shared secret ss + digits = 32 #in practice it could will be 32 (from .0001 monero to ~400k monero) all other amounts can be represented by full 64 if necessary, otherwise you can use the sliding implementation of RingCT given below. + print("inputs") + a = 10000 + Cia, L1a, s2a, sa, ska = RingCT.genRangeProof(10000, digits) + print("outputs") + b = 7000 + Cib, L1b, s2b, sb, skb = RingCT.genRangeProof(7000, digits) + c = 3000 + Cic, L1c, s2c, sc, skc = RingCT.genRangeProof(3000, digits) + print("verifying range proofs of outputs") + RingCT.verRangeProof(Cib, L1b, s2b, sb) + RingCT.verRangeProof(Cic, L1c, s2c, sc) + x, P1 = PaperWallet.skpkGen() + P2 = PaperWallet.pkGen() + C2 = PaperWallet.pkGen() #some random commitment grabbed from the blockchain + ind = 0 + Ca = RingCT.sumCi(Cia) + Cb = RingCT.sumCi(Cib) + Cc = RingCT.sumCi(Cic) + sk = [x, MiniNero.sc_sub_keys(ska, MiniNero.sc_add_keys(skb, skc))] + pk = [[P1, P2], [MiniNero.subKeys(Ca, MiniNero.addKeys(Cb, Cc)), MiniNero.subKeys(C2, MiniNero.addKeys(Cb, Cc)) ] ] + II, cc, ssVal = MLSAG.MLSAG_Sign(pk, sk, ind) + print("Sig verified?", MLSAG.MLSAG_Ver(pk, II, cc, ssVal) ) + print("Finding received amount corresponding to Cib") + RingCT.ComputeReceivedAmount(pe, sr, MiniNero.addScalars(ss1, skb),MiniNero.addScalars(ss2, MiniNero.intToHex(b)), Cib, 9) + print("Finding received amount corresponding to Cic") + RingCT.ComputeReceivedAmount(pe, sr, MiniNero.addScalars(ss1, skc), MiniNero.addScalars(ss2, MiniNero.intToHex(c)), Cic, 9) + if sys.argv[1] == "MLSAG": + #below is example usage. Uncomment each line for testing + N = 3 #cols + R = 3 #rows + x = [[None]*N] #just used to generate test public keys + sk = [None] * R #vector of secret keys + P = [[None]*N] #stores the public keys + + ind = 2 + for j in range(0, R): + if j > 0: + x.append([None]*N) + P.append([None]*N) + for i in range(0, N): + x[j][i] = PaperWallet.skGen() + P[j][i] = MiniNero.scalarmultBase(x[j][i]) + sk[j] = x[j][ind] + print("x", x) + II, cc, ss = MLSAG.MLSAG_Sign(P, sk, ind) + print("Sig verified?", MLSAG.MLSAG_Ver(P, II, cc, ss) ) + if sys.argv[1] == "MLSAG2": + #below is example usage. Uncomment each line for testing + rows = 3 #cols + cols = 3 #rows + ind = 1 + + x = MLSAG2.skmGen(rows, cols) + sk = x[ind] + P = MLSAG2.keyMatrix(rows, cols) + for i in range(0, cols): + P[i] = MLSAG2.vScalarMultBase(x[i]) + + II, cc, ss = MLSAG2.MLSAG_Gen(P, sk, ind) + print("I", II) + print("c0", cc) + print("s", ss) + print("Sig verified?", MLSAG2.MLSAG_Ver(P, II, cc, ss) ) + if sys.argv[1]== "MLSAGc": + P = [["4a199991d80915f99870b702fb6b3fa7b127853c4ed12ac2bb071534b9b5dee6","86e2c2ec0262c465749fdb1940de954d87d1e6b96beda093bc185f329e157c53","e9e83e74299bd3cdad4c87c6548dba859680000740660d1f783486d4cafef79f"],["78656dbba0fdfd14fc99b4da8b73c81314b9e65eeaa4eac510ca4dd28bae63a0","987f7b1b498e6ec25ad2ce304300388396a374721a24602b16905eeeb9a42fb0","b1a9c583747a8815fa7a80452efb4f93042dc64db08b3d2f7ac5016ea2b882eb"],["d3ef77673ee441b2ca3b1f9e7f628df9f6306d89d8c5155c3c6ee4c9f5f51408","5423f77332aa6a015ddc70a82e27fe52c68ab47e08b5c07d03641194de4ea1fb","ec564efa1511f73f91649d942fff0921763e4be37ee114036bd584f7a8fb9fd9"]] + cc = "cd12f7147c6c01dee58be3338244b6f386806020e2d266a6aac68a4ab4bfb28b" + II = ["352d19bc0ab8b45241dc23c27c4598791d4e23cd370198aea8eee8c7b5eb7b1d","8e2bca011d5b1fadde79dee44329545ca903b7bd299c4719e7593ad096e96141","5c6fad47d9ec734dab1139c40d4f11482e3d1f76585643520697a17f687a5962"] + ss = [["e26f3115a50a2a25f1ec9582a4f4058f7f5c1b3f467cc38b0e882df7f93d6d0a","6b20f43b1f3c56ff3070b1a9a4612c808c35787a26243f5c046e283ff1b68f09","5091182154ad97d33c8210954b0570ccf95e8bedc5c6c193bde7d562bd9dc20a"],["ac297d01a6923e1c79d0fff82ecbfe0ae6ce515ef2b0dbc7e6b2f6542b99a404","c5371c10d7e7071ce3b3016db65bb29194e91a09cf428237fcf4037de74b5d03","a357b1453acd01fa101593994f60014f8ee7657921690bb4dfb0cfc41ef20802"],["a4a6ceb8454754ad32c987bcc56a03432155b47315f8805a3577a0470b0b330d","0ec6b71c2c6ba34d34bc3ea27e6813091fb3a90dc261a77fc9f46068bb1a3b09","41417b047353352e145fd3e65fe1e51e95081a64e9fda561060167e132c5e602"]] + + rows = 3 #cols + cols = c #rows + print("I", II) + print("c0", cc) + print("s", ss) + print("Sig verified?", MLSAG2.MLSAG_Ver(P, II, cc, ss) ) + + + + if sys.argv[1] == "LLW": + #below is example usage + N = 3 + x = [None]*N + P = [None]*N + HP = [None]*N + for i in range(0, N): + x[i] = PaperWallet.skGen() + P[i] = MiniNero.scalarmultBase(x[i]) + print("x", x) + pjoin = ''.join(P) + ind = 0 + II, cc, ss = LLW_Sigs.LLW_Sig(P[:], x[ind], ind ) + print("Sig verified?", LLW_Sigs.LLW_Ver(P[:], II, cc, ss[:]) ) + if sys.argv[1] == "Ecdh": + x1, pk1 = PaperWallet.skpkGen() #receiver secret key / public key + ephem, ephempub, ss = Ecdh.ecdhGen(pk1) #ephempub is public key to create shared key + ss2 = Ecdh.ecdhRetrieve(x1, ephempub) + print "shared secret from sender: " + print ss + print "shared secret calculated by receiver: " + print ss2 + if sys.argv[1] == "Schnorr": + #test basic schnorr + mes = "a very long test message asdflgkjnasdbfblkjnsdfblkjnsdfbklmnsdfbkl;jnsdfblkjsndfgblkjnserfvliksjndcmblkjxncvblikjhnwersfiodusjbsndlfigb7uvy3qo890eruiyghsblfduihjbo 9sruifjtyghbnqliownfghjbdlfkjvnb" + sec = "7c404922198b99c08020468c896f13df4f6e2ff1b5ab3c528e014cc9836ce80b" + pub = MiniNero.scalarmultBase(sec) + r, c = ASNL.GenSchnorr(mes, sec, pub) + print("sig verifies?",ASNL.VerSchnorr(mes, pub, r, c)) + print("sig verifies?",ASNL.VerSchnorr(mes, pub, r, PaperWallet.skGen())) + if sys.argv[1] == "SchnorrNL": + #test schnorr nonlinkable + x, P2 = PaperWallet.skpkGen() + P1 = PaperWallet.pkGen() + L1, s1, s2 = ASNL.GenSchnorrNonLinkable(x, P1, P2, 1) + ASNL.VerSchnorrNonLinkable(P1, P2, L1, s1, s2) + if sys.argv[1] == "ASNL": + #below tests ASNL code + N = 10 + x = [None] * N + P1 = [None] * N + P2 = [None] * N + indi = [None] * N + for j in range(0, N): + indi[j] = rand.getrandbits(1) + x[j] = PaperWallet.skGen() + if indi[j] == 0: + P1[j] = MiniNero.scalarmultBase(x[j]) + P2[j] = PaperWallet.pkGen() + else: + P2[j] = MiniNero.scalarmultBase(x[j]) + P1[j] = PaperWallet.pkGen() + L1, s2, s = ASNL.GenASNL(x, P1, P2, indi) + ASNL.VerASNL(P1, P2, L1, s2, s) + if sys.argv[1] == "brief": + #shows compatibility with Ref10 (c.f. with sh runtest.sh in brief directory + sec = "77076d0a7318a57d3c16c17251b26645df4c2f87ebc0992ab177fba51db92c2a" + P = MiniNero.scalarmultBase(sec) + print(P) + if sys.argv[1] == "RingCT": + #global stuff, i.e. inputs + exponent = 9 + H_ct = RingCT.getHForCT() + sr, Pr = PaperWallet.skpkGen() #receivers private/ public + digits = 14 #in practice you can either specify it as part of the protocol, or allow a sliding value + a = 10 + b = 7 + c = 3 + P2 = PaperWallet.pkGen() + C2 = PaperWallet.pkGen() #some random commitment grabbed from the blockchain + x, P1 = PaperWallet.skpkGen() + ind = 0 + + #From the previous transaction + print("inputs") + Ca, Cia, L1a, s2a, sa, ska = RingCT.genRangeProof(a, digits) + + #Actions performed by sender + se, pe, ss1, ss2 = Ecdh.ecdhGen(Pr) #compute shared secret ss + print("outputs") + Cb, Cib, L1b, s2b, sb, skb = RingCT.genRangeProof(b, digits) + Cc, Cic, L1c, s2c, sc, skc = RingCT.genRangeProof(c, digits) + print("verifying range proofs of outputs") + RingCT.verRangeProof(Cib, L1b, s2b, sb) #only need these for outputs (the input above is assumed in a previous transaction.. + RingCT.verRangeProof(Cic, L1c, s2c, sc) + pk, II, cc, ssVal = RingCT.genRCTSig([x], [ska], [skb, skc], [P1, P2], [[Ca], [C2]], [Cb, Cc], [[exponent],[3]], [exponent, exponent], 0) + + #Actions performed by the Miner + print("Sig verified?", MLSAG.MLSAG_Ver(pk, II, cc, ssVal) ) + + #Actions performed by receiver(s) + print("Finding received amount corresponding to Cib") + RingCT.ComputeReceivedAmount(pe, sr, MiniNero.addScalars(ss1, skb),MiniNero.addScalars(ss2, MiniNero.intToHex(b)), Cib, 9) + print("Finding received amount corresponding to Cic") + RingCT.ComputeReceivedAmount(pe, sr, MiniNero.addScalars(ss1, skc), MiniNero.addScalars(ss2, MiniNero.intToHex(c)), Cic, 9) + if sys.argv[1] == "ctest": + sk, Pk= PaperWallet.skpkGen() + print("running scalarmult base on ", sk, Pk) + Translator.t_header() + Translator.hexToC(sk, "sec") + Translator.t_scalarmultBase("sec", "pub") + Translator.t_footer() + if sys.argv[1] == "chash": + #pk = "ff33f4df1f8f44bfed3572134814f83c890495bd4714a0aaff0e0239c1acc927" + sk, Pk= PaperWallet.skpkGen() + #h = MiniNero.cn_fast_hash(pk) + #print("pk", pk) + #Translator.hexToC(pk, "pub") + #print("hash", h) + Translator.t_header() + Translator.hexToC(sk, "sec") + Translator.t_scalarmultBase("sec", "pub") + Translator.t_cn_fast_hash("pub", "h") + Translator.t_footer() + if sys.argv[1] == "cSchnorr": + prefix = "a very long test message asdflgkjnasdbfblkjnsdfblkjnsdfbklmnsdfbkl;jnsdfblkjsndfgblkjnserfvliksjndcmblkjxncvblikjhnwersfiodusjbsndlfigb7uvy3qo890eruiyghsblfduihjbo 9sruifjtyghbnqliownfghjbdlfkjvnb" + hash_prefix = MiniNero.cn_fast_hash(binascii.hexlify(prefix)) + + h="247a9b60e8a31c18bfab9f6bf7b5079bc8c1955ea6726ea3f2bc38a3ec1bc658" + pubb="ff33f4df1f8f44bfed3572134814f83c890495bd4714a0aaff0e0239c1acc927" + sec="9d5f81503e5280cd8fdcd12c94bea81bdf4c2f87ebc0992ab177fba51db92c0a" + r, c = ASNL.GenSchnorr(h,pubb, sec, PaperWallet.skGen()) + Translator.sigToC(r, c) + print("verd?", ASNL.VerSchnorr(h, pubb, r, c)) + if sys.argv[1] == "data": + skv = ["ae5934fe1e8065ec19afc80f2f06fc3f36730405a022813e2b18dc9da929da02", "2a9f99b0313157ba599bde727e04d6bfe87163f1d7dc93a352b1a648d7178205", "f0fb4504b06785caac17f4c554526685eed71d21b9b542f50c6e396b6152a403", "e5f7c934aa59c2ea21efeb4695d09bb95402d0dcc92d5bbec59eb1fc5912cf0f", "795f05824fb9e4a0808a523ecc9fefcb9e563e152d9b101224cb18169d3a4a05"] + pkv = MLSAG2.vScalarMultBase(skv) + print(pkv) + if sys.argv[1] == "addKeys": + a, A = ('13e467e9c0034e6878af5c801a81ee0543b1096b5ab01356b349cc3235cd1909', 'a50e5e751a9906f9ff086c734591d0ee87be6ca58fe7208b8e070e54d2eda0da') + b, B = ('cd43ec6b80dd5ea2668e141fc6dc1191258b5eb58bf7dbef9e647aca3ba09707', '4f31e64eb9017ac02c6313294d0554d4532fbd6ffd15bc175422060867ab33f4') + Translator.hexToC(a) + Translator.hexToC(b) + print(MiniNero.addKeys1(a, b, B)) + print(MiniNero.addKeys2(a, A, b, B)) + if sys.argv[1] == "bighash": + from bighash import * + print(MiniNero.cn_fast_hash(a)) + b = "d99e55005f1736e5d843dd11ce80e3e989f3eea52a42e14f6c541620568569ed" + if sys.argv[1] == "ch": + a = "18a5f3cf50ae2207d8ccd70179a13b4fc339d0cd6d9138c6d764f8e4cef8f006c87b1367fef3f02ed5ffd42a7ea212c2b8899af3af8f4b1e34139e1e390f3af1" + print(MiniNero.cn_fast_hash(a)) + if sys.argv[1] == "fastbin": + b = "0123456789abcdef" + c = MiniNero.hexToInt(b) + c = 6000 + print(b, c) + Translator.hexToC(b) + b = RingCT.binary(c, 64) + b2 = ''.join([str(a) for a in b]) + print(b2) + if sys.argv[1] == "HPow2": + A = MiniNero.publicFromInt(1) + HPow2 = MiniNero.hashToPoint_ct(A) + two = MiniNero.intToHex(2) + for j in range(1, 64): + key = HPow2 + while len(key) < 64: + key = key + "0" + k2 = [key[i:i+2] for i in range(0, len(key), 2)] + ar = "{0x"+(", 0x".join(k2))+"}, " + print(ar) + HPow2 = MiniNero.scalarmultKey(HPow2, two) + print("};") + if sys.argv[1] == "h2": + A = MiniNero.publicFromInt(1) + H = MiniNero.hashToPoint_ct(A) + print(MiniNero.addKeys(H, H)) + print(MiniNero.scalarmultKey(H, MiniNero.intToHex(2))) + + + + + + diff --git a/source-code/MiniNero/Translator.py b/source-code/MiniNero/Translator.py new file mode 100644 index 0000000..edfaa21 --- /dev/null +++ b/source-code/MiniNero/Translator.py @@ -0,0 +1,54 @@ +#the goal with this is to automagically Convert MiniNero Code to ref10 C equivalent +import MiniNero + +def t_header(): + print("#include ") + print("#include ") + print("#include ") + print("#include ") + print("#include \"crypto-ops.h\"") + print("#include \"crypto.h\"\n\n") + print("#include \"keccak.h\"") + print("#define BYTES 64\n\n") + print("int main(int argc, char *argv[]) {\n\n") + +def t_footer(): + print("return 0;\n}\n\n") + +def hexToC(key): + while len(key) < 64: + key = key + "0" + k2 = [key[i:i+2] for i in range(0, len(key), 2)] + ar = "{{0x"+(", 0x".join(k2))+"}}" + print(ar) + +def sigToC(r, c): + r2 = [r[i:i+2] for i in range(0, len(r), 2)] + ar = "{0x"+(", 0x".join(r2))+"}" + c2 = [c[i:i+2] for i in range(0, len(c), 2)] + ac = "{0x"+(", 0x".join(c2))+"}" + print("signature sig = {"+ac+", "+ar+"};\n\n") + + +def t_scalarmultBase(name_in, name_out): + print("//Running scalarmult Base on "+name_in) + print("ge_p3 point;") + print("ge_scalarmult_base(&point, "+name_in+");") + print("unsigned char "+name_out+"[32];") + print("ge_p3_tobytes("+name_out+", &point);\n\n") + +def t_cn_fast_hash(name_in, name_out): + print("\n//running cn_fast_hash on "+name_in) + print("uint8_t md2[32];") + print("unsigned char "+name_out+"[32] = {0};") + print("int j = 0;") + print("keccak((uint8_t *) "+name_in+", 32, md2, 32);") + print("for (j= 0 ; j < 32 ; j++) {") + print("h[j] = (unsigned char)md2[j];") + print("}") + print("printf(\"\\nhash:\\n\");") + print("for (j = 0 ; j < 32 ; j++) {") + print("printf(\"%02x\", "+name_out+"[j]);") + print("}") + + diff --git a/source-code/MiniNero/bitmonerod.py b/source-code/MiniNero/bitmonerod.py new file mode 100644 index 0000000..0f2aa86 --- /dev/null +++ b/source-code/MiniNero/bitmonerod.py @@ -0,0 +1,179 @@ +#The following code is taken for the most part from +#https://github.com/moneroexamples/python-json-rpc.git +#I've slightly modified it to fit the cherry py server better + +import requests +import json +import os +import binascii + +def send(destination_address, amount, payment_id, mixin): + # simple wallet is running on the localhost and port of 18082 + url = "http://localhost:18082/json_rpc" + # standard json header + headers = {'content-type': 'application/json'} + # cryptonote amount format is different then + # that normally used by people. + # thus the float amount must be changed to + # something that cryptonote understands + int_amount = int(get_amount(amount)) + + # just to make sure that amount->coversion->back + # gives the same amount as in the initial number + assert amount == float(get_money(str(int_amount))), "Amount conversion failed" + + + # send specified xmr amount to the given destination_address + recipents = [{"address": destination_address, + "amount": int_amount}] + + # simplewallet' procedure/method to call + rpc_input = { + "method": "transfer", + "params": {"destinations": recipents, + "mixin": mixin, + "payment_id" : payment_id} + } + + # add standard rpc values + rpc_input.update({"jsonrpc": "2.0", "id": "0"}) + + # execute the rpc request + response = requests.post( + url, + data=json.dumps(rpc_input), + headers=headers) + + # print the payment_id + print("#payment_id: ", payment_id) + + # pretty print json output + print(json.dumps(response.json(), indent=4)) + + +def get_amount(amount): + """encode amount (float number) to the cryptonote format. Hope its correct. + + Based on C++ code: + https://github.com/monero-project/bitmonero/blob/master/src/cryptonote_core/cryptonote_format_utils.cpp#L211 + """ + + CRYPTONOTE_DISPLAY_DECIMAL_POINT = 12 + + str_amount = str(amount) + + fraction_size = 0 + + if '.' in str_amount: + + point_index = str_amount.index('.') + + fraction_size = len(str_amount) - point_index - 1 + + while fraction_size < CRYPTONOTE_DISPLAY_DECIMAL_POINT and '0' == str_amount[-1]: + print(44) + str_amount = str_amount[:-1] + fraction_size = fraction_size - 1 + + if CRYPTONOTE_DISPLAY_DECIMAL_POINT < fraction_size: + return False + + str_amount = str_amount[:point_index] + str_amount[point_index+1:] + + if not str_amount: + return False + + if fraction_size < CRYPTONOTE_DISPLAY_DECIMAL_POINT: + str_amount = str_amount + '0'*(CRYPTONOTE_DISPLAY_DECIMAL_POINT - fraction_size) + + return str_amount + + +def get_money(amount): + """decode cryptonote amount format to user friendly format. Hope its correct. + + Based on C++ code: + https://github.com/monero-project/bitmonero/blob/master/src/cryptonote_core/cryptonote_format_utils.cpp#L751 + """ + + CRYPTONOTE_DISPLAY_DECIMAL_POINT = 12 + + s = amount + + if len(s) < CRYPTONOTE_DISPLAY_DECIMAL_POINT + 1: + # add some trailing zeros, if needed, to have constant width + s = '0' * (CRYPTONOTE_DISPLAY_DECIMAL_POINT + 1 - len(s)) + s + + idx = len(s) - CRYPTONOTE_DISPLAY_DECIMAL_POINT + + s = s[0:idx] + "." + s[idx:] + + return s + + +def balance(): + + # simple wallet is running on the localhost and port of 18082 + url = "http://localhost:18082/json_rpc" + + # standard json header + headers = {'content-type': 'application/json'} + + # simplewallet' procedure/method to call + rpc_input = { + "method": "getbalance" + } + + # add standard rpc values + rpc_input.update({"jsonrpc": "2.0", "id": "0"}) + + # execute the rpc request + response = requests.post( + url, + data=json.dumps(rpc_input), + headers=headers) + + # amounts in cryptonote are encoded in a way which is convenient + # for a computer, not a user. Thus, its better need to recode them + # to something user friendly, before displaying them. + # + # For examples: + # 4760000000000 is 4.76 + # 80000000000 is 0.08 + # + # In example 3 "Basic example 3: get incoming transfers" it is + # shown how to convert cryptonote values to user friendly format. + + # pretty print json output + print(json.dumps(response.json(), indent=4)) + +def myAddress(): + # simple wallet is running on the localhost and port of 18082 + url = "http://localhost:18082/json_rpc" + + # standard json header + headers = {'content-type': 'application/json'} + + """return the wallet's address""" + + rpc_input = { + "method": "getaddress" + } + + response = do_rpc(url, headers, rpc_input) + + return response.json() + +def do_rpc(url,headers, rpc_input): + """does the rpc calls""" + + # add standard rpc values + rpc_input.update({"jsonrpc": "2.0", "id": "0"}) + + # execute the rpc requrest + response = requests.post( + url, + data=json.dumps(rpc_input), + headers=headers) + + return response \ No newline at end of file diff --git a/source-code/MiniNero/brief/MakeClass.lua b/source-code/MiniNero/brief/MakeClass.lua new file mode 100644 index 0000000..fc0ff68 --- /dev/null +++ b/source-code/MiniNero/brief/MakeClass.lua @@ -0,0 +1,17 @@ +--for quick conversion of the MiniNero python code to c++ +-- +if #arg > 0 then + class = string.lower(arg[1]) --asdf + object = arg[1] --Asdf + deff = string.upper(arg[1]) --ASDF + hfile = io.input("TemplateHead"):read("*a") + cppfile = io.input("TemplateBody"):read("*a") + hfile = string.gsub(hfile, "asdf", class) + hfile = string.gsub(hfile, "Asdf", object) + hfile = string.gsub(hfile, "ASDF", deff) + cppfile = string.gsub(cppfile, "asdf", class) + cppfile = string.gsub(cppfile, "Asdf", object) + cppfile = string.gsub(cppfile, "ASDF", deff) + io.output(object..".h"):write(hfile) + io.output(object..".cpp"):write(cppfile) +end diff --git a/source-code/MiniNero/brief/runtest.bat b/source-code/MiniNero/brief/runtest.bat new file mode 100644 index 0000000..39b5304 --- /dev/null +++ b/source-code/MiniNero/brief/runtest.bat @@ -0,0 +1,4 @@ +gtags.exe +mingw32-make.exe clean +mingw32-make.exe +a.exe > .results diff --git a/source-code/MiniNero/brief/runtest.sh b/source-code/MiniNero/brief/runtest.sh new file mode 100644 index 0000000..a14ae31 --- /dev/null +++ b/source-code/MiniNero/brief/runtest.sh @@ -0,0 +1,4 @@ +gtags.exe +make clean +make +./a.exe diff --git a/source-code/MiniNero/brief/runtest2.sh b/source-code/MiniNero/brief/runtest2.sh new file mode 100644 index 0000000..e4eb4bc --- /dev/null +++ b/source-code/MiniNero/brief/runtest2.sh @@ -0,0 +1,3 @@ +rm.exe a.exe +g++ bits.cpp +./a.exe diff --git a/source-code/MiniNero/brief/tasks.bat b/source-code/MiniNero/brief/tasks.bat new file mode 100644 index 0000000..5fc782c --- /dev/null +++ b/source-code/MiniNero/brief/tasks.bat @@ -0,0 +1 @@ +%1 diff --git a/source-code/MiniNero/btcProof.py b/source-code/MiniNero/btcProof.py new file mode 100644 index 0000000..bf90591 --- /dev/null +++ b/source-code/MiniNero/btcProof.py @@ -0,0 +1,132 @@ +#!/usr/bin/python + +#Some code to do the same thing as btcproof (since I think there may be an error in their file hashing?) +#some of this code is taken from KeyUtils.py on a random github, so if you made that, then thanks +import sys +import ecdsa +import ecdsa.der +import ecdsa.util +import hashlib +import os +import re +import struct + +import webbrowser #for qr code of address + +b58 = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz' +VERSION = 0x00 + +def base58encode(n): + result = '' + while n > 0: + result = b58[n%58] + result + n /= 58 + return result + +def base256decode(s): + result = 0 + for c in s: + result = result * 256 + ord(c) + return result + +def countLeadingChars(s, ch): + count = 0 + for c in s: + if c == ch: + count += 1 + else: + break + return count + +# https://en.bitcoin.it/wiki/Base58Check_encoding +def base58CheckEncode(version, payload): + s = chr(version) + payload #concat version + checksum = hashlib.sha256(hashlib.sha256(s).digest()).digest()[0:4] + print("checksum", checksum) + result = s + checksum #concat checksum to end + leadingZeros = countLeadingChars(result, '\0') + #return base58encode(base256decode(result)) + return '1' * leadingZeros + base58encode(base256decode(result)) + +def privateKeyToWif(key_hex): + return base58CheckEncode(VERSION, key_hex.decode('hex')) + +def privateKeyToPublicKey(s): + sk = ecdsa.SigningKey.from_string(s.decode('hex'), curve=ecdsa.SECP256k1) + vk = sk.verifying_key + return ('\04' + sk.verifying_key.to_string()).encode('hex') + +def pubKeyToAddr(s): + ripemd160 = hashlib.new('ripemd160') + ripemd160.update(hashlib.sha256(s.decode('hex')).digest()) + return base58CheckEncode(0, ripemd160.digest()) + +def keyToAddr(s): + return pubKeyToAddr(privateKeyToPublicKey(s)) + +## below tto create digest of file, result should not vary with blocksize +BLOCKSIZE = 2 **10 + +def sha256OfFile(filepath): + sha = hashlib.sha256() + with open(filepath, 'rb') as f: + while True: + block = f.read(BLOCKSIZE) + if len(block) < BLOCKSIZE: + print(len(block)) + block = block[:-1] + if not block: break + sha.update(block) + return sha.hexdigest() + + +##proofs, c.f. +#https://www.btproof.com/technical.html +# hash = SHA256(DATA) // or the supplied hash +#vhash = CONCAT(VERSION_BYTE, RIPEMD160(hash)) // VERSION_BYTE is 0x00 for main net +#address = BASE58(CONCAT(vhash, SHA256(SHA256(vhash))[0..3])) + +def btcProofOfFile(fi): + has = sha256OfFile(fi) + ripemd160 = hashlib.new('ripemd160') + ripemd160.update(has) + address = base58CheckEncode(0, ripemd160.digest()) + return address + +def btcProofOfString(strin): + sha = hashlib.sha256() + sha.update(strin) + has = sha.digest() + ripemd160 = hashlib.new('ripemd160') + ripemd160.update(has) + address = base58CheckEncode(0, ripemd160.digest()) + return address + + + +# Generate a random private key +#private_key = os.urandom(32).encode('hex') +#address = base58CheckEncode(version, payload) + +#this works (check sha test vectors at http://www.di-mgt.com.au/sha_testvectors.html) indicating I am hashing the file correctly +#print(sha256OfFile("a.txt")) +#print("should be: cdc76e5c 9914fb92 81a1c7e2 84d73e67 f1809a48 a497200e 046d39cc c7112cd0") + + +#this works +#print("address for abc") +#print(btcProofOfString("abc")) +#this does not agree with btcproof.com, indicating they are hashing file wrong +#print("address for a.txt") +#print(btcProofOfFile("a.txt")) + +#print("bitcoin:"+btcProofOfFile(sys.argv[1])+"?amount=0.0001") +a = btcProofOfFile(sys.argv[1]) +print(a) +#bitcoin:1PZmMahjbfsTy6DsaRyfStzoWTPppWwDnZ?amount=0.1 +#url = "https://chart.googleapis.com/chart?chs=250x250&cht=qr&chl="+a +url2 = "https://blockchain.info/address/"+a +#print(url) +print(url2) +#webbrowser.open(url) +webbrowser.open(url2) diff --git a/source-code/MiniNero/ed25519.py b/source-code/MiniNero/ed25519.py new file mode 100644 index 0000000..292b6d0 --- /dev/null +++ b/source-code/MiniNero/ed25519.py @@ -0,0 +1,129 @@ +#ed25519.cr.yp.to/python/ed25519.py +import hashlib + +b = 256 +q = 2**255 - 19 +l = 2**252 + 27742317777372353535851937790883648493 + +def H(m): + return hashlib.sha512(m).digest() + +def expmod(b,e,m): + if e == 0: return 1 + t = expmod(b,e/2,m)**2 % m + if e & 1: t = (t*b) % m + return t + +def inv(x): + return expmod(x,q-2,q) + +d = -121665 * inv(121666) +I = expmod(2,(q-1)/4,q) + +def xrecover(y): + xx = (y*y-1) * inv(d*y*y+1) + x = expmod(xx,(q+3)/8,q) + if (x*x - xx) % q != 0: x = (x*I) % q + if x % 2 != 0: x = q-x + return x + +By = 4 * inv(5) +Bx = xrecover(By) +B = [Bx % q,By % q] + +def edwards(P,Q): + x1 = P[0] + y1 = P[1] + x2 = Q[0] + y2 = Q[1] + x3 = (x1*y2+x2*y1) * inv(1+d*x1*x2*y1*y2) + y3 = (y1*y2+x1*x2) * inv(1-d*x1*x2*y1*y2) + return [x3 % q,y3 % q] + +def edwards_Minus(P, Q): #added + x1 = P[0] + y1 = P[1] + x2 = (-1 * Q[0]) % q + y2 = Q[1] + x3 = (x1*y2+x2*y1) * inv(1+d*x1*x2*y1*y2) + y3 = (y1*y2+x1*x2) * inv(1-d*x1*x2*y1*y2) + return [x3 % q,y3 % q] + + +def scalarmult(P,e): + if e == 0: return [0,1] + Q = scalarmult(P,e/2) + Q = edwards(Q,Q) + if e & 1: Q = edwards(Q,P) + return Q + +#added scalarmultbase +def scalarmultbase(e): + if e == 0: return [0,1] + Q = scalarmult(B,e/2) + Q = edwards(Q,Q) + if e & 1: Q = edwards(Q,B) + return Q + +def encodeint(y): + bits = [(y >> i) & 1 for i in range(b)] + return ''.join([chr(sum([bits[i * 8 + j] << j for j in range(8)])) for i in range(b/8)]) + +def encodepoint(P): + x = P[0] + y = P[1] + bits = [(y >> i) & 1 for i in range(b - 1)] + [x & 1] + return ''.join([chr(sum([bits[i * 8 + j] << j for j in range(8)])) for i in range(b/8)]) + +def bit(h,i): + return (ord(h[i/8]) >> (i%8)) & 1 + +def publickey(sk): + h = H(sk) + a = 2**(b-2) + sum(2**i * bit(h,i) for i in range(3,b-2)) + A = scalarmult(B,a) + return encodepoint(A) + +def Hint(m): + h = H(m) + return sum(2**i * bit(h,i) for i in range(2*b)) + +def signature(m,sk,pk): + h = H(sk) + a = 2**(b-2) + sum(2**i * bit(h,i) for i in range(3,b-2)) + r = Hint(''.join([h[i] for i in range(b/8,b/4)]) + m) + R = scalarmult(B,r) + S = (r + Hint(encodepoint(R) + pk + m) * a) % l + return encodepoint(R) + encodeint(S) + +def isoncurve(P): + x = P[0] + y = P[1] + return (-x*x + y*y - 1 - d*x*x*y*y) % q == 0 + +def decodeint(s): + return sum(2**i * bit(s,i) for i in range(0,b)) + +def decodepoint(s): + y = sum(2**i * bit(s,i) for i in range(0,b-1)) + x = xrecover(y) + if x & 1 != bit(s,b-1): x = q-x + P = [x,y] + if not isoncurve(P): raise Exception("decoding point that is not on curve") + return P + +def checkvalid(s,m,pk): + if len(s) != b/4: + raise Exception("signature length is wrong") + return False + if len(pk) != b/8: + raise Exception("public-key length is wrong") + return False + R = decodepoint(s[0:b/8]) + A = decodepoint(pk) + S = decodeint(s[b/8:b/4]) + h = Hint(encodepoint(R) + pk + m) + if scalarmult(B,S) != edwards(R,scalarmult(A,h)): + raise Exception("signature does not pass verification") + return False + return True diff --git a/source-code/MiniNero/mnemonic.py b/source-code/MiniNero/mnemonic.py new file mode 100644 index 0000000..4971bbe --- /dev/null +++ b/source-code/MiniNero/mnemonic.py @@ -0,0 +1,1704 @@ +#!/usr/bin/env python +# +# Electrum - lightweight Bitcoin client +# Copyright (C) 2011 thomasv@gitorious +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +import MiniNero + +# list of words from english.h in bitmonero +words = [ + "abbey", + "abducts", + "ability", + "ablaze", + "abnormal", + "abort", + "abrasive", + "absorb", + "abyss", + "academy", + "aces", + "aching", + "acidic", + "acoustic", + "acquire", + "across", + "actress", + "acumen", + "adapt", + "addicted", + "adept", + "adhesive", + "adjust", + "adopt", + "adrenalin", + "adult", + "adventure", + "aerial", + "afar", + "affair", + "afield", + "afloat", + "afoot", + "afraid", + "after", + "against", + "agenda", + "aggravate", + "agile", + "aglow", + "agnostic", + "agony", + "agreed", + "ahead", + "aided", + "ailments", + "aimless", + "airport", + "aisle", + "ajar", + "akin", + "alarms", + "album", + "alchemy", + "alerts", + "algebra", + "alkaline", + "alley", + "almost", + "aloof", + "alpine", + "already", + "also", + "altitude", + "alumni", + "always", + "amaze", + "ambush", + "amended", + "amidst", + "ammo", + "amnesty", + "among", + "amply", + "amused", + "anchor", + "android", + "anecdote", + "angled", + "ankle", + "annoyed", + "answers", + "antics", + "anvil", + "anxiety", + "anybody", + "apart", + "apex", + "aphid", + "aplomb", + "apology", + "apply", + "apricot", + "aptitude", + "aquarium", + "arbitrary", + "archer", + "ardent", + "arena", + "argue", + "arises", + "army", + "around", + "arrow", + "arsenic", + "artistic", + "ascend", + "ashtray", + "aside", + "asked", + "asleep", + "aspire", + "assorted", + "asylum", + "athlete", + "atlas", + "atom", + "atrium", + "attire", + "auburn", + "auctions", + "audio", + "august", + "aunt", + "austere", + "autumn", + "avatar", + "avidly", + "avoid", + "awakened", + "awesome", + "awful", + "awkward", + "awning", + "awoken", + "axes", + "axis", + "axle", + "aztec", + "azure", + "baby", + "bacon", + "badge", + "baffles", + "bagpipe", + "bailed", + "bakery", + "balding", + "bamboo", + "banjo", + "baptism", + "basin", + "batch", + "bawled", + "bays", + "because", + "beer", + "befit", + "begun", + "behind", + "being", + "below", + "bemused", + "benches", + "berries", + "bested", + "betting", + "bevel", + "beware", + "beyond", + "bias", + "bicycle", + "bids", + "bifocals", + "biggest", + "bikini", + "bimonthly", + "binocular", + "biology", + "biplane", + "birth", + "biscuit", + "bite", + "biweekly", + "blender", + "blip", + "bluntly", + "boat", + "bobsled", + "bodies", + "bogeys", + "boil", + "boldly", + "bomb", + "border", + "boss", + "both", + "bounced", + "bovine", + "bowling", + "boxes", + "boyfriend", + "broken", + "brunt", + "bubble", + "buckets", + "budget", + "buffet", + "bugs", + "building", + "bulb", + "bumper", + "bunch", + "business", + "butter", + "buying", + "buzzer", + "bygones", + "byline", + "bypass", + "cabin", + "cactus", + "cadets", + "cafe", + "cage", + "cajun", + "cake", + "calamity", + "camp", + "candy", + "casket", + "catch", + "cause", + "cavernous", + "cease", + "cedar", + "ceiling", + "cell", + "cement", + "cent", + "certain", + "chlorine", + "chrome", + "cider", + "cigar", + "cinema", + "circle", + "cistern", + "citadel", + "civilian", + "claim", + "click", + "clue", + "coal", + "cobra", + "cocoa", + "code", + "coexist", + "coffee", + "cogs", + "cohesive", + "coils", + "colony", + "comb", + "cool", + "copy", + "corrode", + "costume", + "cottage", + "cousin", + "cowl", + "criminal", + "cube", + "cucumber", + "cuddled", + "cuffs", + "cuisine", + "cunning", + "cupcake", + "custom", + "cycling", + "cylinder", + "cynical", + "dabbing", + "dads", + "daft", + "dagger", + "daily", + "damp", + "dangerous", + "dapper", + "darted", + "dash", + "dating", + "dauntless", + "dawn", + "daytime", + "dazed", + "debut", + "decay", + "dedicated", + "deepest", + "deftly", + "degrees", + "dehydrate", + "deity", + "dejected", + "delayed", + "demonstrate", + "dented", + "deodorant", + "depth", + "desk", + "devoid", + "dewdrop", + "dexterity", + "dialect", + "dice", + "diet", + "different", + "digit", + "dilute", + "dime", + "dinner", + "diode", + "diplomat", + "directed", + "distance", + "ditch", + "divers", + "dizzy", + "doctor", + "dodge", + "does", + "dogs", + "doing", + "dolphin", + "domestic", + "donuts", + "doorway", + "dormant", + "dosage", + "dotted", + "double", + "dove", + "down", + "dozen", + "dreams", + "drinks", + "drowning", + "drunk", + "drying", + "dual", + "dubbed", + "duckling", + "dude", + "duets", + "duke", + "dullness", + "dummy", + "dunes", + "duplex", + "duration", + "dusted", + "duties", + "dwarf", + "dwelt", + "dwindling", + "dying", + "dynamite", + "dyslexic", + "each", + "eagle", + "earth", + "easy", + "eating", + "eavesdrop", + "eccentric", + "echo", + "eclipse", + "economics", + "ecstatic", + "eden", + "edgy", + "edited", + "educated", + "eels", + "efficient", + "eggs", + "egotistic", + "eight", + "either", + "eject", + "elapse", + "elbow", + "eldest", + "eleven", + "elite", + "elope", + "else", + "eluded", + "emails", + "ember", + "emerge", + "emit", + "emotion", + "empty", + "emulate", + "energy", + "enforce", + "enhanced", + "enigma", + "enjoy", + "enlist", + "enmity", + "enough", + "enraged", + "ensign", + "entrance", + "envy", + "epoxy", + "equip", + "erase", + "erected", + "erosion", + "error", + "eskimos", + "espionage", + "essential", + "estate", + "etched", + "eternal", + "ethics", + "etiquette", + "evaluate", + "evenings", + "evicted", + "evolved", + "examine", + "excess", + "exhale", + "exit", + "exotic", + "exquisite", + "extra", + "exult", + "fabrics", + "factual", + "fading", + "fainted", + "faked", + "fall", + "family", + "fancy", + "farming", + "fatal", + "faulty", + "fawns", + "faxed", + "fazed", + "feast", + "february", + "federal", + "feel", + "feline", + "females", + "fences", + "ferry", + "festival", + "fetches", + "fever", + "fewest", + "fiat", + "fibula", + "fictional", + "fidget", + "fierce", + "fifteen", + "fight", + "films", + "firm", + "fishing", + "fitting", + "five", + "fixate", + "fizzle", + "fleet", + "flippant", + "flying", + "foamy", + "focus", + "foes", + "foggy", + "foiled", + "folding", + "fonts", + "foolish", + "fossil", + "fountain", + "fowls", + "foxes", + "foyer", + "framed", + "friendly", + "frown", + "fruit", + "frying", + "fudge", + "fuel", + "fugitive", + "fully", + "fuming", + "fungal", + "furnished", + "fuselage", + "future", + "fuzzy", + "gables", + "gadget", + "gags", + "gained", + "galaxy", + "gambit", + "gang", + "gasp", + "gather", + "gauze", + "gave", + "gawk", + "gaze", + "gearbox", + "gecko", + "geek", + "gels", + "gemstone", + "general", + "geometry", + "germs", + "gesture", + "getting", + "geyser", + "ghetto", + "ghost", + "giant", + "giddy", + "gifts", + "gigantic", + "gills", + "gimmick", + "ginger", + "girth", + "giving", + "glass", + "gleeful", + "glide", + "gnaw", + "gnome", + "goat", + "goblet", + "godfather", + "goes", + "goggles", + "going", + "goldfish", + "gone", + "goodbye", + "gopher", + "gorilla", + "gossip", + "gotten", + "gourmet", + "governing", + "gown", + "greater", + "grunt", + "guarded", + "guest", + "guide", + "gulp", + "gumball", + "guru", + "gusts", + "gutter", + "guys", + "gymnast", + "gypsy", + "gyrate", + "habitat", + "hacksaw", + "haggled", + "hairy", + "hamburger", + "happens", + "hashing", + "hatchet", + "haunted", + "having", + "hawk", + "haystack", + "hazard", + "hectare", + "hedgehog", + "heels", + "hefty", + "height", + "hemlock", + "hence", + "heron", + "hesitate", + "hexagon", + "hickory", + "hiding", + "highway", + "hijack", + "hiker", + "hills", + "himself", + "hinder", + "hippo", + "hire", + "history", + "hitched", + "hive", + "hoax", + "hobby", + "hockey", + "hoisting", + "hold", + "honked", + "hookup", + "hope", + "hornet", + "hospital", + "hotel", + "hounded", + "hover", + "howls", + "hubcaps", + "huddle", + "huge", + "hull", + "humid", + "hunter", + "hurried", + "husband", + "huts", + "hybrid", + "hydrogen", + "hyper", + "iceberg", + "icing", + "icon", + "identity", + "idiom", + "idled", + "idols", + "igloo", + "ignore", + "iguana", + "illness", + "imagine", + "imbalance", + "imitate", + "impel", + "inactive", + "inbound", + "incur", + "industrial", + "inexact", + "inflamed", + "ingested", + "initiate", + "injury", + "inkling", + "inline", + "inmate", + "innocent", + "inorganic", + "input", + "inquest", + "inroads", + "insult", + "intended", + "inundate", + "invoke", + "inwardly", + "ionic", + "irate", + "iris", + "irony", + "irritate", + "island", + "isolated", + "issued", + "italics", + "itches", + "items", + "itinerary", + "itself", + "ivory", + "jabbed", + "jackets", + "jaded", + "jagged", + "jailed", + "jamming", + "january", + "jargon", + "jaunt", + "javelin", + "jaws", + "jazz", + "jeans", + "jeers", + "jellyfish", + "jeopardy", + "jerseys", + "jester", + "jetting", + "jewels", + "jigsaw", + "jingle", + "jittery", + "jive", + "jobs", + "jockey", + "jogger", + "joining", + "joking", + "jolted", + "jostle", + "journal", + "joyous", + "jubilee", + "judge", + "juggled", + "juicy", + "jukebox", + "july", + "jump", + "junk", + "jury", + "justice", + "juvenile", + "kangaroo", + "karate", + "keep", + "kennel", + "kept", + "kernels", + "kettle", + "keyboard", + "kickoff", + "kidneys", + "king", + "kiosk", + "kisses", + "kitchens", + "kiwi", + "knapsack", + "knee", + "knife", + "knowledge", + "knuckle", + "koala", + "laboratory", + "ladder", + "lagoon", + "lair", + "lakes", + "lamb", + "language", + "laptop", + "large", + "last", + "later", + "launching", + "lava", + "lawsuit", + "layout", + "lazy", + "lectures", + "ledge", + "leech", + "left", + "legion", + "leisure", + "lemon", + "lending", + "leopard", + "lesson", + "lettuce", + "lexicon", + "liar", + "library", + "licks", + "lids", + "lied", + "lifestyle", + "light", + "likewise", + "lilac", + "limits", + "linen", + "lion", + "lipstick", + "liquid", + "listen", + "lively", + "loaded", + "lobster", + "locker", + "lodge", + "lofty", + "logic", + "loincloth", + "long", + "looking", + "lopped", + "lordship", + "losing", + "lottery", + "loudly", + "love", + "lower", + "loyal", + "lucky", + "luggage", + "lukewarm", + "lullaby", + "lumber", + "lunar", + "lurk", + "lush", + "luxury", + "lymph", + "lynx", + "lyrics", + "macro", + "madness", + "magically", + "mailed", + "major", + "makeup", + "malady", + "mammal", + "maps", + "masterful", + "match", + "maul", + "maverick", + "maximum", + "mayor", + "maze", + "meant", + "mechanic", + "medicate", + "meeting", + "megabyte", + "melting", + "memoir", + "menu", + "merger", + "mesh", + "metro", + "mews", + "mice", + "midst", + "mighty", + "mime", + "mirror", + "misery", + "mittens", + "mixture", + "moat", + "mobile", + "mocked", + "mohawk", + "moisture", + "molten", + "moment", + "money", + "moon", + "mops", + "morsel", + "mostly", + "motherly", + "mouth", + "movement", + "mowing", + "much", + "muddy", + "muffin", + "mugged", + "mullet", + "mumble", + "mundane", + "muppet", + "mural", + "musical", + "muzzle", + "myriad", + "mystery", + "myth", + "nabbing", + "nagged", + "nail", + "names", + "nanny", + "napkin", + "narrate", + "nasty", + "natural", + "nautical", + "navy", + "nearby", + "necklace", + "needed", + "negative", + "neither", + "neon", + "nephew", + "nerves", + "nestle", + "network", + "neutral", + "never", + "newt", + "nexus", + "nibs", + "niche", + "niece", + "nifty", + "nightly", + "nimbly", + "nineteen", + "nirvana", + "nitrogen", + "nobody", + "nocturnal", + "nodes", + "noises", + "nomad", + "noodles", + "northern", + "nostril", + "noted", + "nouns", + "novelty", + "nowhere", + "nozzle", + "nuance", + "nucleus", + "nudged", + "nugget", + "nuisance", + "null", + "number", + "nuns", + "nurse", + "nutshell", + "nylon", + "oaks", + "oars", + "oasis", + "oatmeal", + "obedient", + "object", + "obliged", + "obnoxious", + "observant", + "obtains", + "obvious", + "occur", + "ocean", + "october", + "odds", + "odometer", + "offend", + "often", + "oilfield", + "ointment", + "okay", + "older", + "olive", + "olympics", + "omega", + "omission", + "omnibus", + "onboard", + "oncoming", + "oneself", + "ongoing", + "onion", + "online", + "onslaught", + "onto", + "onward", + "oozed", + "opacity", + "opened", + "opposite", + "optical", + "opus", + "orange", + "orbit", + "orchid", + "orders", + "organs", + "origin", + "ornament", + "orphans", + "oscar", + "ostrich", + "otherwise", + "otter", + "ouch", + "ought", + "ounce", + "ourselves", + "oust", + "outbreak", + "oval", + "oven", + "owed", + "owls", + "owner", + "oxidant", + "oxygen", + "oyster", + "ozone", + "pact", + "paddles", + "pager", + "pairing", + "palace", + "pamphlet", + "pancakes", + "paper", + "paradise", + "pastry", + "patio", + "pause", + "pavements", + "pawnshop", + "payment", + "peaches", + "pebbles", + "peculiar", + "pedantic", + "peeled", + "pegs", + "pelican", + "pencil", + "people", + "pepper", + "perfect", + "pests", + "petals", + "phase", + "pheasants", + "phone", + "phrases", + "physics", + "piano", + "picked", + "pierce", + "pigment", + "piloted", + "pimple", + "pinched", + "pioneer", + "pipeline", + "pirate", + "pistons", + "pitched", + "pivot", + "pixels", + "pizza", + "playful", + "pledge", + "pliers", + "plotting", + "plus", + "plywood", + "poaching", + "pockets", + "podcast", + "poetry", + "point", + "poker", + "polar", + "ponies", + "pool", + "popular", + "portents", + "possible", + "potato", + "pouch", + "poverty", + "powder", + "pram", + "present", + "pride", + "problems", + "pruned", + "prying", + "psychic", + "public", + "puck", + "puddle", + "puffin", + "pulp", + "pumpkins", + "punch", + "puppy", + "purged", + "push", + "putty", + "puzzled", + "pylons", + "pyramid", + "python", + "queen", + "quick", + "quote", + "rabbits", + "racetrack", + "radar", + "rafts", + "rage", + "railway", + "raking", + "rally", + "ramped", + "randomly", + "rapid", + "rarest", + "rash", + "rated", + "ravine", + "rays", + "razor", + "react", + "rebel", + "recipe", + "reduce", + "reef", + "refer", + "regular", + "reheat", + "reinvest", + "rejoices", + "rekindle", + "relic", + "remedy", + "renting", + "reorder", + "repent", + "request", + "reruns", + "rest", + "return", + "reunion", + "revamp", + "rewind", + "rhino", + "rhythm", + "ribbon", + "richly", + "ridges", + "rift", + "rigid", + "rims", + "ringing", + "riots", + "ripped", + "rising", + "ritual", + "river", + "roared", + "robot", + "rockets", + "rodent", + "rogue", + "roles", + "romance", + "roomy", + "roped", + "roster", + "rotate", + "rounded", + "rover", + "rowboat", + "royal", + "ruby", + "rudely", + "ruffled", + "rugged", + "ruined", + "ruling", + "rumble", + "runway", + "rural", + "rustled", + "ruthless", + "sabotage", + "sack", + "sadness", + "safety", + "saga", + "sailor", + "sake", + "salads", + "sample", + "sanity", + "sapling", + "sarcasm", + "sash", + "satin", + "saucepan", + "saved", + "sawmill", + "saxophone", + "sayings", + "scamper", + "scenic", + "school", + "science", + "scoop", + "scrub", + "scuba", + "seasons", + "second", + "sedan", + "seeded", + "segments", + "seismic", + "selfish", + "semifinal", + "sensible", + "september", + "sequence", + "serving", + "session", + "setup", + "seventh", + "sewage", + "shackles", + "shelter", + "shipped", + "shocking", + "shrugged", + "shuffled", + "shyness", + "siblings", + "sickness", + "sidekick", + "sieve", + "sifting", + "sighting", + "silk", + "simplest", + "sincerely", + "sipped", + "siren", + "situated", + "sixteen", + "sizes", + "skater", + "skew", + "skirting", + "skulls", + "skydive", + "slackens", + "sleepless", + "slid", + "slower", + "slug", + "smash", + "smelting", + "smidgen", + "smog", + "smuggled", + "snake", + "sneeze", + "sniff", + "snout", + "snug", + "soapy", + "sober", + "soccer", + "soda", + "software", + "soggy", + "soil", + "solved", + "somewhere", + "sonic", + "soothe", + "soprano", + "sorry", + "southern", + "sovereign", + "sowed", + "soya", + "space", + "speedy", + "sphere", + "spiders", + "splendid", + "spout", + "sprig", + "spud", + "spying", + "square", + "stacking", + "stellar", + "stick", + "stockpile", + "strained", + "stunning", + "stylishly", + "subtly", + "succeed", + "suddenly", + "suede", + "suffice", + "sugar", + "suitcase", + "sulking", + "summon", + "sunken", + "superior", + "surfer", + "sushi", + "suture", + "swagger", + "swept", + "swiftly", + "sword", + "swung", + "syllabus", + "symptoms", + "syndrome", + "syringe", + "system", + "taboo", + "tacit", + "tadpoles", + "tagged", + "tail", + "taken", + "talent", + "tamper", + "tanks", + "tapestry", + "tarnished", + "tasked", + "tattoo", + "taunts", + "tavern", + "tawny", + "taxi", + "teardrop", + "technical", + "tedious", + "teeming", + "tell", + "template", + "tender", + "tepid", + "tequila", + "terminal", + "testing", + "tether", + "textbook", + "thaw", + "theatrics", + "thirsty", + "thorn", + "threaten", + "thumbs", + "thwart", + "ticket", + "tidy", + "tiers", + "tiger", + "tilt", + "timber", + "tinted", + "tipsy", + "tirade", + "tissue", + "titans", + "toaster", + "tobacco", + "today", + "toenail", + "toffee", + "together", + "toilet", + "token", + "tolerant", + "tomorrow", + "tonic", + "toolbox", + "topic", + "torch", + "tossed", + "total", + "touchy", + "towel", + "toxic", + "toyed", + "trash", + "trendy", + "tribal", + "trolling", + "truth", + "trying", + "tsunami", + "tubes", + "tucks", + "tudor", + "tuesday", + "tufts", + "tugs", + "tuition", + "tulips", + "tumbling", + "tunnel", + "turnip", + "tusks", + "tutor", + "tuxedo", + "twang", + "tweezers", + "twice", + "twofold", + "tycoon", + "typist", + "tyrant", + "ugly", + "ulcers", + "ultimate", + "umbrella", + "umpire", + "unafraid", + "unbending", + "uncle", + "under", + "uneven", + "unfit", + "ungainly", + "unhappy", + "union", + "unjustly", + "unknown", + "unlikely", + "unmask", + "unnoticed", + "unopened", + "unplugs", + "unquoted", + "unrest", + "unsafe", + "until", + "unusual", + "unveil", + "unwind", + "unzip", + "upbeat", + "upcoming", + "update", + "upgrade", + "uphill", + "upkeep", + "upload", + "upon", + "upper", + "upright", + "upstairs", + "uptight", + "upwards", + "urban", + "urchins", + "urgent", + "usage", + "useful", + "usher", + "using", + "usual", + "utensils", + "utility", + "utmost", + "utopia", + "uttered", + "vacation", + "vague", + "vain", + "value", + "vampire", + "vane", + "vapidly", + "vary", + "vastness", + "vats", + "vaults", + "vector", + "veered", + "vegan", + "vehicle", + "vein", + "velvet", + "venomous", + "verification", + "vessel", + "veteran", + "vexed", + "vials", + "vibrate", + "victim", + "video", + "viewpoint", + "vigilant", + "viking", + "village", + "vinegar", + "violin", + "vipers", + "virtual", + "visited", + "vitals", + "vivid", + "vixen", + "vocal", + "vogue", + "voice", + "volcano", + "vortex", + "voted", + "voucher", + "vowels", + "voyage", + "vulture", + "wade", + "waffle", + "wagtail", + "waist", + "waking", + "wallets", + "wanted", + "warped", + "washing", + "water", + "waveform", + "waxing", + "wayside", + "weavers", + "website", + "wedge", + "weekday", + "weird", + "welders", + "went", + "wept", + "were", + "western", + "wetsuit", + "whale", + "when", + "whipped", + "whole", + "wickets", + "width", + "wield", + "wife", + "wiggle", + "wildly", + "winter", + "wipeout", + "wiring", + "wise", + "withdrawn", + "wives", + "wizard", + "wobbly", + "woes", + "woken", + "wolf", + "womanly", + "wonders", + "woozy", + "worry", + "wounded", + "woven", + "wrap", + "wrist", + "wrong", + "yacht", + "yahoo", + "yanks", + "yard", + "yawning", + "yearbook", + "yellow", + "yesterday", + "yeti", + "yields", + "yodel", + "yoga", + "younger", + "yoyo", + "zapped", + "zeal", + "zebra", + "zero", + "zesty", + "zigzags", + "zinger", + "zippers", + "zodiac", + "zombie", + "zones", + "zoom"] + + +n = len(words) + +def mn_len(): + return len(words) + +def mn_words(): + return words + +# Note about US patent no 5892470: Here each word does not represent a given digit. +# Instead, the digit represented by a word is variable, it depends on the previous word. + +def mn_swap_endian_4byte(st): + #this is from moneromoo's code + r = st[6:8]+st[4:6]+st[2:4]+st[0:2] + return r + +def mn_encode( message ): + out = [] + n = len(words) + for i in range(0, len(message), 8): + message = message[0:i] + mn_swap_endian_4byte(message[i:i+8]) + message[i+8:] + #print(len(st[i:i+8])) + for i in range(len(message)/8): + word = message[8*i:8*i+8] + x = int(word, 16) + w1 = (x%n) + w2 = ((x//n) + w1)%n + w3 = (((x//n)//n) + w2)%n + out += [ words[w1], words[w2], words[w3] ] + return ' '.join(out) + +def mn_decode( wlist ): + out = '' + n = len(words) + for i in range(len(wlist)/3): #note 24 / 3 = 8... 12 / 3 = 4.. + word1, word2, word3 = wlist[3*i:3*i+3] + w1 = words.index(word1) + w2 = words.index(word2) + w3 = words.index(word3) + x = w1 +n*((n + w2-w1)%n) +n*n*((n + w3-w2)%n) #as an int + b = '%08x'%x #this is big endian! + out += mn_swap_endian_4byte(b) + + return out + + +if __name__ == '__main__': + import sys + if len( sys.argv ) == 1: + print 'I need arguments: a hex string to encode, or a list of words to decode' + elif len( sys.argv ) == 2: + print ' '.join(mn_encode(sys.argv[1])) + else: + print mn_decode(sys.argv[1:]) diff --git a/source-code/MiniNero/mrl_notes0.4.hash b/source-code/MiniNero/mrl_notes0.4.hash new file mode 100644 index 0000000..2888d29 --- /dev/null +++ b/source-code/MiniNero/mrl_notes0.4.hash @@ -0,0 +1,6 @@ +> python btcProof.py mrl_notes0.4_copy.pdf +779 +0 +('checksum', '\xd3DC~') +15jVTLpbuU6cH39aqDxWWSb1UnKS2J7MbT +https://blockchain.info/address/15jVTLpbuU6cH39aqDxWWSb1UnKS2J7MbT diff --git a/source-code/MiniNero/mrl_notes0.4_copy.pdf b/source-code/MiniNero/mrl_notes0.4_copy.pdf new file mode 100644 index 0000000..f7243f2 Binary files /dev/null and b/source-code/MiniNero/mrl_notes0.4_copy.pdf differ diff --git a/source-code/MiniNero/mrl_notes_v0.3.hash b/source-code/MiniNero/mrl_notes_v0.3.hash new file mode 100644 index 0000000..8d9c01b --- /dev/null +++ b/source-code/MiniNero/mrl_notes_v0.3.hash @@ -0,0 +1,8 @@ +15 +0 +('checksum', '\xe2\xee\x11O') +bitcoin:12axbjZYAasGTnC9ADsaQfmAjEBYpWf82z?amount=0.0001 +15 +0 +('checksum', '\xe2\xee\x11O') +12axbjZYAasGTnC9ADsaQfmAjEBYpWf82z diff --git a/source-code/MiniNero/mrl_notes_v0.3.pdf b/source-code/MiniNero/mrl_notes_v0.3.pdf new file mode 100644 index 0000000..5c8726b Binary files /dev/null and b/source-code/MiniNero/mrl_notes_v0.3.pdf differ diff --git a/source-code/MiniNero/nOfNMultisig.py b/source-code/MiniNero/nOfNMultisig.py new file mode 100644 index 0000000..4ab86c2 --- /dev/null +++ b/source-code/MiniNero/nOfNMultisig.py @@ -0,0 +1 @@ +import MiniNero diff --git a/source-code/MiniNero/oldMiniNero.py b/source-code/MiniNero/oldMiniNero.py new file mode 100644 index 0000000..c794bc8 --- /dev/null +++ b/source-code/MiniNero/oldMiniNero.py @@ -0,0 +1,708 @@ +######################################################################## +# MiniNero.py +#A miniature, commented +#port of CryptoNote and +#Monero: +# crypto.cpp / crypto-ops.cpp +# +#Using Bernstein's ed25519.py for the curve stuff. +#The main point is to have a model what's happening in CryptoNote +# -Shen.Noether +# +#Note: The ring image function seems +# to take a lot of memory to run +# it will throw strange errors if +# your computer doesn't have +# enough +#Note2: +# As of yet, slightly incompatible, although mathematically equivalent. +# The discrepancies are some differences in packing and hashing. +# +# To the extent possible under law, the implementer has waived all copyright +# and related or neighboring rights to the source code in this file. +# http://creativecommons.org/publicdomain/zero/1.0/ +# +#The parts of code from Bernstein(?)'s library possibly has it's own license +# which you can dig up from http://cr.yp.to/djb.html +######################################################################## + + + +import hashlib +import struct +import base64 +import binascii +import sys +from Crypto.Util import number +import Crypto.Random.random as rand +import Keccak +from collections import namedtuple +import copy + +KEK=Keccak.Keccak(1600) +CURVE_P = (2**255 - 19) +b = 256 +q = 2**255 - 19 +l = 2**252 + 27742317777372353535851937790883648493 +BASEPOINT = "0900000000000000000000000000000000000000000000000000000000000000" + +##################################### +#Bernstein(?) Eddie Library in python +##################################### + +def H(m): + return hashlib.sha512(m).digest() + +def expmod(b,e,m): + if e == 0: return 1 + t = expmod(b,e/2,m)**2 % m + if e & 1: t = (t*b) % m + return t + +def inv(x): + return expmod(x,q-2,q) + +d = -121665 * inv(121666) +I = expmod(2,(q-1)/4,q) + +def xrecover(y): + xx = (y*y-1) * inv(d*y*y+1) + x = expmod(xx,(q+3)/8,q) + if (x*x - xx) % q != 0: x = (x*I) % q + if x % 2 != 0: x = q-x + return x + +By = 4 * inv(5) +Bx = xrecover(By) +B = [Bx % q,By % q] + +def edwards(P,Q): + x1 = P[0] + y1 = P[1] + x2 = Q[0] + y2 = Q[1] + x3 = (x1*y2+x2*y1) * inv(1+d*x1*x2*y1*y2) + y3 = (y1*y2+x1*x2) * inv(1-d*x1*x2*y1*y2) + return [x3 % q,y3 % q] + +def scalarmult(P, e): + if e == 0: return [0,1] + Q = scalarmult(P,e/2) + Q = edwards(Q,Q) + if e & 1: Q = edwards(Q,P) + return Q + +def encodeint(y): + bits = [(y >> i) & 1 for i in range(b)] + return ''.join([chr(sum([bits[i * 8 + j] << j for j in range(8)])) for i in range(b/8)]) + +def encodepoint(P): + x = P[0] + y = P[1] + bits = [(y >> i) & 1 for i in range(b - 1)] + [x & 1] + return ''.join([chr(sum([bits[i * 8 + j] << j for j in range(8)])) for i in range(b/8)]) + +def bit(h,i): + return (ord(h[i/8]) >> (i%8)) & 1 + +def public_key(sk): + A = scalarmult(B,sk) + return encodepoint(A) + + +def Hint(m): + h = H(m) + return sum(2**i * bit(h,i) for i in range(2*b)) + +def signature(m,sk,pk): + h = H(sk) + a = 2**(b-2) + sum(2**i * bit(h,i) for i in range(3,b-2)) + r = Hint(''.join([h[i] for i in range(b/8,b/4)]) + m) + R = scalarmult(B,r) + S = (r + Hint(encodepoint(R) + pk + m) * a) % l + return encodepoint(R) + encodeint(S) + +def isoncurve(P): + x = P[0] + y = P[1] + return (-x*x + y*y - 1 - d*x*x*y*y) % q == 0 + +def decodeint(s): + return sum(2**i * bit(s,i) for i in range(0,b)) + +def decodepoint(s): + y = sum(2**i * bit(s,i) for i in range(0,b-1)) + x = xrecover(y) + if x & 1 != bit(s,b-1): x = q-x + P = [x,y] + if not isoncurve(P): raise Exception("decoding point that is not on curve") + return P + +def checkvalid(s,m,pk): + if len(s) != b/4: raise Exception("signature length is wrong") + if len(pk) != b/8: raise Exception("public-key length is wrong") + R = decodepoint(s[0:b/8]) + A = decodepoint(pk) + S = decodeint(s[b/8:b/4]) + h = Hint(encodepoint(R) + pk + m) + if scalarmult(B,S) != edwards(R,scalarmult(A,h)): + raise Exception("signature does not pass verification") + +################################# +#curve stuff, +#mostly from https://github.com/monero-project/bitmonero/blob/1b8a68f6c1abcf481652c2cfd87300a128e3eb32/src/crypto/crypto-ops.c +#partial reference for fe things https://godoc.org/github.com/agl/ed25519/edwards25519 +#note ge is the edwards version of the curve +#fe is the monty version of the curve +################################# + + +#NOT USED IN MININERO - Use ge_scalarmult_base +def ge_fromfe_frombytesvartime(s): + #inputs something s (I assume in bytes) + #inputs into montgomery form (fe) + #then, turns it into edwards form (ge) + #then r is the edwards curve point r-> + #reference 1: http://crypto.stackexchange.com/questions/9536/converting-ed25519-public-key-to-a-curve25519-public-key?rq=1 + #reference 2: https://github.com/orlp/ed25519/blob/master/src/key_exchange.c + #best reference https://www.imperialviolet.org/2013/12/25/elligator.html + + #the point of this function is to return a ge_p2 from an int s + #whereas, the similar function ge_frombytes_vartime returns a gep3 + return + +def ge_double_scalarmult_base_vartime(aa, AA, bb): + #a very nice comment in the CN code for this one! + #r = a * A + b * B + #where a = a[0]+256*a[1]+...+256^31 a[31]. + #and b = b[0]+256*b[1]+...+256^31 b[31]. + #B is the Ed25519 base point (x,4/5) with x positive. + #cf also https://godoc.org/github.com/agl/ed25519/edwards25519 + tmpa = ge_scalarmult(aa, AA) + tmpb = ge_scalarmult(bb, BASEPOINT) + return toHex(edwards(toPoint(tmpa), toPoint(tmpb))) + +def ge_double_scalarmult_vartime(aa, AA, bb, BB): + #a very nice comment in the CN code for this one! + #r = a * A + b * B + #where a = a[0]+256*a[1]+...+256^31 a[31]. + #and b = b[0]+256*b[1]+...+256^31 b[31]. + #B is the Ed25519 base point (x,4/5) with x positive. + #cf also https://godoc.org/github.com/agl/ed25519/edwards25519 + tmpa = ge_scalarmult(aa, AA) + tmpb = ge_scalarmult(bb, BB) + return toHex(edwards(toPoint(tmpa), toPoint(tmpb))) + + +def toPoint(pubkey): + #turns hex key into x, y field coords + return decodepoint(pubkey.decode("hex")) + +def toHex(point): + #turns point into pubkey (reverse of toPoint) + return encodepoint(point).encode("hex") + +def ge_scalarmult(a, A): + #so I guess given any point A, and an integer a, this computes aA + #so the seecond arguement is definitely an EC point + # from http://cr.yp.to/highspeed/naclcrypto-20090310.pdf + # "Alice's secret key a is a uniform random 32-byte string then + #clampC(a) is a uniform random Curve25519 secret key + #i.e. n, where n/8 is a uniform random integer between + #2^251 and 2^252-1 + #Alice's public key is n/Q compressed to the x-coordinate + #so that means, ge_scalarmult is not actually doing scalar mult + #clamping makes the secret be between 2^251 and 2^252 + #and should really be done + #print(toPoint(A)) + return encodepoint(scalarmult(toPoint(A), a)).encode("hex") # now using the eddie function + +def ge_scalarmult_base(a): + #in this function in the original code, they've assumed it's already clamped ... + #c.f. also https://godoc.org/github.com/agl/ed25519/edwards25519 + #it will return h = a*B, where B is ed25519 bp (x,4/5) + #and a = a[0] + 256a[1] + ... + 256^31 a[31] + #it assumes that a[31 <= 127 already + return ge_scalarmult(8*a, BASEPOINT) + +#NOT USED IN MININERO - use ge_scalarmult_base +def ge_frombytes_vartime(key): + #https://www.imperialviolet.org/2013/12/25/elligator.html + #basically it takes some bytes of data + #converts to a point on the edwards curve + #if the bytes aren't on the curve + #also does some checking on the numbers + #ex. your secret key has to be at least >=4294967277 + #also it rejects certain curve points, i.e. "if x = 0, sign must be positive + return 0 + +#NOT USED IN MININERO - unecessary as all operations are from hex +def ge_p1p1_to_p2(p): + #there are two ways of representing the points + ##http://code.metager.de/source/xref/lib/nacl/20110221/crypto_sign/edwards25519sha512batch/ref/ge25519.c + #http://www.hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html + return + +#NOT USED IN MININERO -unnecessary as operations are from hex +def ge_p2_dbl(): + #basically it doubles a point and doubles it + #c.f. Explicit Formulas for Doubling (towards bottom) + #Explicit formulas for doubling + #http://www.hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html + return + +#NOT USED IN MININERO - unnecessary as operations are from hex +def ge_p3_to_p2(): + #basically, it copies a point in 3 coordinates to another point + #c.f. Explicit Formulas for Doubling (towards bottom) + #Explicit formulas for doubling + #http://www.hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html + return + +def ge_mul8(P): + #ok, the point of this is to double three times + #and the point is that the ge_p2_dbl returns a point in the p1p1 form + #so that's why have to convert it first and then double + return ge_scalarmult(8, P) + +def sc_reduce(s): + #inputs a 64 byte int and outputs the lowest 32 bytes + #used by hash_to_scalar, which turns cn_fast_hash to number.. + r = longToHex(s) + r = r[64::] + #print("before mod p", r) + return hexToLong(r) % CURVE_P + +def sc_reduce32(data): + #ok, the code here is exactly the same as sc_reduce + #(which is default lib sodium) + #except it is assumed that your input + #s is alread in the form: + # s[0]+256*s[1]+...+256^31*s[31] = s + #and the rest is just reducing mod l + #so basically take a 32 byte input, and reduce modulo the prime + return data % CURVE_P + +def sc_mulsub(a, b, c): + #takes in a, b, and c + #This is used by the regular sig + #i.e. in generate_signature + #returns c-ab mod l + a = number.bytes_to_long(a[::-1]) + b = number.bytes_to_long(b[::-1]) + c = number.bytes_to_long(c[::-1]) + return (c - a * b) % CURVE_P + + +########################################## +#Hashing +#this is where keccak, H_p, and H_s come in.. +###################################### + +def cn_fast_hash(key, size): + #see ReadMeKeccak.txt + return KEK.Keccak((size,key.encode("hex")),1088,512,256,False) + + +################################################### +#CryptoNote Things +#Mainly from https://github.com/monero-project/bitmonero/blob/1b8a68f6c1abcf481652c2cfd87300a128e3eb32/src/crypto/crypto.cpp +################################################### + +def random_scalar(): + tmp = rand.getrandbits(64 * 8) # 8 bits to a byte ... + tmp = sc_reduce(tmp) #-> turns 64 to 32 (note sure why don't just gt 32 in first place ... ) + return tmp + +def hash_to_scalar(data, length): + #this one is H_s(P) + #relies on cn_fast_hash and sc_reduce32 (which makes an int smaller) + #the input here is not necessarily a 64 byte thing, and that's why sc_reduce32 + res = hexToLong(cn_fast_hash(data, length)) + return sc_reduce32(res) + + +def generate_keys(): + #should return a secret key and public key pair + #once you have the secret key, + #then the public key be gotten from 25519 function + #so just need to generate random + #first generate random 32-byte(256 bit) integer, copy to result + #ok, just sc_reduce, what that does is takes 64 byte int, turns into 32 byte int... + #so sc_reduce is legit and comes from another library http://hackage.haskell.org/package/ed25519-0.0.2.0/src/src/cbits/sc_reduce.c + #as far as I can tell, sc + #basically this gets you an int which is sufficiently large + #import Crypto.Random.random as rand + rng = random_scalar() + #sec = hex(rng).rstrip("L").lstrip("0x") or "0" + sec = sc_reduce32(rng) + pub = public_key(sec).encode("hex") + #pub = ge_scalarmult_base(sec) + #print(rng.decode("hex")) + #sec = curve25519_mult(rng, basepoint) + + #the point of ge_p3_tobytes here is just store as bytes... + #and p3 is a way to store points on the ge curve + return sec, pub + +def check_key(key): + #inputs a public key, and outputs if point is on the curve + return isoncurve(toPoint(key)) + +def secret_key_to_public_key(secret_key): + #the actual function returns as bytes since they mult the fast way. + if sc_check(secret_key) != 0: + print "error in sc_check" + quit() + return public_key(secret_key) + +def hash_to_ec(key): + #takes a hash and turns into a point on the curve + #In MININERO, I'm not using the byte representation + #So this function is superfluous + h = hash_to_scalar(key, len(key)) + point = ge_scalarmult_base(h) + return ge_mul8(point) + + +def generate_key_image(public_key, secret_key): + #should return a key image as defined in whitepaper + if sc_check(secret_key) != 0: + print"sc check error in key image" + point = hash_to_ec(public_key) + point2 = ge_scalarmult(secret_key, point) + return point2 + +def generate_ring_signature(prefix, image, pubs, pubs_count, sec, sec_index): + #returns a ring signature + if sec_index >= pubs_count: + print "bad index of secret key!" + quit() + if ge_frombytes_vartime(image) != 0: + print"bad image!" + quit() + summ = 0 + aba = [0 for xx in range(pubs_count)] + abb = [0 for xx in range(pubs_count)] + sigc = [0 for xx in range(pubs_count)] #these are the c[i]'s from the whitepaper + sigr =[0 for xx in range(pubs_count)] #these are the r[i]'s from the whitepaper + for ii in range(0, pubs_count): + if (ii == sec_index): + kk = random_scalar() + tmp3 = ge_scalarmult_base(kk) #L[i] for i = s + aba[ii] = tmp3 + tmp3 = hash_to_ec(pubs[ii]) #R[i] for i = s + abb[ii] = ge_scalarmult(kk, tmp3) + else: + k1 = random_scalar() #note this generates a random scalar in the correct range... + k2 = random_scalar() + if ge_frombytes_vartime(pubs[ii]) != 0: + print "error in ring sig!!!" + quit() + tmp2 = ge_double_scalarmult_base_vartime(k1, pubs[ii], k2) #this is L[i] for i != s + aba[ii] = tmp2 + tmp3 = hash_to_ec(pubs[ii]) + abb[ii] = ge_double_scalarmult_vartime(k2, tmp3, k1, image) #R[i] for i != s + sigc[ii] = k1 #the random c[i] for i != s + sigr[ii] = k2 #the random r[i] for i != s + summ = sc_add(summ, sigc[ii]) #summing the c[i] to get the c[s] via page 9 whitepaper + + buf = struct.pack('64s', prefix) + for ii in range(0, pubs_count): + buf += struct.pack('64s', aba[ii]) + buf += struct.pack('64s', abb[ii]) + hh = hash_to_scalar(buf,len(buf)) + sigc[sec_index] = sc_sub(hh, summ) # c[s] = hash - sum c[i] mod l + sigr[sec_index] = sc_mulsub(sigc[sec_index], sec, kk) # r[s] = q[s] - sec * c[index] + return image, sigc, sigr + + + + + + +def check_ring_signature(prefix, key_image, pubs, pubs_count, sigr, sigc): + #from https://github.com/monero-project/bitmonero/blob/6a70de32bf872d97f9eebc7564f1ee41ff149c36/src/crypto/crypto.cpp + #this is the "ver" algorithm + aba = [0 for xx in range(pubs_count)] + abb = [0 for xx in range(pubs_count)] + + if ge_frombytes_vartime(key_image) != 0: + print "ring image error in checking sigs" + quit() + summ = 0 + buf = struct.pack('64s', prefix) + for ii in range(0, pubs_count): + if ((sc_check(sigc[ii]) != 0) or (sc_check(sigr[ii]) != 0)): + print "failed sc_check in check ring sigs" + quit() + if ge_frombytes_vartime(pubs[ii]) != 0: + print "public key is a bad point in ring sigs" + quit() + + tmp2 = ge_double_scalarmult_base_vartime(sigc[ii], pubs[ii], sigr[ii]) + aba[ii] = tmp2 + tmp3 = hash_to_ec(pubs[ii]) + tmp2 = ge_double_scalarmult_vartime(sigr[ii], tmp3, sigc[ii], key_image) + abb[ii] = tmp2 + summ = sc_add(summ, sigc[ii]) + for ii in range(0, pubs_count): + buf += struct.pack('64s', aba[ii]) + buf += struct.pack('64s', abb[ii]) + + hh = hash_to_scalar(buf,len(buf)) + hh = sc_sub(hh, summ) + return sc_isnonzero(hh) == 0 + +def generate_key_derivation(key1, key2): + #key1 is public key of receiver Bob (see page 7) + #key2 is Alice's private + #this is a helper function for the key-derivation + #which is the generating one-time key's thingy + if sc_check(key2) != 0: + #checks that the secret key is uniform enough... + print"error in sc_check in keyder" + quit() + if ge_frombytes_vartime(key1) != 0: + print "didn't pass curve checks in keyder" + quit() + + point = key1 ## this ones the public + point2 = ge_scalarmult( key2, point) + #print("p2", encodepoint(point2).encode("hex")) + point3 = ge_mul8(point2) #This has to do with n==0 mod 8 by dedfinition, c.f. the top paragraph of page 5 of http://cr.yp.to/ecdh/curve25519-20060209.pdf + #and also c.f. middle of page 8 in same document (Bernstein) + return point3 + +def derivation_to_scalar(derivation, output_index): + #this function specifically hashes your + #output index (for the one time keys ) + #in order to get an int, so we can do ge_mult_scalar + #buf = s_comm(d = derivation, o = output_index) + buf2 = struct.pack('64sl', derivation, output_index) + #print(buf2) + return hash_to_scalar(buf2, len(buf2)) + +def derive_public_key(derivation, output_index, base ): + if ge_frombytes_vartime(base) != 0: #check some conditions on the point + print"derive pub key bad point" + quit() + point1 = base + scalar = derivation_to_scalar(derivation, output_index) + point2 = ge_scalarmult_base(scalar) + point3 = point2 #I think the cached is just for the sake of adding + #because the CN code adds using the monty curve + point4 = edwards(toPoint(point1), toPoint(point3)) + return point4 + +def sc_add(aa, bb): + return (aa + bb ) %CURVE_P +def sc_sub(aa, bb): + return (aa - bb ) %CURVE_P + +def sc_isnonzero(c): + return (c %CURVE_P != 0 ) + +def sc_mulsub(aa, bb, cc): + return (cc - aa * bb ) %CURVE_P + +def derive_secret_key(derivation, output_index, base): + #outputs a derived key... + if sc_check(base) !=0: + print"cs_check in derive_secret_key" + scalar = derivation_to_scalar(derivation, output_index) + return base + scalar + +class s_comm: + def __init__(self, **kwds): + self.__dict__.update(kwds) + +def generate_signature(prefix_hash, pub, sec): + #gets the "usual" signature (not ring sig) + #buf = s_comm(h=prefix_hash, key=pub, comm=0) #see the pack below + k = random_scalar() + tmp3 = ge_scalarmult_base(k) + buf2 = struct.pack('64s64s64s', prefix_hash, pub, tmp3) + sigc = hash_to_scalar(buf2, len(buf2)) + return sc_mulsub(sigc, sec, k), sigc + +def check_signature(prefix_hash, pub, sigr, sigc): + #checking the normal sigs, not the ring sigs... + if ge_frombytes_vartime(pub) !=0: + print "bad point, check sig!" + quit() + if (sc_check(sigc) != 0) or (sc_check(sigr) != 0): + print"sc checksig error!" + quit() + tmp2 = ge_double_scalarmult_base_vartime(sigc, pub, sigr) + buf2 = struct.pack('64s64s64s', prefix_hash, pub, tmp2) + c = hash_to_scalar(buf2, len(buf2)) + c = sc_sub(c, sigc) + return sc_isnonzero(c) == 0 + +def hexToLong(a): + return number.bytes_to_long(a.decode("hex")) + +def longToHex(a): + return number.long_to_bytes(a).encode("hex") + +def hexToBits(a): + return a.decode("hex") + +def bitsToHex(a): + return a.encode("hex") + +def sc_check(key): + #in other words, keys which are too small are rejected + return 0 + #s0, s1, s2, s3, s4, s5, s6, s7 = load_4(longToHex(key)) + #return (signum_(1559614444 - s0) + (signum_(1477600026 - s1) << 1) + (signum_(2734136534 - s2) << 2) + (signum_(350157278 - s3) << 3) + (signum_(-s4) << 4) + (signum_(-s5) << 5) + (signum_(-s6) << 6) + (signum_(268435456 - s7) << 7)) >> 8 + + +if __name__ == "__main__": + if sys.argv[1] == "rs": + #test random_scalar + print(longToHex(random_scalar())) + if sys.argv[1] == "keys": + #test generating keys + x,P = generate_keys() + print"generating keys:" + print("secret:") + print( x) + print("public:") + print( P) + print("the point P") + print(decodepoint(P.decode("hex"))) + if sys.argv[1] == "fasthash": + mysecret = "99b66345829d8c05041eea1ba1ed5b2984c3e5ec7a756ef053473c7f22b49f14" + output_index = 2 + buf2 = struct.pack('64sl', mysecret, output_index) + #buf2 = pickle(buf) + #print(buf2) + print(buf2) + print(cn_fast_hash(mysecret, len(mysecret))) + print(cn_fast_hash(buf2, len(buf2))) + + if sys.argv[1] == "hashscalar": + data = "ILOVECATS" + print(cn_fast_hash(data, len(data))) + print(hash_to_scalar(data, len(data))) + if sys.argv[1] == "hashcurve": + data = "ILOVECATS" + print(cn_fast_hash(data, len(data))) + print(hash_to_ec(data)) + + if sys.argv[1] == "checkkey": + x, P = generate_keys() + print(check_key(P)) + if sys.argv[1] == "secpub": + #testing for secret_key_to_public_key + #these test vecs were for the monty implementation + mysecret = "99b66345829d8c05041eea1ba1ed5b2984c3e5ec7a756ef053473c7f22b49f14" + mypublic = "b1c652786697a5feef36a56f36fde524a21193f4e563627977ab515f600fdb3a" + mysecret, P = generate_keys() + pub2 = secret_key_to_public_key(mysecret) + print(pub2.encode("hex")) + if sys.argv[1] == "keyder": + #testing for generate_key_derivation + x,P = generate_keys() + print(x, P) + print(generate_key_derivation(P, x)) + + if sys.argv[1] == "dersca": + #testing for derivation_to_scalar + #this is getting a scalar for one-time-keys rH_s(P) + aa, AA = generate_keys() + bb, BB = generate_keys() + for i in range(0,3): + rr, ZZ = generate_keys() + derivation = generate_key_derivation(BB, aa) + s = derivation_to_scalar(derivation, i) + print(s) + if sys.argv[1] == "derpub": + x, P = generate_keys() + output_index = 5 + keyder = generate_key_derivation(P, x) + print("keyder", keyder) + print(derive_public_key(keyder, output_index, P)) + if sys.argv[1] == "dersec": + x, P = generate_keys() + output_index = 5 + keyder = generate_key_derivation(P, x) + print("keyder", keyder) + print(derive_secret_key(keyder, output_index, x)) + if sys.argv[1] == "testcomm": + a = "99b66345829d8c05041eea1ba1ed5b2984c3e5ec7a756ef053473c7f22b49f14" + co2 = struct.pack('hhl', 1, 2, 3) + print(co2.encode("hex")) #sometimes doesn't print if your terminal doesn't have unicode + + if sys.argv[1] == "gensig": + #testing generate_signature + print"" + prefix = "destination" + sec, pub = generate_keys() # just to have some data to use .. + print(generate_signature(prefix, pub, sec)) + if sys.argv[1] == "checksig": + prefix = "destination" + sec, pub = generate_keys() # just to have some data to use .. + sir, sic = generate_signature(prefix, pub, sec) + print(sir, sic) + print(check_signature(prefix, pub, sir, sic)) + if sys.argv[1] == "keyimage": + x, P = generate_keys() + xb = 14662008266461539177776197088974240017016792645044069572180060425138978088469 + Pb = "1d0ecd1758a685d88b39567f491bc93129f59c7dae7182bddc4e6f5ad38ba462" + + I = generate_key_image(Pb, xb) + print(I) + if sys.argv[1] == "ringsig": + #these are fixed since my computer runs out of memory + xa = 54592381732429499113512315392038591381134951436395595620076310715410049314218 + Pa = "3c853b5a82912313b179e40d655003c5e3112c041fcf755c3f09d2a8c64d9062" + xb = 14662008266461539177776197088974240017016792645044069572180060425138978088469 + Pb = "1d0ecd1758a685d88b39567f491bc93129f59c7dae7182bddc4e6f5ad38ba462" + ima = "0620b888780351a3029dfbf1a5c45a89816f118aa63fa807d51b959cb3c5efc9" + ima, sic, sir = generate_ring_signature("dest", ima, [Pa, Pb],2, xb, 1) + + print("ima",ima) + print("sic", sir) + print("sir", sic) + print(check_ring_signature("dest", ima, [Pa, Pb], 2, sir, sic)) + + if sys.argv[1] == "conv": + #testing reduction + a = "99b66345829d8c05041eea1ba1ed5b2984c3e5ec7a756ef053473c7f22b49f14" + print(a) + r = hexToLong(a) + print(r) + a = longToHex(r) + print(a) + if sys.argv[1] == "red": + a = "99b66345829d8c05041eea1ba1ed5b2984c3e5ec7a756ef053473c7f22b49f14" + tmp = rand.getrandbits(64 * 8) + tmp2 = longToHex(tmp) + print(tmp2) + tmp3 = longToHex(sc_reduce(tmp)) + print(tmp3) + tmp4 = sc_reduce32(CURVE_P + 1) + print(tmp4) + tmp5 = sc_reduce(CURVE_P + 1) + print(tmp5) + if sys.argv[1] == "gedb": + x, P = generate_keys() + print(ge_double_scalarmult_base_vartime(x, P, x)) + if sys.argv[1] == "sck": + #testing sc_check + x, P = generate_keys() + print(sc_check(x)) + print("nonreduced", longToHex(x)) + print("reduced", sc_reduce32_2(x)) + print("check reduced", sc_check(hexToLong(sc_reduce32_2(x)))) + + + + + + + + diff --git a/source-code/MiniNero/rct.py b/source-code/MiniNero/rct.py new file mode 100644 index 0000000..9d8891b --- /dev/null +++ b/source-code/MiniNero/rct.py @@ -0,0 +1,10 @@ +import hashlib #for signatures +import math +import Crypto.Random.random as rand +import Keccak #cn_fast_hash +import mnemonic #making 25 word mnemonic to remember your keys +import binascii #conversion between hex, int, and binary. Also for the crc32 thing +import ed25519 #Bernsteins python ed25519 code from cr.yp.to +import zlib + + diff --git a/source-code/MiniNero/scrap.py b/source-code/MiniNero/scrap.py new file mode 100644 index 0000000..0d122e4 --- /dev/null +++ b/source-code/MiniNero/scrap.py @@ -0,0 +1,5 @@ +import ed25519 +import MiniNero +import binascii + +print(MiniNero.getHForCT()) diff --git a/source-code/MiniNero/test.hash b/source-code/MiniNero/test.hash new file mode 100644 index 0000000..14952f5 --- /dev/null +++ b/source-code/MiniNero/test.hash @@ -0,0 +1 @@ +255c646f63756d656e74636c6173735b313170742c4368696361676f5d7b75757468657369737d0a5c646f63756d656e74636c6173735b313270742c4368696361676f5d7b757574686573697332657d202566726f6d204f6d27730a0a5c6c6574205c70726f6f66203d205c72656c617820254920646f6e2774206b6e6f77207768792c20627574206974206c65747320616d7374686d20626520696e636c756465640a5c6c6574205c74656e726d203d205c726d200909252054686973206973207573656420696e206669672a2e7465780a0a0a5c7573657061636b6167657b616d7373796d627d0a5c7573657061636b6167657b7468657369737d0a5c7573657061636b6167657b67726170686963787d0a5c7573657061636b6167657b616d736d6174682c616d73666f6e74732c616d7374686d2c616d7373796d622c756c656d7d0a5c7573657061636b6167657b6d617468727366737d0a0a2520546865207061636b616765732027666c61667465722720616e642027616674657270616765272077696c6c206169642066696775726520706c6163656d656e740a5c7573657061636b6167657b666c61667465727d0a5c7573657061636b6167657b6166746572706167657d0a0a5c7573657061636b6167657b766572626174696d7d2025492776652061646465642074686973202d20746f20636f6d70696c65206d7920636f6d6d656e74730a0a5c7573657061636b6167657b636f6c6f727d0a5c7573657061636b6167655b616c6c5d7b78797d0a0a2566726f6d206f6d27730a205c746578747769647468203d203620696e205c686f66667365743d302e3235696e200a205c74657874686569676874203d392e3020696e205c6f6464736964656d617267696e203d20302e3020696e205c6576656e736964656d617267696e203d20302e3020696e205c746f706d617267696e203d0a2d302e3520696e205c68656164686569676874203d20302e3020696e205c68656164736570203d20302e3520696e0a5c706172736b6970203d20302e3120696e0a0a0a0a5c646566696e65636f6c6f727b6461726b677265656e7d7b7267627d7b302e302c20302e342c20302e307d0a5c646566696e65636f6c6f727b6461726b626c75657d7b7267627d7b302e302c20302e302c20302e367d0a5c646566696e65636f6c6f727b6461726b7265647d7b7267627d7b302e362c20302e302c20302e307d0a0a25204d616b6520737572652073756266696775726573206861766520706172656e7468657365732061726f756e64207468656d20657665727977686572650a255c72656e6577636f6d6d616e645c7468657375626669677572657b285c616c70687b7375626669677572657d297d0a25204d616b6520737572652073756266696775726573206861766520706172656e7468657365732061726f756e64207468656d20657665727977686572650a255c72656e6577636f6d6d616e645c7468657375626669677572657b285c616c70687b7375626669677572657d297d0a2574657374696e67206f7665726c656166206769742061636365737320776974682061206e657720636f6d6d656e740a0a25696e20706c616365206f66204f6d2773207468656f72656d20646566696e6974696f6e732c20492776652075736564206d696e652066726f6d204d4d4154302e310a0a0a2566726f6d206f6d27730a5c6e65777468656f72656d7b7468656f72656d7d7b5468656f72656d7d5b636861707465725d0a5c6e65777468656f72656d7b6c656d6d617d5b7468656f72656d5d7b4c656d6d617d0a5c6e65777468656f72656d7b70726f706f736974696f6e7d5b7468656f72656d5d7b50726f706f736974696f6e7d0a5c6e65777468656f72656d7b636f726f6c6c6172797d5b7468656f72656d5d7b436f726f6c6c6172797d0a5c6e65777468656f72656d7b636f6e6a6563747572657d5b7468656f72656d5d7b436f6e6a6563747572657d0a5c6e65777468656f72656d2a7b6d61696e74686d617d7b5468656f72656d20417d200a5c6e65777468656f72656d2a7b6d61696e74686d627d7b5468656f72656d20427d0a5c6e65777468656f72656d2a7b6d61696e74686d637d7b5468656f72656d20437d0a5c6e65777468656f72656d2a7b6d61696e74686d647d7b5468656f72656d20447d0a5c6e65777468656f72656d2a7b6d61696e74686d657d7b5468656f72656d20457d0a5c6e65777468656f72656d2a7b6d61696e74686d667d7b5468656f72656d20467d0a5c6e65777468656f72656d2a7b6d61696e74686d677d7b5468656f72656d20477d0a5c6e65777468656f72656d2a7b6d61696e7468656f72656d7d7b5468656f72656d7d0a5c7468656f72656d7374796c657b72656d61726b7d0a5c6e65777468656f72656d7b72656d61726b7d5b7468656f72656d5d7b52656d61726b7d0a5c6e65777468656f72656d7b636c61696d7d5b7468656f72656d5d7b436c61696d7d20254927766520616464656420746869730a255c6e756d62657277697468696e7b6571756174696f6e7d7b73656374696f6e7d0a255c6e756d62657277697468696e7b73656374696f6e7d7b636861707465727d0a5c7468656f72656d7374796c657b646566696e6974696f6e7d0a5c6e65777468656f72656d7b646566696e6974696f6e7d5b7468656f72656d5d7b446566696e6974696f6e7d0a5c7468656f72656d7374796c657b646566696e6974696f6e7d0a5c6e65777468656f72656d7b6578616d706c657d5b7468656f72656d5d7b4578616d706c657d0a0a0a0a0a5c7573657061636b6167657b6c73636170657d0a255c7573657061636b6167657b6469616772616d7d0a255c7573657061636b6167657b746772696e647d0a255c696e636c7564656f6e6c797b7d202020202020202020202020202020202020202025204f6e6c792066726f6e74206d617474657220616e64206261636b206d61747465720a255c696e636c7564656f6e6c797b63686170317d202020202020202020202020202020252020706c7573206368617074657220310a255c696e636c7564656f6e6c797b63686170327d20202020202020202020202020202020252020706c7573206368617074657220320a255c696e636c7564656f6e6c797b63686170337d20202020202020202020202020202020252020706c7573206368617074657220330a255c696e636c7564656f6e6c797b617070417d20202020202020202020202020202020252020706c7573206368617074657220330a255c696e636c7564656f6e6c797b63686170312c63686170322c63686170332c63686170347d202020252020706c757320616c6c2063686170746572730a255c696e636c7564656f6e6c797b63686170312c63686170322c63686170332c63686170342c617070417d202020252020706c757320616c6c206368617074657273202620617070656e6469780a250a255c74726163696e6773746174733d3220202020202020202020202020202020252073686f7720546558206d656d6f72792075736167650a5c7469746c657b4d696e696d616c204d6f64656c7320666f722041726974686d65746963205468726565666f6c6473205c70726f746563745c5c20616e64206f7468657220636f6f6c207468696e67737d0a5c617574686f727b5061756c20416e64726577204567626572747d0a5c746865736973747970657b7468657369737d2025206f7220646973736572746174696f6e0a5c67726164756174656465616e7b436861726c657320412e2057696768747d0a5c6465706172746d656e747b4465706172746d656e74206f66204d617468656d61746963737d0a5c6465677265657b446f63746f72206f66205068696c6f736f7068797d202025206f6620446f63746f72206f66205068696c6f736f7068790a5c6465706172746d656e7463686169727b4669727374204d2e204c6173747d0a5c636f6d6d697474656563686169727b4669727374204d2e204c6173747d0a5c66697273747265616465727b4669727374204d2e204c6173747d0a5c7365636f6e647265616465727b4669727374204d2e204c6173747d0a255c74686972647265616465727b4669727374204d2e204c6173747d0a255c666f757274687265616465727b4669727374204d2e204c6173747d0a5c63686169727469746c657b50726f666573736f727d0a5c7375626d6974646174657b4d617920323031367d0a5c636f70797269676874796561727b323031367d0a252043686170746572206973206f6e65206c6576656c2c2073656374696f6e20616e642073756273656374696f6e2061726520746865206e6578742074776f206c6576656c732e0a5c666f75726c6576656c730a255c64656469636174696f6e7b466f72206d7920686f7273652c2044697869652c206574632e204120666577206c696e6573206f6e6c792e7d0a205c696e7075747069637475726574727565202025204279204a656666204d63476f7567682e20536565207575677569646520616e642070726976617465207468657369732e7374790a255c696e7075747069637475726566616c7365202520546f204e4f542070726f647563652070696374757265732c20756e636f6d6d656e742074686973206c696e650a5c626567696e7b646f63756d656e747d0a252520436f6d6d656e74206f7574206974656d7320627920696e73657274696e6720612070657263656e742025206368617261637465720a5c66726f6e746d6174746572666f726d61740a5c7469746c65706167650a5c636f70797269676874706167650a5c636f6d6d6974746565617070726f76616c0a255c72656164696e67617070726f76616c0a5c707265666163657b61627374726163747d7b41627374726163747d0a255c64656469636174696f6e706167650a255c626567696e7b65706967726170687d0a2560604e617475726520697320747279696e672076657279206861726420746f206d616b6520757320737563636565642c20627574206e617475726520646f6573206e6f7420646570656e64206f6e2075732e20576520617265206e6f7420746865206f6e6c79206578706572696d656e742e27270a255c626567696e7b666c75736872696768747d202d2d20522e204275636b6d696e737465722046756c6c6572205c7061725c656e647b666c75736872696768747d0a255c656e647b65706967726170687d0a5c736574636f756e7465727b746f6364657074687d7b347d2020202025486f77206d616e79206c6576656c7320746f20696e636c75646520696e20544f430a5c616464746f636f6e74656e74737b746f637d7b5c70726f746563745c736c6f7070797d20202020254b65657073206c6f6e672063686170746572732077697468696e20706167652023206d617267696e730a5c7461626c656f66636f6e74656e74730a5c6c6973746f66666967757265730a5c6c6973746f667461626c65730a250a25204f7074696f6e616c2066726f6e7420706167652c206d6164652066726f6d20736f7572636520226e6f746174696f6e2e746578222e0a2520496620796f7520646f6e2774206e6565642069742c207468656e20646f6e2774207573652069742e0a250a255c6f7074696f6e616c66726f6e747b4e6f746174696f6e20616e642053796d626f6c737d7b5c696e7075747b6e6f746174696f6e2e7465787d7d0a5c707265666163657b61636b6e6f776c656467657d7b41636b6e6f776c6564676d656e74737d0a5c6d61696e746578742020202020202025205374617274206e6f726d616c2070616765206e756d626572696e672e20506172747320616e6420636861707465727320666f6c6c6f772e0a256173646620666f722065646974696e6720656173652c204920616d20676f696e6720746f2066697273742065646974206f6e65206269672066696c65207769746820616c6c207468652063686170746572732c20616e64207468656e2061742074686520656e642073706c69742074686520636861707465727320696e746f207468652072656c6576616e742066696c65732c20736f20756e636f6d6d656e74207468652062656c6f772c20616e64206d6f7665207468652062656c6f7720696e746f207468652063686170746572732066696c65732c20692e652e2063686170312e746578206574632e0a255c696e636c7564657b63686170317d2025496e74726f64756374696f6e0a5c636861707465727b496e74726f64756374696f6e7d0a0a546865206d61696e207468656f72656d206f662074686973207468657369732069732074686520666f6c6c6f77696e673a0a5c626567696e7b7468656f72656d7d0a5c6c6162656c7b4d61696e5468656f72656d7d0a4c657420245c6c65667428582c5c44656c74615c7269676874292420626520612070736575646f656666656374697665206b6c742070616972206f662072656c61746976650a64696d656e73696f6e20243224206f766572206120446564656b696e6420446f6d61696e2041207769746820706572666563742072657369647565206669656c64732e20417373756d650a7468617420244b5f7b587d2b5c44656c74612420697320245c6d61746862627b517d242d436172746965722c20616e64206c6f6720736d6f6f7468206f7665720a2441242e205468656e20746865206d696e696d616c206d6f64656c206f6620245c6c65667428582c5c44656c74615c72696768742924206578697374732e200a5c656e647b7468656f72656d7d0a5468652061626f766520726573756c7420697320736f6d65776861742072656c6174656420746f2061207468656f72656d206f66204b6177616d617461205c636974657b4b6177313939342c4b6177313939387d0a77686572652068652070726f76657320746865207465726d696e616c2c2073656d69737461626c652063617365206f66207468652061626f766520617373756d696e670a6e6f20626f756e6461727920616e6420696e206368617261637465726973746963732024705c676535242e20486f77657665722c2074686520746563686e6971756573207573656420696e207468697320706170657220617265206d6f73746c7920717569746520646966666572656e742066726f6d204b6177616d61746127732070617065722c20616e6420746865206d6f7469766174696e67207465726d696e616c206361736520666f72207468652061626f7665207468656f72656d20776f756c64206d6f72652061636375726174656c79206265207468652070726f6f66206f66207465726d696e616c206d696e696d616c206d6f64656c73206f76657220612044565220676976656e206279204b61747375726120616e642055656e6f205c636974657b4b557d2e204f7468657220736f6d65776861742073696d696c617220726573756c7473206172650a74686520726563656e742070726f6f6673206f6620746865206578697374656e6365206f66207465726d696e616c20616e64206b6c74206d696e696d616c0a6d6f64656c7320726573706563746976656c7920696e20706f73697469766520636861726163746572697374696320666f72207468726565666f6c6473206f7665720a61206669656c6420696e205c636974657b48582c4269727d2e20486f77657665722c20746865206361736520636f6e7369646572656420696e20746869732061727469636c650a6973206f662067656f6d65747269632064696d656e73696f6e2024322420616e642061726974686d657469632064696d656e73696f6e202431242c207261746865720a7468616e2067656f6d65747269632064696d656e73696f6e2024332420616e642061726974686d657469632064696d656e73696f6e202430242e20416e6f7468657220736f6d65776861742073696d696c617220726573756c7420696e2067656f6d65747269632064696d656e73696f6e202433242c2061726974686d657469632064696d656e73696f6e2024302420616e642063686172616374657269737469632024703e3524206973205c636974657b424952323031357d20776865726520746865206578697374656e6365206f66206c6f67206d696e696d616c206d6f64656c73206f766572206120637572766520696e20657175616c2063686172616374657269737469632069732070726f76656e20286e6f7465207468617420746865207468656f72656d205c7265667b4d61696e5468656f72656d7d2063616e206170706c7920696e20657175616c206368617261637465726973746963206f7665722061206669656c642061732077656c6c206576656e20776974686f757420746865207265737472696374696f6e20746861742024703e3524292e200a0a205468656f72656d205c7265667b4d61696e5468656f72656d7d2069732074686520726573756c74206f66206170706c79696e672074686520746563686e6971756573206f66205c636974657b434c7d2028696e0a7468652062696720636173652920616e64205c636974657b484d58323031347d2028696e2067656e6572616c2920616674657220616368696576696e6720612067656e6572616c697a6174696f6e0a6f66205375682773205468656f72656d206f6e2074686520696e76617269616e6365206f6620706c75726967656e657261205c636974657b5375687d20286e616d656c790a746f204b6177616d617461204c6f67205465726d696e616c205061697273292e2046696e616c6c792074686520726573756c7420697320676c6f62616c697a656420746f206120446564656b696e6420446f6d61696e20696e20612073696d696c6172206d616e6e657220746f205c636974657b4b6177313939347d2e205468616e6b7320746f206d792061647669736f722c2050726f666573736f72204861636f6e0a666f722068656c7020696e20646562756767696e6720736f6d65206f66207468652070726f6f667320616e6420666f722068656c7066756c2073756767657374696f6e732e200a0a0a0a0a0a0a0a255c696e636c7564657b63686170327d2025496e76617269616e6365206f66206c6f6720706c75726967656e657261206f766572206476720a0a5c636861707465727b496e76617269616e6365206f66204c6f6720506c75726967656e6572617d5c6c6162656c7b63686170327d0a255c6669786368617074657268656164696e6720252055736520746869732069662073656374696f6e20666f6c6c6f7773206368617074657220696d6d6564696174656c790a54686520707572706f7365206f662074686973206368617074657220697320746f20636f6e736964657220746865206d697865642063686172616374657269737469630a616e616c6f677565206f66207468652066616d6f7573207468656f72656d206f662053697520696e207468652063617365206f6620616e20616c676562726169630a766172696574792024582f5224206f662072656c61746976652064696d656e73696f6e20243224206f7665722061204456522028616e6420636f6e73657175656e636573292e0a5369752773207468656f72656d207374617465730a5c626567696e7b7468656f72656d7d0a7b7d205c636974657b5369757d204c657420245c70693a585c746f5c44656c746124206265206120736d6f6f74682070726f6a6563746976652066616d696c79206f660a636f6d7061637420636f6d706c6578206d616e69666f6c647320706172616d657472697a656420627920746865206f70656e20756e697420312d6469736b20245c44656c7461242e0a417373756d652074686174207468652066616d696c7920245c70693a585c746f5c44656c746124206973206f662067656e6572616c20747970652e205468656e0a666f7220657665727920706f73697469766520696e746567657220246d242c2074686520706c75726967656e7573202464696d5f7b5c6d61746862627b437d7d5c47616d6d615c6c65667428585f7b747d2c6d4b5f7b585f7b747d7d5c726967687429240a697320696e646570656e64656e74206f662024745c696e5c44656c74612c242077686572652024585f7b747d3d5c70695e7b2d317d5c6c65667428745c726967687429240a616e6420244b5f7b585f7b747d7d24206973207468652063616e6f6e6963616c206c696e652062756e646c65206f662024585f7b747d242e200a5c656e647b7468656f72656d7d0a5468652061626f7665207468656f72656d20696e2063686172616374657269737469632024302420686173206265656e2067656e6572616c697a656420746f20616c6c0a4b6f64616972612064696d656e73696f6e7320616e6420746f204b6177616d617461206c6f672d7465726d696e616c2c206c6f6720736d6f6f74682070616972730a632e662e205c636974657b536975327d2c205c636974655b312e385d7b484d58323031307d2c20616e64205c636974657b42507d2e200a0a496e20706f7369746976652063686172616374657269737469632c207468652061626f7665207468656f72656d20696e2067656e6572616c20646f6573206e6f740a686f6c64206576656e207768656e2074686520666962657273206172652073757266616365732077697468204b6f64616972612064696d656e73696f6e202431242c0a73696e636520746865726520617265206578616d706c6573206f66204b61747375726120616e642055656e6f205c636974657b4b557d20776865726520612066696265720a776974682077696c642072616d696669636174696f6e20636175736573207468652067656f6d65747269632067656e757320746f206a756d7020726174686572207468616e0a6265696e6720636f6e7374616e7420696e207468652066616d696c792e2053696d696c61726c792c20537568205c636974657b5375687d2068617320636f6e73747275637465640a636f756e7465726578616d706c657320696e204b6f64616972612064696d656e73696f6e2024322420746f20696e76617269616e6365206f66207468652067656f6d65747269630a67656e75732e200a0a486f77657665722c20696e2074686569722070617065722c204b61747375726120616e642055656e6f20616c736f2073686f77207468617420696e2074686520636173650a6f66206120736d6f6f746820616c6765627261696320766172696574792024582f5224206f766572206120445652206f662072656c61746976652064696d656e73696f6e0a24322420776974682072657369647565206669656c6420246b2420616e64206672616374696f6e206669656c6420244b242c207468656e20245c6b617070615c6c65667428585f7b6b7d5c7269676874293d5c6b617070615c6c65667428585f7b4b7d5c7269676874292e240a536f20746865207175657374696f6e206265636f6d6573207768657468657220736f6d65206173796d70746f7469632076657273696f6e206f66205369752773207468656f72656d0a686f6c647320696e207468697320636173652e20546865207175657374696f6e20746869732061727469636c65207365656b7320746f20616e7377657220697320776865746865720a666f7220246d5c676730242c20697420686f6c64732074686174202464696d5f7b6b7d5c47616d6d615c6c65667428585f7b6b7d2c6d4b5f7b585f7b6b7d7d5c7269676874293d64696d5f7b4b7d5c47616d6d615c6c65667428585f7b4b7d2c6d4b5f7b585f7b4b7d7d5c726967687429242c0a616e64206966206d6f72652067656e6572616c6c792c207468652073616d6520686f6c647320666f72204b6177616d617461206c6f672d7465726d696e616c2070616972732e0a4173206661722061732074686520617574686f722069732061776172652c20746865206f6e6c79206578697374696e6720726573756c747320696e207468697320646972656374696f6e0a6172652074686520666f6c6c6f77696e6720726573756c742064756520746f204a756e6573637565205375682c20776869636820757365732074686520746563686e69717565730a6f66205c636974657b4b557d2c2061732077656c6c20617320612024575f7b327d242d6c696674696e67206879706f74686573697320696e20706c616365206f660a746865204b6177616d6174612d566965687765672056616e697368696e67207468656f72656d20666f72206368617261637465726973746963202430242c20616e640a6120726573756c742064756520746f2054616e616b612c20776869636820617373756d65732061206365727461696e20616d706c652064697669736f722069732061646465640a746f2074686520706169722e205375682773207468656f72656d2069733a0a5c626567696e7b7468656f72656d7d0a5c636974655b312e322e31286969292c20312e322e345d7b5375687d250a5c626567696e7b636f6d6d656e747d0a5c696e636c75646567726170686963735b6262203d2030203020323030203130302c2064726166742c20747970653d6570735d7b7061737465643533322e706e677d0a5c656e647b636f6d6d656e747d0a7b7d204c65742024522420626520612064697363726574652076616c756174696f6e2072696e672077686f7365206672616374696f6e206669656c6420244b242028726573702e0a72657369647565206669656c6420246b242920686173206368617261637465726973746963207a65726f2028726573702e2069732070657266656374206f662063686172616374657269737469630a24703e30242920616e64206c65742024582f522420626520612070726f70657220736d6f6f746820616c67656272616963207370616365206f662072656c61746976650a64696d656e73696f6e202432242e2049662024585f7b6b7d24206c6966747320746f2024575f7b327d5c6c656674286b5c7269676874292420616e642069730a6f662067656e6572616c20747970652c207468656e206f6e6520686173200a5c5b0a505f7b6d7d5c6c65667428585f7b4b7d5c7269676874293d505f7b6d7d5c6c65667428585f7b6b7d5c7269676874290a5c5d0a20666f7220657665727920696e746567657220246d5c6765322e24204966206d6f72656f7665722024585f7b6b7d24206861732072656475636564207069636172640a736368656d65207468656e2024505f7b6d7d5c6c65667428585f7b4b7d5c7269676874293d505f7b6d7d5c6c65667428585f7b6b7d5c7269676874292420666f720a616c6c20246d5c676531242e200a5c656e647b7468656f72656d7d0a5c6d6564736b69707b7d0a0a0a54616e616b612773207468656f72656d2069733a0a5c626567696e7b7468656f72656d7d0a5c636974655b372e335d7b54616e337d250a5c626567696e7b636f6d6d656e747d0a5c696e636c75646567726170686963735b6262203d2030203020323030203130302c2064726166742c20747970653d6570735d7b7061737465643533362e706e677d0a5c656e647b636f6d6d656e747d0a7b7d205c6c6162656c7b54616e616b6144494f507d4c657420245824206265206120736d6f6f74682070726f6a656374697665207468726565666f6c642e204c65740a245324206265206120736d6f6f7468207072696d652064697669736f72206f6e2024582420616e64206c65742024412420626520616e20616d706c6520245c6d61746862627b5a7d242d64697669736f720a6f6e2024582420737563682074686174200a0a28312920244b5f7b587d2b532b4124206973206e65662c20616e64200a0a28322920245c6b617070615c6c65667428532c4b5f7b537d2b417c5f7b537d5c7269676874295c6e657130242e200a0a5468656e2074686572652065786973747320246d5f7b307d5c696e5c6d61746862627b5a7d5f7b3e307d24207375636820746861742c20666f722065766572790a696e746567657220246d5c6765206d5f7b307d242c20746865206e61747572616c207265737472696374696f6e206d6170200a5c5b0a485e7b307d5c6c65667428582c6d5c6c656674284b5f7b587d2b532b415c7269676874295c7269676874295c746f20485e7b307d5c6c65667428532c6d5c6c656674284b5f7b537d2b417c5f7b537d5c7269676874295c7269676874290a5c5d0a206973207375726a6563746976652e200a5c656e647b7468656f72656d7d0a5468652070726f6f66206f66207468652061626f7665207468656f72656d207573657320736f6d6520696e746572657374696e67207472616365206f662046726f62656e6975730a6d6574686f64732077686963682061726520717569746520646966666572656e742066726f6d2074686520746563686e6971756573207573656420696e20746869730a61727469636c652e20496e20746869732061727469636c652c206d696e696d616c206d6f64656c20746563686e69717565732c20636f6d62696e656420776974680a5c636974657b4b557d20617265207573656420746f206761696e206120726573756c742073696d696c617220746f207468652061626f7665207468656f72656d730a62757420776974686f7574207468652024575f7b327d5c6c656674286b5c726967687429242d6c696674696e67206879706f746865736973206f722074686520616d706c650a245c6d61746862627b5a7d242d64697669736f72202441242c20616e642077697468207468652061646465642062656e65666974207468617420697420686f6c64730a666f72204b6177616d617461206c6f672d7465726d696e616c2070616972732e20546865206d61696e207468656f72656d206f662074686520436861707465722069732074686520666f6c6c6f77696e672e0a5c626567696e7b7468656f72656d7d0a5c6c6162656c7b4d61696e5468656f72656d496e74726f64756374696f6e7d4c657420245c6c65667428582c5c44656c74615c7269676874292420626520610a4b6177616d617461206c6f672d7465726d696e616c2070616972206f662072656c61746976652064696d656e73696f6e20243224206f766572206120445652202452240a7769746820706572666563742072657369647565206669656c6420246b24206f662063686172616374657269737469632024705c676520322420616e6420706572666563740a6672616374696f6e206669656c6420244b242e20417373756d65207468617420245c6c65667428582c5c44656c74615c726967687429242069732070736575646f2d6566666563746976652c0a245c6d61746862627b517d242d436172746965722c20616e642073696d706c65206e6f726d616c2063726f7373696e6773206f766572202452242e20496620245c6e755c6c656674284b5f7b587d2b5c44656c74615c7269676874295c6e657131240a7468656e2c2074686572652065786973747320616e20246d5f7b307d242073756368207468617420666f7220616c6c20246d5c696e5c6d61746862627b5a7d5e7b2b7d240a7769746820246d5f7b307d7c6d242c200a5c5b0a685e7b307d5c6c656674286d5c6c656674284b5f7b585f7b6b7d7d2b5c44656c74615f7b6b7d5c7269676874295c7269676874293d685e7b307d5c6c656674286d5c6c656674284b5f7b585f7b4b7d7d2b5c44656c74615f7b4b7d5c7269676874295c7269676874292e0a5c5d0a0a0a496620245c6e755c6c656674284b5f7b587d2b5c44656c74615c7269676874293d3124207468656e207468652073616d6520686f6c64732069662053657272650a4475616c69747920686f6c6473206f6e20245824202854686973206c61737420636f6e646974696f6e2069732061637475616c6c7920746865207479706963616c0a736974756174696f6e20696e2077686963682074686520696e76617269616e6365206f6620706c75726967656e6572612069732070726f7665642c20796f75206d696768740a686176652061207661726965747920245824206f662064696d656e73696f6e202433242c20776974682061206d617020746f20637572766520245324206f660a64696d656e73696f6e202431242c20616e64207468656e20796f752077616e7420746f2073686f772074686520706c75726967656e65726120617265206c6f63616c6c790a636f6e7374616e74292e200a5c656e647b7468656f72656d7d0a436f6e73657175656e636573206f66207468652061626f7665207468656f72656d73206172652066696e6974652067656e65726174696f6e206f66207468652063616e6f6e6963616c0a72696e672c20746865206162696c69747920746f2072756e2061206d696e696d616c206d6f64656c2070726f6772616d20696e206d697865642063686172616374657269737469630a6f76657220612044565220696e2072656c61746976652064696d656e73696f6e202432242c2061732077656c6c2061732074686520696e76617269616e6365206f660a746865206c6f67204b6f64616972612064696d656e73696f6e73206f66204b6177616d617461206c6f672d7465726d696e616c20706169727320696e20746869730a73657474696e672e200a5c626567696e7b70726f706f736974696f6e7d0a5c6c6162656c7b636f723a4d4d505f496e74726f64756374696f6e7d204c657420245c6c65667428582c5c44656c74615c726967687429242062652061206269670a6b6c742070616972206f662072656c61746976652064696d656e73696f6e20243224206f766572206120445652202452242077697468207065726665637420726573696475650a6669656c6420246b2420616e642070657266656374206672616374696f6e206669656c6420244b24206f66206368617261637465726973746963202430242e0a417373756d65207468617420244b5f7b587d2b5c44656c746124206973206120245c6d61746862627b517d242d436172746965722064697669736f722c2077686963680a69732073696d706c65206e6f726d616c2063726f7373696e6773206f766572202452242e205468656e207468652063616e6f6e6963616c2072696e67202450726f6a5c20525c6c656674284b5f7b587d2b5c44656c74615c726967687429240a69732066696e6974656c792067656e65726174656420616e64206120636f6e7472616374696f6e206f66206120244b5f7b585f7b6b7d7d2b5c44656c74615f7b6b7d242d6e656761746976650a65787472656d616c2072617920637574206f757420627920616e20616d706c6520244824206f6e2024522420696e6475636573206120636f6e7472616374696f6e0a6f66206120244b5f7b587d2b5c44656c746124206e656761746976652065787472656d616c207261792e20250a5c626567696e7b636f6d6d656e747d0a49662074686520636f6e7472616374696f6e206973206120666c697070696e6720636f6e7472616374696f6e2c207468656e2074686520666c6970206578697374732e200a5c656e647b636f6d6d656e747d0a7b7d200a5c656e647b70726f706f736974696f6e7d0a2841637475616c6c792c206173206120726573756c74206f662074686520666f6c6c6f77696e672c207468652062696720617373756d7074696f6e2063616e2062650a72656d6f7665642c20616c74686f756768206974206d7573742062652070726f76656e206669727374292e200a0a5c6d6564736b69707b7d0a0a5c626567696e7b636f726f6c6c6172797d0a4c657420245c6c65667428582c5c44656c74615c726967687429242062652061206b6c742070616972206f662072656c61746976652064696d656e73696f6e202432240a6f76657220612044565220245224207769746820706572666563742072657369647565206669656c6420246b24206f662063686172616374657269737469630a24703e302420616e642070657266656374206672616374696f6e206669656c6420244b24250a5c626567696e7b636f6d6d656e747d0a2c20616e6420244b2420697320656974686572206f66206368617261637465726973746963202430240a5c656e647b636f6d6d656e747d0a5c626567696e7b636f6d6d656e747d0a206f722024585f7b4b7d24206c6966747320746f2024575f7b327d242e20417373756d6520746861742024585f7b6b7d24206c6966747320746f2024575f7b327d240a5c656e647b636f6d6d656e747d0a2e20417373756d65207468617420244b5f7b587d2b5c44656c74612420697320245c6d61746862627b517d242d436172746965722c2070736575646f2d6566666563746976652c0a616e642073696d706c65206e6f726d616c2063726f7373696e6773206f766572202452242e205468656e20746865206d696e696d616c206d6f64656c206f6620245c6c65667428582c5c44656c74615c726967687429240a6578697374732e200a5c656e647b636f726f6c6c6172797d0a5c6d6564736b69707b7d0a0a5c626567696e7b636f726f6c6c6172797d0a5c6c6162656c7b636f723a4e756d65726963616c44696d656e73696f6e496e76617269616e63652d496e74726f64756374696f6e7d4c657420245c6c65667428582c5c44656c74615c726967687429240a62652061206b6c742070616972206f662072656c61746976652064696d656e73696f6e20243224206f76657220612044565220245224207769746820726573696475650a6669656c6420246b2420616e64206672616374696f6e206669656c6420244b242073756368207468617420246b2420697320616c67656272616963616c6c790a636c6f736564206f662063686172616374657269737469632024703e30242e20417373756d6520244b5f7b587d2b5c44656c7461242069732070736575646f2d6566666563746976650a616e642073696d706c65206e6f726d616c2063726f7373696e6773206f766572202452242e205468656e20746865206e756d65726963616c204b6f64616972610a64696d656e73696f6e2073617469736679200a5c5b0a5c6e755c6c656674284b5f7b585f7b4b7d7d2b5c44656c74615f7b4b7d5c7269676874293d5c6e755c6c656674284b5f7b585f7b6b7d7d2b5c44656c74615f7b6b7d5c7269676874292e0a5c5d0a204173206120726573756c74206f66206162756e64616e636520666f72206c6f672073757266616365732c20746865206c6f67204b6f64616972612064696d656e73696f6e0a616c736f2073617469736679200a5c5b0a5c6b617070615c6c656674284b5f7b585f7b4b7d7d2b5c44656c74615f7b4b7d5c7269676874293d5c6b617070615c6c656674284b5f7b585f7b6b7d7d2b5c44656c74615f7b6b7d5c7269676874292e0a5c5d0a0a5c656e647b636f726f6c6c6172797d0a0a0a5c73656374696f6e7b4261636b67726f756e647d0a0a466f6c6c6f77696e6720746865206e6f746174696f6e206f66205c636974657b5375687d2c206c6574202470242062652061207072696d65206e756d6265720a616e64206c65742024522420626520612064697363726574652076616c756174696f6e2072696e6720776974682072657369647565206669656c6420246b240a616e64206672616374696f6e206669656c6420244b242c2073756368207468617420244b2420697320656974686572206f662063686172616374657269737469630a243024206f72202470242e20466f72206120736368656d6520245a24206f766572202452242c20245a5f7b6b7d242077696c6c2064656e6f7465207468650a7370656369616c20666962657220245a5c6f74696d65735f7b527d6b2420616e6420245a5f7b4b7d242077696c6c2064656e6f7465207468652067656e657269630a666962657220245a5c6f74696d65735f7b527d4b242e2046697273742061206665772066616374732061626f75742064697363726574652076616c756174696f6e0a72696e67732077686963682077696c6c2068656c7020746f2072756e20746865206d696e696d616c206d6f64656c2070726f6772616d206f76657220612064697363726574650a76616c756174696f6e2072696e672e200a0a54686520666f6c6c6f77696e67206c656d6d61206f66204b61747375726120616e642055656e6f2069732061206d61696e20696e6772656469656e7420746f207468656f72656d0a5c7265667b4d61696e5468656f72656d496e74726f64756374696f6e7d2e205468652070726f6f6620697320696e636c7564656420616c6d6f737420766572626174696d0a65786365707420666f72206e6f74696e672074686174207468652072657369647565206669656c6420697320756e6368616e6765642061667465722074686520657874656e73696f6e0a696e207468652070726f6f662e200a0a5c626567696e7b6c656d6d617d0a5c6c6162656c7b4b61747375726155656e6f7d5c636974655b392e345d7b4b557d20250a4c657420245c7661727068693a585c746f20537065635c6c65667428525c7269676874292420626520616e20616c676562726169632074776f2d64696d656e73696f6e616c0a73706163652c2070726f7065722c207365706172617465642c20616e64206f662066696e6974652074797065206f7665722024737065635c6c65667428525c7269676874292c240a776865726520245224206973206120445652207769746820616c67656272616963616c6c7920636c6f7365642072657369647565206669656c6420246b242c0a616e64206669656c64206f66206672616374696f6e7320244b2e24204c65742024585f7b4b7d242028726573702e2024585f7b6b7d24292064656e6f74650a7468652067656e657269632067656f6d65747269632028726573702e20636c6f73656429206669627265206f6620245c766172706869242e2049662024585f7b6b7d240a636f6e7461696e7320616e20657863657074696f6e616c206375727665206f6620746865206669727374206b696e642024652c24207468657265206578697374730a612044565220245c74696c64657b527d5c7375707365742052242c20776974682072657369647565206669656c642069736f6d6f727068696320746f20246b2c240a616e6420612070726f70657220736d6f6f7468206d6f72706869736d20245c74696c64657b5c7661727068697d3a5c74696c64657b587d5c746f20537065635c6c656674285c74696c64657b527d5c726967687429240a6f6620616c67656272616963207370616365732077686963682069732073657061726174656420616e64206f662066696e697465207479706520616e6420612070726f7065720a7375726a656374697665206d6f72706869736d20245c70693a585c6f74696d65735c74696c64657b527d5c746f5c74696c64657b597d24206f7665722024537065635c6c656674285c74696c64657b527d5c726967687429240a737563682074686174206f6e2074686520636c6f7365642066696272652c20245c70692420696e64756365732074686520636f6e7472616374696f6e206f66207468650a657863657074696f6e616c206375727665202465242e204d6f72656f7665722c206f6e207468652067656e657269632066696272652c20245c70692420616c736f0a696e6475636573206120636f6e7472616374696f6e206f6620616e20657863657074696f6e616c206375727665206f6620746865206669727374206b696e642e205c656e647b6c656d6d617d0a5c626567696e7b70726f6f667d0a28466f6c6c6f777320656173696c792066726f6d20746865206369746564207468656f72656d2c20616c74686f7567682049206d616b65206120736d616c6c206f62736572766174696f6e0a61626f75742074686520657874656e73696f6e206f662072657369647565206669656c6473292e204279205c7465787462667b5c636974655b436f7220362e325d7b41317d0a2448696c625f7b582f537065635c6c65667428525c7269676874297d24207d697320726570726573656e74656420627920616e20616c676562726169632073706163650a245c6d6174687363727b487d24207768696368206973206c6f63616c6c79206f662066696e6974652074797065206f7665722024537065635c6c65667428525c726967687429242e0a4c65742024592420626520746865206972726564756369626c6520636f6d706f6e656e7420636f6e7461696e696e672074686520706f696e7420245c6c6566745c7b20655c72696768745c7d20240a636f72726573706f6e64696e6720746f2074686520657863657074696f6e616c20637572766520246524206f6e20746865207370656369616c2066696265722e0a5468656e2024655c617070726f785c6d61746862627b507d5f7b6b7d5e7b317d2420616e6420244e5f7b652f587d5c617070726f785c6d61746863616c7b4f7d5f7b5c6d61746862627b507d5e7b317d7d5c6c656674282d315c7269676874295c6f706c75735c6d61746863616c7b4f7d5f7b5c6d61746862627b507d5e7b317d7d242c0a736f2024592420697320726567756c617220617420245c6c6566745c7b20655c72696768745c7d202420616e64206f662064696d656e73696f6e202431242e0a53696e63652024652420697320666978656420696e20746865207370656369616c2066696265722c2074686520737472756374757265206d6f72706869736d0a24703a595c746f20537065635c6c65667428525c72696768742924206973207375726a6563746976652e204279204c656d6d61205c7265667b426f7363684c656d6d617d2c2077652063616e2066696e6420616e205c276574616c6520636f76657220245c74696c64657b527d5c73757073657420522420616e642061206d6f72706869736d20246a3a537065635c6c656674285c74696c64657b527d5c7269676874295c746f2059240a6f7665722024537065635c6c65667428525c72696768742924207769746820246a5c6c656674285c74696c64657b6f7d5c7269676874293d5c6c6566745c7b20655c72696768745c7d20240a28696620245224206973206e6f7420616c726561647920636f6d706c6574652c207468656e20666972737420657874656e642024522420746f206120636f6d706c6574650a445652207573696e67205c636974655b302e362e382e322c335d7b47727d20736f207468617420245c74696c64657b527d2420697320616761696e206120445652292e0a417320246b2420697320617373756d656420616c67656272616963616c6c7920636c6f7365642c20616e6420245c74696c64657b527d5c746f2052242069730a756e72616d69666965642c207468656e2074686520657874656e73696f6e206f662072657369647565206669656c64732069732066696e69746520616e6420736570617261626c650a61742074686520636c6f73656420706f696e74206f66202452242c20616e642068656e636520616e2069736f6d6f72706869736d206f662072657369647565206669656c64732e0a4c657420245c6861747b707d3a5c6d6174687363727b457d5c746f20537065635c6c656674285c74696c64657b527d5c72696768742924206265207468652070756c6c2d6261636b0a6f662074686520756e6976657273616c2066616d696c79206f766572202459242e2041732074686520636c6f73656420666962726520245c6d6174687363727b457d5f7b307d240a697320612070726f6a656374697665206c696e652c207765206d61792063686f6f736520746865206d6f72706869736d20246a2420696e20737563682061207761790a74686174207468652067656e6572696320666962726520245c6d6174687363727b457d5f7b317d24206f6620245c6861747b707d2420697320616c736f20610a70726f6a656374697665206c696e652e204d6f72656f7665722c20245c6d6174687363727b457d242063616e20626520636f6e73696465726564206173206120736d6f6f74680a636c6f73656420616c67656272616963207375627370616365206f6620636f64696d656e73696f6e2024312420696e20245c6861747b587d3d585c6f74696d65735c74696c64657b527d242e0a4279204c656d6d61205c7265667b496e74657273656374696f6e4e756d62657273392e337d2c20242d313d5c6d6174687363727b457d5f7b307d5e7b327d3d5c6d6174687363727b457d5f7b317d5e7b327d242e0a48656e636520245c6d6174687363727b457d5f7b317d2420697320616c736f20616e20657863657074696f6e616c206375727665206f66207468652066697273740a6b696e642e2048656e6365206279205c636974655b436f7220362e31315d7b41327d20746865726520657869737473206120636f6e7472616374696f6e206d6f72706869736d0a245c70693a5c6861747b587d5c746f5c6861747b587d24206f7665722024537065635c6c656674285c74696c64657b527d5c726967687429242077686963680a636f6e74726163747320245c6d6174687363727b457d2420746f20612073656374696f6e206f6620245c74696c64657b5c7661727068697d3a5c74696c64657b587d5c746f20537065635c6c65667428525c726967687429240a776865726520245c74696c64657b5c7661727068697d242069732070726f7065722c20736d6f6f74682c2073657061726174656420616e64206f662066696e6974650a74797065206f7665722024537065635c6c656674285c74696c64657b527d5c726967687429242e205c656e647b70726f6f667d0a0a0a25426f736368204c656d6d61206c6f63616c2076657273696f6e0a5c626567696e7b6c656d6d617d0a5c6c6162656c7b426f7363684c656d6d617d0a4c65742024663a585c746f2053242062652061206c6f63616c6c792066696e6974652074797065206d6f72706869736d20776974682024533d537065635c2052242077686572652024522420697320612064697363726574652076616c756174696f6e2072696e672e204c65742024735c696e20532420616e642024785c696e20585f73203d2058205c74696d65735f5320537065635c206b287329242e20537570706f73652024662420697320736d6f6f746820617420247824206f662072656c61746976652064696d656e73696f6e202430242e205468656e2074686572652065786973747320612064697363726574652076616c756174696f6e2072696e6720245c74696c64657b527d5c73757073657420522420616e642024735c7072696d65205c696e20537065635c74696c64657b527d2420776974682066696e6974652072657369647565206669656c6420657874656e73696f6e20246b28735e5c7072696d65292f6b2878292420616e642061206d6f72706869736d20246a3a53706563285c74696c64657b527d295c746f20585c74696d65735f5320535e5c7072696d65203d20592024206f76657220245370656328522924207769746820246a28735e5c7072696d6529203d2078242e200a5c656e647b6c656d6d617d0a5c626567696e7b70726f6f667d0a2028466f6c6c6f77696e67205c636974655b322e322e31345d7b426f7d292e204c657420246e24206265207468652072656c61746976652064696d656e73696f6e206f6620245824206f76657220247324206174202478242e0a204c657420245c6d61746863616c7b4a7d5f78205c737562736574205c6d61746863616c7b4f7d5f7b585f737d2420626520746865207368656166206f6620696465616c73206173736f63696174656420746f2074686520636c6f73656420706f696e7420247824206f662024585f73242e2041732024662420697320736d6f6f7468206174202478242c2024537065635c206b2878295c746f20537065635c206b28732924206973205c276574616c652e0a205468757320245c6d61746863616c7b4a7d5f78242069732067656e65726174656420627920246e2420656c656d656e747320245c6f7665726c696e657b677d5f312c2e2e2e2c5c6f7665726c696e657b677d5f6e242073756368207468617420746865697220646966666572656e7469616c732024645c6f7665726c696e657b677d5f312c2e2e2e2c645c6f7665726c696e657b677d5f6e242067656e657261746520245c4f6d6567615e5c7072696d655f7b582f537d5c6f74696d6573206b2878292e240a20427920746865204a61636f626920437269746572696f6e205c636974655b322e322e375d7b426f7d2c20736d6f6f74686e6573732061742024782420697320616e206f70656e20636f6e646974696f6e2e205468757320245c6f7665726c696e657b677d5f312c2e2e2e2c5c6f7665726c696e657b677d5f6e24206c69667420746f2073656374696f6e732024675f312c2e2e2e2c675f6e24206f6620245c6d61746863616c7b4f7d5f582420646566696e6564206f6e20616e206f70656e206e65696768626f72686f6f64206f662024785c696e2058242e0a4c65742024535e5c7072696d65242062652074686520737562736368656d65206f662024582420646566696e65642062792024675f312c2e2e2e2c675f6e2e240a427920746865204a61636f626920437269746572696f6e2c2024535e5c7072696d6524206973205c276574616c65206f76657220245324206174202478242e200a416674657220736872696e6b696e672024735e5c7072696d65242c207765206d617920617373756d65202873696e6365205c276574616c652d6e65737320697320616e206f70656e20636f6e646974696f6e2920746861742024535e5c7072696d65205c746f205324206973205c276574616c652e2054686520746175746f6c6f676963616c2073656374696f6e2024685e5c7072696d65203a535e5c7072696d65205c746f20585e5c7072696d6524206973207468656e20612073656374696f6e2061732072657175697265642e200a5c656e647b70726f6f667d0a5c626567696e7b6c656d6d617d0a5c6c6162656c7b496e74657273656374696f6e4e756d62657273392e337d5c636974655b392e335d7b4b557d250a5c626567696e7b636f6d6d656e747d0a5c696e636c756465677261706869632c735b6262203d2030203020323030203130302c2064726166742c20747970653d6570735d7b7061737465643434332e706e677d0a5c656e647b636f6d6d656e747d0a7b7d20496e2074686520736974756174696f6e206f66207468652061626f7665204c656d6d612c2069662024442c445e7b5c7072696d657d24206172652064697669736f72730a6f6e202458242c207468656e200a5c5b0a5c626567696e7b61727261797d7b637d0a4b5f7b585f7b6b7d7d5e7b327d3d4b5f7b585f7b4b7d7d5e7b327d5c5c0a5c6c656674284b5f7b585f7b6b7d7d5c63646f7420445f7b6b7d5c7269676874295f7b585f7b6b7d7d3d5c6c656674284b5f7b585f7b4b7d7d5c63646f7420445f7b4b7d5c7269676874295f7b585f7b4b7d7d5c5c0a5c6c65667428445f7b6b7d5c63646f7420445f7b6b7d5e7b5c7072696d657d5c7269676874295f7b585f7b6b7d7d3d5c6c65667428445f7b4b7d5c63646f7420445f7b4b7d5e7b5c7072696d657d5c7269676874295f7b585f7b4b7d7d2e0a5c656e647b61727261797d0a5c5d0a5c656e647b6c656d6d617d0a5c626567696e7b646566696e6974696f6e7d0a5c6c6162656c7b6465663a4c6f67536d6f6f74687d205c636974655b312e375d7b4b6f323031337d204c657420245824206265206120736368656d652e204c65742024705c696e2058240a6265206120726567756c617220706f696e74207769746820696465616c20736865616620245c6d6174686672616b7b6d7d5f7b707d2420616e6420726573696475650a6669656c6420246b5c6c65667428705c726967687429242e205468656e2024785f7b317d2c2e2e2e2c785f7b6e7d5c696e5c6d6174686672616b7b6d7d5f7b707d240a6172652063616c6c6564206c6f63616c20636f6f7264696e61746573206966207468656972207265736964756520636c617373657320245c6f7665726c696e657b785f7b317d7d2c2e2e2e2c5c6f7665726c696e657b785f7b6e7d7d240a666f726d206120246b5c6c65667428705c726967687429242d6261736973206f6620245c6d6174686672616b7b6d7d5f7b707d2f5c6d6174686672616b7b6d7d5f7b707d5e7b327d242e200a0a4c65742024443d5c73756d20615f7b697d445f7b697d242062652061205765696c2064697669736f72206f6e202458242e20576520736179207468617420245c6c65667428582c445c726967687429240a6861732073696d706c65206e6f726d616c2063726f7373696e6773206f7220736e63206174206120706f696e742024705c696e205824206966202458242069730a726567756c61722061742024702420616e6420746865726520697320616e206f70656e206e65696768626f72686f6f642024705c696e20585f7b707d5c7375627365742058240a77697468206c6f63616c20636f6f7264696e617465732024785f7b317d2c2e2e2e2c785f7b6e7d5c696e5c6d6174686672616b7b6d7d5f7b707d2420737563680a746861742024585f7b707d5c63617020537570705c20445c7375627365745c6c65667428785f7b317d5c63646f745c63646f74735c63646f7420785f7b6e7d3d305c7269676874292e240a576520736179207468617420245c6c65667428582c445c7269676874292420697320736e6320696620697420697320736e6320617420657665727920706f696e742e200a0a576520736179207468617420245c6c65667428582c445c7269676874292420686173206e6f726d616c2063726f7373696e67206f72206e63206174206120706f696e740a24705c696e20582420696620245c6c656674285c6861747b587d5f7b4b7d2c447c5f7b5c6861747b587d5f7b4b7d7d5c7269676874292420697320736e632061740a24702420776865726520245c6861747b587d5f7b4b7d242064656e6f7465732074686520636f6d706c6574696f6e2061742024702420616e6420244b240a6973206120736570617261626c6520636c6f73757265206f6620246b5c6c65667428705c7269676874292e2420576520736179207468617420245c6c65667428582c445c726967687429240a6973206e63206966206974206973206e6320617420657665727920706f696e742e200a0a496620245c6c65667428582c445c7269676874292420697320646566696e6564206f76657220612070657266656374206669656c642c207468697320636f6e636570740a697320616c736f2063616c6c6564206c6f6720736d6f6f74682e200a5c656e647b646566696e6974696f6e7d0a5c6d6564736b69707b7d0a0a0a54686520666f6c6c6f77696e672073746174656d656e74206f66207265736f6c7574696f6e206f662073696e67756c617269746965732077696c6c20626520757365642e200a0a5c6d6564736b69707b7d0a0a5c626567696e7b7468656f72656d7d0a5c636974655b312e315d7b4350323031347d205c6c6162656c7b54686d3a43505f5265736f6c7574696f6e7d4c657420582062652061207265647563656420616e640a736570617261746564204e6f657468657269616e20736368656d652077686963682069732071756173692d657863656c6c656e7420616e64206f662064696d656e73696f6e0a6174206d6f73742074687265652e2054686572652065786973747320612070726f706572206269726174696f6e616c206d6f72706869736d20245c70693a585e7b5c7072696d657d5c746f2058240a776974682074686520666f6c6c6f77696e672070726f706572746965733a200a0a2869292024585e7b5c7072696d657d24206973206576657279776865726520726567756c61720a0a2869692920245c70692420696e647563657320616e2069736f6d6f72706869736d20245c70695e7b2d317d5c6c656674285265675c20585c7269676874295c617070726f78205265675c2058240a0a286969692920245c70695e7b2d317d5c6c6566742853696e675c20585c72696768742924206973206120737472696374206e6f726d616c2063726f7373696e67730a64697669736f72206f6e2024585e7b5c7072696d657d2e240a5c656e647b7468656f72656d7d0a5c6d6564736b69707b7d0a0a5c626567696e7b646566696e6974696f6e7d0a5c6c6162656c7b6465663a4c6f675265736f6c7574696f6e7d250a5c626567696e7b636f6d6d656e747d0a5c696e636c75646567726170686963735b6262203d2030203020323030203130302c2064726166742c20747970653d6570735d7b7061737465643533352e706e677d0a5c656e647b636f6d6d656e747d0a7b7d2041206c6f67207265736f6c7574696f6e206f662061207061697220245c6c65667428582c5c44656c74615c7269676874292420697320612070726f706572206269726174696f6e616c0a6d6f72706869736d2024663a595c746f2058242066726f6d206120726567756c61722076617269657479207375636820746861742074686520657863657074696f6e616c0a6c6f637573202445785c6c65667428665c7269676874292420697320612064697669736f7220616e642024665e7b2d317d5c6c656674285c44656c74615c7269676874295c637570204578635c6c65667428665c726967687429240a6861732073696d706c65206e6f726d616c2063726f7373696e677320737570706f72742e200a5c656e647b646566696e6974696f6e7d0a5c6d6564736b69707b7d0a0a5c626567696e7b646566696e6974696f6e7d0a5c6c6162656c7b6465663a5465726d696e616c5f4b4c545f446566737d250a5c626567696e7b636f6d6d656e747d0a5c696e636c75646567726170686963735b6262203d2030203020323030203130302c2064726166742c20747970653d6570735d7b7061737465643533342e706e677d0a0a5c696e636c75646567726170686963735b6262203d2030203020323030203130302c2064726166742c20747970653d6570735d7b2e2e2f4d613974682f44313336323335303437352e706e677d0a5c656e647b636f6d6d656e747d0a7b7d204c6574202458242062652061206e6f726d616c207661726965747920616e64206c657420245c44656c74612420626520616e2065666665637469766520245c6d61746862627b527d242d64697669736f720a73756368207468617420244b5f7b587d2b5c44656c74612420697320245c6d61746862627b527d242d436172746965722e205468656e2074686520706169720a245c6c65667428582c5c44656c74615c7269676874292420686173207465726d696e616c2028726573706563746976656c79204b6177616d617461206c6f672d7465726d696e616c0a692e652e2060606b6c7427272c20726573706563746976656c79206c6f672d63616e6f6e6963616c292073696e67756c6172697469657320696620666f7220616e790a6c6f67207265736f6c7574696f6e2024663a595c746f205824206f6620245c6c65667428582c5c44656c74615c72696768742924207375636820746861742024455f7b697d240a61726520657863657074696f6e616c20637572766573206f6e202459242c207468656e200a5c5b0a4b5f7b597d2b5c44656c74615f7b597d3d665e7b2a7d5c6c656674284b5f7b587d2b5c44656c74615c7269676874292b5c73756d20615f7b697d455f7b697d0a5c5d0a2077686572652024615f7b6a7d3e30242028726573706563746976656c792024615f7b6a7d3e2d31242c20726573706563746976656c792024615f7b6a7d5c67652d3124290a616e6420245c44656c74615f7b597d242069732074686520737472696374207472616e73666f726d206f6620245c44656c7461242e200a0a5c6d6564736b69707b7d0a0a5c656e647b646566696e6974696f6e7d0a54686520666f6c6c6f77696e6720696e6772656469656e7473206f6620746865206d696e696d616c206d6f64656c2070726f6772616d20666f722073757266616365730a696e20706f736974697665206368617261637465726973746963206172652075736564205c636974657b4b4b39347d2c205c636974657b54616e7d2e0a5c626567696e7b646566696e6974696f6e7d0a5c6c6162656c7b6465663a466c69707d4c65742024663a585c746f205a2420626520612070726f6a656374697665206269726174696f6e616c206d6f72706869736d0a6f6620616c6765627261696320737061636573207375636820746861742024665f7b2a7d5c6d61746863616c7b4f7d5f7b587d3d5c6d61746863616c7b4f7d5f7b5a7d240a616e64202464696d5c204e455c6c65667428582f5a5c7269676874293d312420616e642024662420636f6e74726163747320736f6d652064697669736f722e0a5468656e202466242069732063616c6c656420612064697669736f7269616c20636f6e7472616374696f6e2e20496620696e73746561642024662420636f6e7472616374730a736f6d652073756276617269657479206f6620636f64696d656e73696f6e20245c6765322420616e64206e6f2064697669736f72732c207468656e202466240a69732063616c6c6564206120736d616c6c20636f6e7472616374696f6e2e20496620246624206973206120736d616c6c2028726573702e2064697669736f7269616c290a636f6e7472616374696f6e20616e6420242d442420697320245c6d61746862627b527d242d4361727469657220616e642072656c61746976656c7920616d706c652c0a7468656e202466242069732061202444242d666c697070696e6720636f6e7472616374696f6e2028726573702e202444242d64697669736f7269616c20636f6e7472616374696f6e292e5c656e647b646566696e6974696f6e7d0a5c626567696e7b6c656d6d617d0a5c6c6162656c7b282c2d322e332e352d292d317d5c636974655b322e332e355d7b4b4b39347d20250a5c626567696e7b636f6d6d656e747d0a5c696e636c75646567726170686963735b6262203d2030203020323030203130302c2064726166742c20747970653d6570735d7b7061737465643433362e706e677d0a5c656e647b636f6d6d656e747d0a7b7d204c657420245c6c65667428532c425c726967687429242062652061206c6f672d63616e6f6e6963616c2073757266616365206f76657220616e20616c67656272616963616c6c790a636c6f736564206669656c64206f662063686172616374657269737469632024703e30242e2049662024435c73756273657420532420697320612063757276650a776974682024435e7b327d3c302420616e642024432e5c6c656674284b5f7b537d2b425c7269676874293c30242c207468656e2024435c617070726f785c6d61746862627b507d5e7b317d240a616e642069742063616e20626520636f6e7472616374656420746f2061206c6f672d63616e6f6e6963616c20706f696e742e0a5c656e647b6c656d6d617d0a5c6d6564736b69707b7d0a0a5c626567696e7b7468656f72656d7d0a5c6c6162656c7b436f6e655468656f72656d7d5c636974655b342e345d7b54616e7d250a5c626567696e7b636f6d6d656e747d0a5c696e636c75646567726170686963735b6262203d2030203020323030203130302c2064726166742c20747970653d6570735d7b7061737465643433372e706e677d0a5c656e647b636f6d6d656e747d0a7b7d204c65742024582420626520612070726f6a656374697665206e6f726d616c207375726661636520616e64206c657420245c44656c74612420626520616e206566666563746976650a245c6d61746862627b527d242d64697669736f722073756368207468617420244b5f7b587d2b5c44656c74612420697320245c6d61746862627b527d242d636172746965722e0a4c657420245c44656c74613d5c73756d20625f7b697d425f7b697d2420626520746865207072696d65206465636f6d706f736974696f6e2e204c6574202448240a626520616e20245c6d61746862627b527d242d6361727469657220616d706c6520245c6d61746862627b527d242d64697669736f722e205468656e207468650a666f6c6c6f77696e6720617373657274696f6e7320686f6c643a200a0a28312920245c6f7665726c696e657b4e457d5c6c65667428585c7269676874293d5c6f7665726c696e657b4e457d5c6c65667428585c7269676874295f7b4b5f7b587d2b5c44656c74615c6765307d2b5c73756d5c6d61746862627b527d5f7b5c6765307d5c6c6566745b435f7b697d5c72696768745d24200a0a28322920245c6f7665726c696e657b4e457d5c6c65667428585c7269676874293d5c6f7665726c696e657b4e457d5c6c65667428585c7269676874295f7b4b5f7b587d2b5c44656c74612b485c6765307d2b5c73756d5f7b66696e6974657d5c6d61746862627b527d5f7b5c6765307d5c6c6566745b435f7b697d5c72696768745d24200a0a28332920456163682024435f7b697d2420696e2028312920616e642028322920697320726174696f6e616c206f722024435f7b697d3d425f7b6a7d2420666f720a736f6d652024425f7b6a7d2420776974682024425f7b6a7d5e7b327d3c30242e200a5c656e647b7468656f72656d7d0a5c6d6564736b69707b7d0a0a5c626567696e7b7468656f72656d7d0a5c636974655b352e335d7b54616e7d5c6c6162656c7b74686d3a54616e616b6150315468656f72656d7d204c65742024582420626520612070726f6a6563746976650a6e6f726d616c207375726661636520616e64206c657420244324206265206120637572766520696e20245824207375636820746861742024725c6c656674284b5f7b587d2b435c726967687429240a6973204361727469657220666f7220736f6d6520706f73697469766520696e7465676572202472242e200a0a2831292049662024435c63646f745c6c656674284b5f7b587d2b435c7269676874293c30242c207468656e2024435c617070726f785c6d61746862627b507d5e7b317d242e200a0a2832292049662024435c63646f745c6c656674284b5f7b587d2b435c7269676874293d30242c207468656e2024435c617070726f785c6d61746862627b507d5e7b317d240a6f7220245c6d61746863616c7b4f7d5f7b437d5c6c656674285c6c656674284b5f7b587d2b435c7269676874295e7b5c6c6566745b725c72696768745d7d5c7269676874295c617070726f785c6d61746863616c7b4f7d5f7b437d242e200a0a5c6d6564736b69707b7d0a5c656e647b7468656f72656d7d0a5c626567696e7b646566696e6974696f6e7d0a5c6c6162656c7b6465663a4d4d505f576974685363616c696e677d205c636974655b352e455d7b484b7d250a5c626567696e7b636f6d6d656e747d0a5c696e636c75646567726170686963737b70617374656431392e706e677d0a5c656e647b636f6d6d656e747d0a7b7d20496620244b5f7b587d2b5c44656c74612420697320616e20656666656374697665204b4c54207061697220696e2064696d656e73696f6e202432242c207468656e0a666f7220616e7920616d706c652064697669736f722024485e7b5c7072696d657d242c2077652063616e2066696e642024685c696e5c6d61746862627b527d5f7b3e307d240a616e6420616e20245c6d61746862627b527d242d64697669736f722024485c73696d5f7b5c6d61746862627b527d7d68485e7b5c7072696d657d2420737563680a7468617420245c6c65667428582c5c44656c74612b485c72696768742924206973206b6c7420616e6420244b5f7b587d2b5c44656c74612b4824206973206e65660a616e64206269672e204c6574200a5c5b0a5c6c616d6264613d696e665c6c6566745c7b20745c6765305c207c5c204b5f7b587d2b5c44656c74612b74485c2069735c206e65665c72696768745c7d202e0a5c5d0a20496620245c6c616d6264613d30242c207468656e20244b5f7b587d2b5c44656c746124206973206e65662c20616e64207468757320245c6c65667428582c5c44656c74615c726967687429240a6973206d696e696d616c2e20496620245c6c616d6264613e30242c207468656e2c206279205468656f72656d205c7265667b436f6e655468656f72656d7d2c0a746865726520657869737473206120245c6c656674284b5f7b587d2b5c44656c74615c726967687429242d6e656761746976652065787472656d616c207261790a2452242073756368207468617420245c6c656674284b5f7b587d2b5c44656c74612b5c6c616d62646120485c7269676874292e523d302e24205468656e2c20632e662e0a5c636974655b322e335d7b4b4b39347d2c2069662074686520636f72726573706f6e64696e6720636f6e7472616374696f6e20245c7068693a585c746f20585e7b5c7072696d657d240a646f6573206e6f7420726573756c7420696e2061206c6f672044656c2050657a7a6f2073757266616365206f722061206269726174696f6e616c6c792072756c65640a737572666163652c207468656e2073657474696e672024485e7b5c7072696d657d3d5c7068695f7b2a7d482420616e6420245c44656c74615e7b5c7072696d657d3d5c7068695f7b2a7d5c44656c7461242c0a7468652064697669736f7220244b5f7b585e7b5c7072696d657d7d2b5c44656c74615e7b5c7072696d657d2b5c64656c746120485e7b5c7072696d657d242069730a6e65662e205468656e207468652070726f63657373206d61792062652072657065617465642e205468652070726f6365737320656974686572207465726d696e617465730a617420736f6d65207374657020696e2061206c6f67206d696e696d616c206d6f64656c206f72206f6e65206f66207468652061666f72656d656e74696f6e65642073757266616365730a73696e636520746865726520617265206e6f20666c69707320696e2064696d656e73696f6e202432242e2054686520656e6420726573756c7420697320612066696e6974650a73657175656e6365206f66207265616c206e756d6265727320245c6c616d6264613d5c6c616d6264615f7b317d5c67655c6c616d6264615f7b327d5c67655c63646f74735c67655c6c616d6264615f7b6e7d3e30240a73756368207468617420244b5f7b585f7b6e7d7d2b5c44656c74615f7b6e7d2b5c6c616d6264615f7b6e7d485f7b6e7d24206973206e656620616e642024585c746f20585f7b6e7d240a69732061206d696e696d616c206d6f64656c20666f7220245c6c65667428582c5c44656c74612b5c6c616d6264615f7b6e7d485c726967687429242e200a5c656e647b646566696e6974696f6e7d0a5c626567696e7b636f6d6d656e747d0a28342920456163682024435f7b697d2420696e2028312920616e6420283229207361746973666965732024303c2d435f7b697d2e5c6c656674284b5f7b587d2b5c44656c74615c7269676874295c6c652e2e2e24200a5c656e647b636f6d6d656e747d0a0a0a5468652070726f6f667320696e20746869732070617065722077696c6c20616c736f206d616b6520757365206f66207365766572616c2076616e697368696e670a7468656f72656d732e200a5c626567696e7b7468656f72656d7d0a5c6c6162656c7b284b6177616d6174612d566965687765672d56616e697368696e67292d317d284b6177616d6174612d566965687765672056616e697368696e670a5c626567696e7b636f6d6d656e747d0a5c696e636c75646567726170686963735b6262203d2030203020323030203130302c2064726166742c20747970653d6570735d7b7061737465643434322e706e677d0a5c656e647b636f6d6d656e747d0a5c636974655b322e31315d7b54616e327d29204c657420245c6c65667428582c5c44656c74615c7269676874292420626520612070726f6a656374697665206b6c740a7375726661636520286f76657220616e20616c67656272616963616c6c7920636c6f736564206669656c64206f662063686172616374657269737469632024703e3024290a776865726520245c44656c74612420697320616e2065666665637469766520245c6d61746862627b527d242d64697669736f722e204c657420244e242062650a61206e656620245c6d61746862627b527d242d6361727469657220245c6d61746862627b527d242d64697669736f72207769746820245c6e755c6c65667428582c4e5c7269676874295c676531242e0a4c657420244424206265206120245c6d61746862627b517d242d4361727469657220245c6d61746862627b5a7d242d64697669736f72207375636820746861740a24442d5c6c656674284b5f7b587d2d5c44656c74615c72696768742924206973206e656620616e64206269672e205468656e2074686572652065786973747320610a706f736974697665207265616c206e756d6265722024725c6c656674285c44656c74612c442c4e5c72696768742924207375636820746861742024485e7b697d5c6c65667428582c5c6d61746863616c7b4f7d5f7b587d5c6c65667428442b724e2b4e5e7b5c7072696d657d5c7269676874295c7269676874293d30240a666f722065766572792024693e30242c20657665727920706f736974697665207265616c206e756d6265722024725c676520725c6c656674285c44656c74612c442c4e5c726967687429242c0a616e64206576657279206e656620245c6d61746862627b527d242d4361727469657220245c6d61746862627b527d242d64697669736f7220244e5e7b5c7072696d657d240a7375636820746861742024724e2b4e5e7b5c7072696d657d24206973206120436172746965722064697669736f722e200a5c656e647b7468656f72656d7d0a5c6d6564736b69707b7d0a0a5c626567696e7b7468656f72656d7d0a5c636974655b49492e365d7b456b7d5c6c6162656c7b456b656461686c56616e697368696e677d204c6574202458242062652061206d696e696d616c20737572666163650a6f662067656e6572616c207479706520616e64206c657420245c6d61746863616c7b4c7d2420626520616e20696e7665727469626c6520736865616620746861740a6973206e756d65726963616c6c79206571756976616c656e7420746f20245c6f6d6567615f7b537d5e7b5c6f74696d657320697d2420666f7220736f6d652024695c676531242e0a5468656e2024485e7b317d5c6c65667428582c5c6d61746863616c7b4c7d5e7b5c6f74696d6573327d5c7269676874293d30242065786365707420706f737369626c790a666f72206365727461696e20737572666163657320696e20636861726163746572697374696320243224207769746820245c6368695c6c656674285c6d61746863616c7b4f7d5f7b587d5c7269676874295c6c6531240a2e200a5c656e647b7468656f72656d7d0a5c6d6564736b69707b7d0a0a5c626567696e7b7468656f72656d7d0a5c636974657b5465727d250a5c626567696e7b636f6d6d656e747d0a5c696e636c75646567726170686963737b70617374656433302e706e677d0a5c656e647b636f6d6d656e747d0a5c6c6162656c7b546572616b617761735468656f72656d7d204c657420245824206265206120736d6f6f74682070726f6a65637469766520737572666163650a6f76657220616e20616c67656272616963616c6c7920636c6f736564206669656c64206f662063686172616374657269737469632024703e302420616e64206c65740a24442420626520612062696720616e64206e656620436172746965722064697669736f72206f6e202458242e20417373756d65207468617420656974686572200a0a28312920245c6b617070615c6c65667428585c7269676874295c6e6571322420616e6420245824206973206e6f742071756173692d656c6c697074696320776974680a245c6b617070615c6c65667428585c7269676874293d31243b206f720a0a28322920245824206973206f662067656e6572616c20747970652077697468200a0a24705c6765332420616e6420245c6c65667428445e7b327d5c7269676874293e766f6c5c6c65667428585c72696768742924206f720a0a24703d322420616e6420245c6c65667428445e7b327d5c7269676874293e6d61785c6c6566745c7b20766f6c5c6c65667428585c7269676874292c766f6c5c6c65667428585c7269676874292d335c6368695c6c656674285c6d61746863616c7b4f7d5f7b587d5c7269676874292b325c72696768745c7d202e24200a0a5468656e200a5c5b0a485e7b697d5c6c65667428582c5c6d61746863616c7b4f7d5f7b587d5c6c656674284b5f7b587d2b445c7269676874295c7269676874293d300a5c5d0a20666f7220616c6c2024693e30242e200a5c656e647b7468656f72656d7d0a5c6d6564736b69707b7d0a0a0a54686520666f6c6c6f77696e672070726f70657274696573206f662062617365206368616e67652077696c6c20626520757365643a0a5c626567696e7b7468656f72656d7d0a5c6c6162656c7b74686d3a536d6f6f746852656c44696d6e7d5c636974655b4949492e31302e325d7b4861727d204c65742024663a585c746f2059242062650a61206d6f72706869736d206f6620736368656d6573206f662066696e6974652074797065206f7665722061206669656c6420246b2e24205468656e202466240a697320736d6f6f7468206f662072656c61746976652064696d656e73696f6e20246e2420696620616e64206f6e6c79206966203a0a0a2831292024662420697320666c61743b20616e640a0a28322920666f72206561636820706f696e742024795c696e2059242c206c65742024585f7b5c6f7665726c696e657b797d7d3d585f7b797d5c6f74696d65735f7b6b5c6c65667428795c7269676874297d6b5c6c65667428795c7269676874295e7b2d7d240a776865726520246b5c6c65667428795c7269676874295e7b2d7d242069732074686520616c6765627261696320636c6f73757265206f6620246b5c6c65667428795c726967687429242e0a5468656e2024585f7b5c6f7665726c696e657b797d7d24206973206571756964696d656e73696f6e616c206f662064696d656e73696f6e20246e2420616e640a726567756c61722e202857652073617920746865206060666962726573206f6620246624206172652067656f6d6574726963616c6c7920726567756c6172206f660a6571756964696d656e73696f6e20246e242e2727290a5c656e647b7468656f72656d7d0a0a5c626567696e7b7468656f72656d7d0a5c6c6162656c7b74686d3a426173654368616e67657d5c636974655b362e32385d7b47577d204c657420246b242062652061206669656c642c202458240a6120246b242d736368656d65206c6f63616c6c79206f662066696e69746520747970652c20616e64206c65742024785c696e205824206265206120636c6f7365640a706f696e742e204c65742024645c6765302420626520616e20696e74656765722e2057652066697820616e20616c67656272616963616c6c7920636c6f7365640a657874656e73696f6e20244b24206f6620246b242c20616e642077726974652024585f7b4b7d3d585c6f74696d65735f7b6b7d4b242e2054686520666f6c6c6f77696e670a617265206571756976616c656e743a0a0a2869292054686520246b242d736368656d652024582420697320736d6f6f7468206f662072656c61746976652064696d656e73696f6e20246424206174202478242e200a0a2869692920466f7220657665727920706f696e7420245c6f7665726c696e657b787d5c696e20585f7b4b7d24206c79696e67206f766572202478242c2024585f7b4b7d240a697320736d6f6f7468206f662072656c61746976652064696d656e73696f6e2024642420617420245c6f7665726c696e657b787d2e240a0a286969692920466f7220657665727920706f696e7420245c6f7665726c696e657b787d5c696e20585f7b4b7d24206c79696e67206f766572202478242c207468650a636f6d706c65746564206c6f63616c2072696e6720245c6861747b5c6d61746863616c7b4f7d7d5f7b585f7b4b7d2c5c6f7665726c696e657b787d7d242069730a69736f6d6f727068696320746f20612072696e67206f6620666f726d616c20706f7765722073657269657320244b5b5b545f7b317d2c2e2e2e2c545f7b647d5d5d240a6f76657220244b242e200a0a2869762920466f7220657665727920706f696e7420245c6f7665726c696e657b787d5c696e20585f7b4b7d24206c79696e67206f766572202478242c207468650a6c6f63616c2072696e6720245c6d61746863616c7b4f7d5f7b585f7b4b7d2c5c6f7665726c696e657b787d7d2420697320726567756c617220616e64206861730a64696d656e73696f6e202464242e200a0a2876292054686520657175616c6974696573202464696d5f7b5c6b617070615c6c65667428785c7269676874297d545f7b787d5c6c65667428582f6b5c7269676874293d64696d5c6d61746863616c7b4f7d5f7b582c787d3d64240a686f6c642e200a0a496620746865736520636f6e646974696f6e7320617265207361746973666965642c207468656e200a0a2876692920546865206c6f63616c2072696e6720245c6d61746863616c7b4f7d5f7b582c787d2420697320726567756c617220616e64206861732064696d656e73696f6e0a2464242e200a0a467572746865726d6f72652c20696620245c6b617070615c6c65667428785c7269676874293d6b242c207468656e207468652066696e616c20636f6e646974696f6e0a696d706c69657320746865206f74686572206f6e65732e200a5c656e647b7468656f72656d7d0a5c6d6564736b69707b7d0a0a0a4173206120636f6e73657175656e6365206f66207468652061626f7665207468656f72656d732c0a5c626567696e7b70726f706f736974696f6e7d0a5c6c6162656c7b70726f703a4b4c545f5072657365727665645f556e6465725f42617365655f4368616e67657d204c657420245c6c65667428582c5c44656c74615c726967687429240a62652061207465726d696e616c2028726573702e206b6c742920706169722077686963682069732073696d706c65206e6f726d616c2063726f7373696e6773206f7665720a6120244456522420245224207769746820706572666563742072657369647565206669656c6420246b2420616e642070657266656374206672616374696f6e0a6669656c6420244b242e204c657420245c6c65667428585e7b5c7072696d657d2c5c44656c74615e7b5c7072696d657d5c726967687429242064656e6f74650a7468652070616972206f6e207468652062617365206368616e676520746f206120636f6d706c657465204456522024525e7b5c7072696d657d24207769746820616c67656272616963616c6c790a636c6f7365642072657369647565206669656c642e205468656e20245c6c65667428585f7b6b7d5e7b5c7072696d657d2c5c44656c74615f7b6b7d5e7b5c7072696d657d5c726967687429240a616e6420245c6c65667428585f7b4b7d5e7b5c7072696d657d2c5c44656c74615f7b4b7d5e7b5c7072696d657d5c7269676874292420617265206c6f672d736d6f6f74680a616e64207465726d696e616c2028726573702e206b6c742e29205c656e647b70726f706f736974696f6e7d0a5c626567696e7b70726f6f667d0a42792061646a756e6374696f6e20245c6c65667428585f7b6b7d2c5c44656c74615f7b6b7d5c7269676874292420616e6420245c6c65667428585f7b4b7d2c5c44656c74615f7b4b7d5c726967687429240a617265207465726d696e616c2028726573702e206b6c742920616e6420736e6320627920646566696e6974696f6e205c7265667b6465663a4c6f67536d6f6f74687d2e0a53696e636520736d6f6f74686e6573732069732070726573657276656420627920626173652d6368616e67652c207468656e20616c6c20737472617461206f6620245c6c65667428585e7b5c7072696d657d2c5c44656c74615e7b5c7072696d657d5c726967687429240a61726520736d6f6f74682e20416c736f2c20245c6c65667428585f7b6b7d5e7b5c7072696d657d2c5c44656c74615f7b6b7d5e7b5c7072696d657d5c726967687429240a697320627920646566696e6974696f6e206c6f6720736d6f6f74682061667465722062617365206368616e676520746f2074686520616c6765627261696320636c6f737572650a6f6620246b242c2073696e63652074686520616c6765627261696320636c6f73757265206f6620612070657266656374206669656c6420697320657175616c20746f0a69747320736570617261626c6520636c6f737572652e205468757320245c6c65667428585e7b5c7072696d657d2c5c44656c74615e7b5c7072696d657d5c726967687429240a6973206c6f672d736d6f6f74682e200a0a4e6578742c2073696e636520246b2420697320617373756d656420706572666563742c20746865206e6f74696f6e73206f6620736d6f6f746820616e6420726567756c61720a636f696e636964652e2054687573206279205468656f72656d73205c7265667b74686d3a426173654368616e67657d2c20616e64205c7265667b74686d3a536d6f6f746852656c44696d6e7d0a776520686176652074686174207468652062617365206368616e67652024585c746f20585e7b5c7072696d657d24206f7665722074686520616c676562726169630a636c6f7375726520246b5e7b5c7072696d657d2420697320736d6f6f7468206f662072656c61746976652064696d656e73696f6e202430242c2068656e63650a616e20e974616c652062617365206368616e67652e2054687573206279205c636974655b322e31342c322e31355d7b4b6f7d2c20245c6c65667428585f7b6b7d2c5c44656c74615f7b6b7d5c726967687429240a616e6420245c6c65667428585f7b4b7d2c5c44656c74615f7b4b7d5c7269676874292420617265207465726d696e616c2028726573702e206b6c7429206966660a245c6c65667428585f7b6b7d5e7b5c7072696d657d2c5c44656c74615f7b6b7d5e7b5c7072696d657d5c7269676874292420616e6420245c6c65667428585f7b4b7d5e7b5c7072696d657d2c5c44656c74615f7b4b7d5e7b5c7072696d657d5c726967687429240a617265207465726d696e616c2028726573702e206b6c74292e200a5c656e647b70726f6f667d0a5c6d6564736b69707b7d0a0a5c626567696e7b646566696e6974696f6e7d0a5c6c6162656c7b6465663a44696d696e6973686564426173654c6f6375737d205c636974657b4c617a7d204c65742024442420626520612070736575646f6566666563746976650a245c6d61746862627b527d242d64697669736f72206f6e2061206e6f726d616c2070726f6a6563746976652076617269657479202458242e205468652064696d696e69736865640a62617365206c6f63757320697320646566696e6564206173200a5c5b0a5c6d61746862627b427d5f7b2d7d5c6c65667428445c7269676874293a3d5c6269676375705f7b5c6f7665727365747b415c20416d706c657d7b442b415c205c6d61746862627b517d2d436172747465727d7d5c6d61746862627b427d5c6c65667428442b415c7269676874290a5c5d0a20776865726520245c6d61746862627b427d5c6c65667428442b415c7269676874293d5c6269676361705f7b6e5c6765317d42735c6c656674286e5c6c65667428442b415c7269676874295c726967687429240a69732074686520737461626c652062617365206c6f6375732e200a5c656e647b646566696e6974696f6e7d0a5c6d6564736b69707b7d0a0a5c626567696e7b646566696e6974696f6e7d0a5c6c6162656c7b6465663a4e5f5369676d617d204c65742024442420626520612062696720436172746965722064697669736f722e204c65742024465f7b6d7d240a6265207468652066697865642064697669736f7220245c6c6566747c6d445c72696768747c5f7b6669787d2e24205468656e2024465f7b6d2b6e7d5c6c6520465f7b6d7d2b465f7b6e7d240a616e6420746865206c696d6974200a5c5b0a4e5f7b5c7369676d617d5c6c65667428445c7269676874293a3d5c756e6465727365747b6d5c746f5c696e6674797d7b6c696d7d5c667261637b317d7b6d7d465f7b6d7d0a5c5d0a2065786973747320617320616e20245c6d61746862627b527d242d64697669736f722e205765206861766520246d4e5f7b5c7369676d617d5c6c65667428445c7269676874295c6c6520465f7b6d7d240a616e6420666f722074686520245c6d61746862627b527d242d64697669736f722024505f7b5c7369676d617d5c6c65667428445c7269676874293a3d442d4e5f7b5c7369676d617d5c6c65667428445c726967687429242c0a7765206861766520616e2069736f6d6f72706869736d200a5c5b0a485e7b307d5c6c65667428582c5c6d61746863616c7b4f7d5f7b587d5c6c656674286d445c7269676874295c7269676874295c617070726f7820485e7b307d5c6c65667428582c5c6d61746863616c7b4f7d5f7b587d5c6c656674285c6c6c636f726e6572206d505f7b5c7369676d617d5c6c65667428445c7269676874295c6c72636f726e65725c7269676874295c7269676874290a5c5d0a20666f7220616e7920246d3e302e2420546865206465636f6d706f736974696f6e2024443d505f7b5c7369676d617d5c6c65667428445c7269676874292b4e5f7b5c7369676d617d5c6c65667428445c726967687429240a69732063616c6c6564207468652073656374696f6e616c206465636f6d706f736974696f6e2e200a0a5c6d6564736b69707b7d0a5c656e647b646566696e6974696f6e7d0a5c626567696e7b72656d61726b7d0a496620244424206973206e6f74206269672c207468656e20245c6c6566747c6d445c72696768747c24206d617920626520656d70747920666f72206365727461696e0a706f73697469766520696e74656765727320246d242c20616e6420746875732c20696e20646566696e696e6720244e5f7b5c7369676d617d5c6c65667428445c726967687429242c0a6974206973206e656365737361727920746f20636f6e7369646572206f6e6c79207468652073656d6967726f757020245c6d61746862627b4e7d5c6c65667428445c726967687429240a6f6620246d242073756368207468617420245c6c6566747c6d445c72696768747c5c6e65715c656d7074797365742420666f722073756368202444242e20496e0a746869732061727469636c652c206f6e6c79207468652073656374696f6e616c206465636f6d706f736974696f6e206f66206269672064697669736f72732069730a636f6e736964657265642e200a5c656e647b72656d61726b7d0a5c6d6564736b69707b7d0a0a0a54686520666f6c6c6f77696e6720726573756c7473206f6e2061726974686d6574696320736368656d65732061726520616c736f20757365643a0a5c626567696e7b7468656f72656d7d0a5c6c6162656c7b4c69754e65666e6573737d4c65742024532420626520616e20616666696e6520446564656b696e6420736368656d6520616e642024663a585c746f2053240a612070726f6a656374697665206d6f72706869736d2e204c657420245c6d61746863616c7b4c7d2420626520616e20696e7665727469626c65207368656166206f6e0a2458242073756368207468617420245c6d61746863616c7b4c7d5f7b737d24206973206e656620666f7220657665727920636c6f73656420706f696e742024735c696e2053242e0a5468656e20245c6d61746863616c7b4c7d24206973206e65662e205c656e647b7468656f72656d7d0a5c626567696e7b70726f6f667d0a4279205c636974655b352e332e32345d7b4c69757d2c207468652073746174656d656e7420686f6c6473207768656e206e6566206973207265706c616365642062790a616d706c652e204e6f772c20632e662e205c636974655b312e342e31305d7b4c617a7d2c20697420737566666963657320746f2063686f6f736520616e20616d706c650a64697669736f72202448242077686963682072657374726963747320746f2024585f7b737d242c20736f20746861742024445f7b737d2b5c657073696c6f6e20485f7b737d240a697320616d706c6520666f7220616c6c2073756666696369656e746c7920736d616c6c20245c657073696c6f6e242e205468656e2024442b5c657073696c6f6e2048240a697320616d706c6520666f7220616c6c2073756666696369656e746c7920736d616c6c20245c657073696c6f6e2c2420616e6420736f20244424206973206e65662e200a5c656e647b70726f6f667d0a5c6d6564736b69707b7d0a0a5c626567696e7b7468656f72656d7d0a285c636974655b352e332e32302c20352e332e32325d7b4c69757d295c6c6162656c7b544641455f4c69755f44494f507d204c65742024533d537065635c205c6d61746863616c7b4f7d5f7b4b7d240a62652074686520737065637472756d206f6620612064697363726574652076616c756174696f6e2072696e6720245c6d61746863616c7b4f7d5f7b4b7d2c2420776974680a67656e6572696320706f696e7420245c6574612420616e6420636c6f73656420706f696e742024732e24204c65742024663a585c746f20532420626520610a70726f6a656374697665206d6f72706869736d20616e6420245c6d61746863616c7b467d24206120636f686572656e74207368656166206f6e2024582420746861740a697320666c6174206f766572202453242e204669782024705c676530242e20544641452e200a0a283129205765206861766520657175616c697479202464696d5f7b6b5c6c65667428735c7269676874297d485e7b707d5c6c65667428585f7b737d2c5c6d61746863616c7b467d5f7b737d5c7269676874293d64696d5f7b6b5c6c656674285c6574615c7269676874297d485e7b707d5c6c65667428585f7b5c6574617d2c5c6d61746863616c7b467d5f7b5c6574617d5c7269676874292e24200a0a2832292024485e7b707d5c6c65667428582c5c6d61746863616c7b467d5c726967687429242069732066726565206f76657220245c6d61746863616c7b4f7d5f7b4b7d240a616e64207468652063616e6f6e6963616c20686f6d6f6d6f72706869736d2024485e7b707d5c6c65667428582c5c6d61746863616c7b467d5c7269676874295c6f74696d65735f7b5c6d61746863616c7b4f7d5f7b4b7d7d6b5c6c65667428735c7269676874295c746f20485e7b707d5c6c65667428585f7b737d2c5c6d61746863616c7b467d5f7b737d5c726967687429240a697320612062696a656374696f6e2e200a0a2832292054686520245c6d61746863616c7b4f7d5f7b4b7d2d246d6f64756c652024485e7b702b317d5c6c65667428582c5c6d61746863616c7b467d5c726967687429240a697320746f7273696f6e2d667265652e200a0a416c736f2c207265676172646c657373206f662077686574686572207468652061626f766520686f6c642c20245c6368695f7b6b5c6c65667428735c7269676874297d5c6c656674285c6d61746863616c7b467d5f7b737d5c7269676874293d5c6368695f7b6b5c6c656674285c6574615c7269676874297d5c6c656674285c6d61746863616c7b467d5f7b5c6574617d5c7269676874292e24200a5c656e647b7468656f72656d7d0a5c6d6564736b69707b7d0a0a5c626567696e7b7468656f72656d7d0a285c636974655b4949492e31322e31315d7b4861727d5c6c6162656c7b74686d436f686f6d426173654368616e67657d250a5c626567696e7b636f6d6d656e747d0a5c696e636c75646567726170686963737b70617374656434372e706e677d0a5c656e647b636f6d6d656e747d0a7b7d204c65742024663a585c746f20592420626520612070726f6a656374697665206d6f72706869736d206f66204e6f657468657269616e20536368656d65732c20616e640a6c657420244624206265206120636f686572656e74207368656166206f6e202458242c20666c6174206f7665722024592e244c65742024792420626520610a706f696e74206f66202459242e205468656e200a0a28612920696620746865206e61747572616c206d617020245c7661727068695e7b697d5c6c65667428795c7269676874293a525e7b697d665f7b2a7d5c6c65667428465c7269676874295c6f74696d6573206b5c6c65667428795c7269676874295c746f20485e7b697d5c6c65667428585f7b797d2c465f7b797d5c726967687429240a6973207375726a6563746976652c207468656e20697420697320616e2069736f6d6f72706869736d2c20616e64207468652073616d65206973207472756520666f720a616c6c2024795e7b5c7072696d657d2420696e2061207375697461626c65206e65696768626f72686f6f64206f66202479243b200a0a28622920417373756d6520245c7661727068695e7b697d5c6c65667428795c72696768742924206973207375726a6563746976652e205468656e20544641453a0a28692920245c7661727068695e7b692d317d5c6c65667428795c7269676874292420697320616c736f207375726a6563746976652e20286969292024525e7b697d665f7b2a7d5c6c65667428465c726967687429240a6973206c6f63616c6c79206672656520696e2061206e65696768626f72686f6f64206f66202479242e200a5c656e647b7468656f72656d7d0a5c6d6564736b69707b7d0a0a5c626567696e7b7468656f72656d7d0a5c6c6162656c7b74686d3a4d756d666f7264735468656f72656d7d5c636974655b53656320355d7b4d756d7d204c65742024663a585c746f2059242062650a612070726f706572206d6f72706869736d206f66206e6f657468657269616e20736368656d657320776974682024593d537065635c20412420616666696e652c0a616e6420245c6d61746863616c7b467d24206120636f686572656e74207368656166206f6e202458242c20666c6174206f766572202459242e2054686572650a697320612066696e69746520636f6d706c657820244b5e7b5c62756c6c65747d3a305c746f204b5e7b307d5c746f2e2e2e5c746f204b5e7b6e7d5c746f3024206f660a66696e6974656c792067656e6572617465642070726f6a656374697665202868656e6365206672656520696620244124206973206c6f63616c29250a5c626567696e7b636f6d6d656e747d0a5c696e636c75646567726170686963737b70617374656436352e706e677d0a5c656e647b636f6d6d656e747d0a7b7d202441242d6d6f64756c657320616e6420616e2069736f6d6f72706869736d206f662066756e63746f72730a0a24485e7b707d5c6c65667428585c74696d65735f7b597d537065635c20422c5c6d61746863616c7b467d5c6f74696d65735f7b417d425c7269676874295c617070726f7820485e7b707d5c6c656674284b5e7b5c62756c6c65747d5c6f74696d65735f7b417d425c7269676874292c5c205c6c65667428705c6765305c726967687429240a6f6e207468652063617465676f7279206f66202441242d616c676562726173202442242e200a5c656e647b7468656f72656d7d0a5c6d6564736b69707b7d0a0a5c626567696e7b636f6d6d656e747d0a5c626567696e7b636f726f6c6c6172797d0a285c636974655b322e325d7b4f73737d250a5c6c6162656c7b636f723a4f737365726d616e56617269616e747d29204c65742024663a585c746f20532420626520612070726f706572206d6f72706869736d0a6f66204e6f657468657269616e20736368656d65732c20616e6420244624206120636f686572656e7420245c6d61746863616c7b4f7d5f7b587d245c2d6d6f64756c652c0a666c6174206f7665722024533d537065635c20522420666f72206120445652202452242c2e205468656e20616e79206a756d707320696e207468652066756e6374696f6e0a5c5b0a735c6d617073746f2064696d5f7b6b5c6c65667428735c7269676874297d485e7b697d5c6c65667428585f7b737d2c465f7b737d5c7269676874290a5c5d0a20617265206e65636573736172696c792070616972656420696e20636f6e736563757469766520696e64696365732024692420616e642024692b31242e20476976656e0a616e7920706f696e742024735c696e2053242c2077652063616e207468757320696e647563746976656c792064657465726d696e6520666f722077686963682070616972730a24692c692b312420737563682061206a756d70206f63637572732c20616e6420627920686f77206d7563682e200a0a4d6f72656f7665722c20696e20746865206361736520746861742024533d537065635c20522420666f722024522420612044565220286f72206d6f72652067656e6572616c6c790a726567756c6172206f662064696d656e73696f6e2031250a292c2077652066696e6420746861742024525e7b692b317d665f7b2a7d46242068617320746f7273696f6e20696620616e64206f6e6c79206966207375636820610a6a756d70206f636375727320666f722024692c692b31242e205c656e647b636f726f6c6c6172797d0a5c626567696e7b70726f6f667d0a284927766520696e636c7564656420746865207265666572656e6365642070726f6f6620686572652c2073696e6365206974207365656d7320746f206265206120636f6c6c656374696f6e0a6f6620706572736f6e616c206e6f7465732c20616e6420492063616e27742066696e642061207075626c6973686564207265666572656e6365292e20546865206b65790a706f696e742069732074686520666f6c6c6f77696e673a206170706c79696e67207468652061626f7665205468656f72656d205c7265667b74686d3a4d756d666f7264735468656f72656d7d0a77652066696e64206120606066726565272720636f6d706c657820245c6c656674284b5e7b5c62756c6c65747d2c645e7b707d3a4b5e7b707d5c746f204b5e7b702b317d5c726967687429240a617320696e205468656f72656d205c7265667b74686d3a4d756d666f7264735468656f72656d7d2e200a0a5468656e2c20666f6c6c6f77696e67204d756d666f72642c205c636974655b4c656d6d61206f6e20706735305d7b4d756d7d202464696d5f7b6b5c6c65667428795c7269676874297d485e7b707d5c6c65667428585f7b797d2c5c6d61746863616c7b467d5f7b797d5c7269676874293d64696d5f7b6b5c6c65667428795c7269676874297d5c6c6566745b6b65725c6c65667428645e7b707d5c6f74696d65735f7b417d6b5c6c65667428795c7269676874295c7269676874295c72696768745d240a5c5b0a2d64696d5f7b6b5c6c65667428795c7269676874297d5c6c6566745b496d5c6c65667428645e7b702b317d5c6f74696d65735f7b417d6b5c6c65667428795c7269676874295c7269676874295c72696768745d0a5c5d0a5c5b0a3d64696d5f7b6b5c6c65667428795c7269676874297d5c6c6566745b4b5e7b707d5c6f74696d6573206b5c6c65667428795c7269676874295c72696768745d2d64696d5f7b6b5c6c65667428795c7269676874297d5c6c6566745b496d5c6c65667428645e7b707d5c6f74696d6573206b5c6c65667428795c7269676874295c7269676874295c72696768745d0a5c5d0a5c5b0a2d64696d5f7b6b5c6c65667428795c7269676874297d5c6c6566745b496d5c6c65667428645e7b702d317d5c6f74696d6573206b5c6c65667428795c7269676874295c7269676874295c72696768745d2e0a5c5d0a427920667265656e6573732c20746865206669727374207465726d20697320636f6e7374616e74206f6e202459242e20417320696e20746865206369746564206c656d6d612c0a666f7220616e792024705c676530242c207468652066756e6374696f6e202464696d5f7b6b5c6c65667428795c7269676874297d5c6c6566745b496d5c6c65667428645e7b707d5c6f74696d6573206b5c6c65667428795c7269676874295c7269676874295c72696768745d240a6973206c6f7765722073656d692d636f6e74696e756f7573206f6e2024592e242054687573206966202464696d5f7b6b5c6c65667428795c7269676874297d5c6c6566745b496d5c6c65667428645e7b702d317d5c6f74696d6573206b5c6c65667428795c7269676874295c7269676874295c72696768745d240a6a756d707320646f776e2c206974206d7573742061666665637420626f7468202464696d5f7b6b5c6c65667428795c7269676874297d485e7b702d317d5c6c65667428585f7b797d2c465f7b797d5c726967687429240a616e64202464696d5f7b6b5c6c65667428795c7269676874297d485e7b707d5c6c65667428585f7b797d2c465f7b797d5c72696768742924202873696e63652062790a6c6f7765722d73656d69636f6e74696e756974792c20697420697320696d706f737369626c6520746f20636f756e746572207769746820612064726f70206f662072616e6b0a6174207468652067656e6572696320706f696e74206f6e2024485e7b707d24292e2054686973206769766573207468652066697273742070617274206f66207468650a7468656f72656d2e200a0a4e6f772c20636f6e7369646572207468652065786163742073657175656e6365200a5c5b0a305c746f20696d5c20645e7b707d5c746f204b5e7b702b317d5c746f204b5e7b702b317d2f5c6c65667428696d5c20645e7b707d5c7269676874295c746f302e0a5c5d0a20432e662e205c636974655b65786320312e322e31355d7b4c69757d2c20244b5e7b702b317d2f5c6c65667428696d5c20645e7b707d5c7269676874292420746f7273696f6e2d667265652c0a696d706c6965732024696d5c20645e7b707d2420697320666c61742e20412066696e6974652c20666c6174202452242d6d6f64756c65206f76657220726564756365640a6e6f657468657269616e2072696e6720697320666c617420696666207468652072616e6b20250a7b7d20244d5c6f74696d65735f7b527d6b5c6c656674285c6d6174686672616b7b707d5c72696768742924206973206c6f63616c6c7920636f6e7374616e7420666f720a245c6d6174686672616b7b707d5c696e20537065635c2041242028632e662e20666f72206578616d706c65205c636974655b492e372e31355d7b4772617d292e0a556e646572207468652065786163742073657175656e63653a200a5c5b0a305c746f206b65725c6c65667428645e7b702b317d5c7269676874292f696d5c6c65667428645e7b707d5c7269676874295c746f204b5e7b702b317d2f5c6c65667428696d5c20645e7b707d5c7269676874295c746f204b5e7b702b317d2f5c6c656674286b65725c20645e7b702b317d5c7269676874295c746f300a5c5d0a746865206c617374207465726d20696e6a6563747320696e746f20244b5e7b702b327d242c20776869636820697320667265652c20616e64207468657265666f72650a746865206c617374207465726d20686173206e6f20746f7273696f6e2e20417320246b65725c6c65667428645e7b702b317d5c7269676874292f696d5c6c65667428645e7b707d5c7269676874295c617070726f7820525e7b702b317d665f7b2a7d46242c0a6279205468656f72656d205c7265667b74686d3a4d756d666f7264735468656f72656d7d2c2069662074686174207465726d20697320746f7273696f6e20667265652c0a7468656e20244b5e7b702b317d2f5c6c65667428696d5c20645e7b707d5c7269676874292420697320746f7273696f6e20667265652c20616e6420746875732024696d5c20645e7b707d240a697320666c61742c20776869636820696d706c6965732074686174202464696d5f7b6b5c6c65667428795c7269676874297d485e7b707d5c6c65667428585f7b797d2c5c6d61746863616c7b467d5f7b797d5c726967687429240a6973206c6f63616c6c7920636f6e7374616e74206279207468652061626f76652e200a5c656e647b70726f6f667d0a5c656e647b636f6d6d656e747d0a0a5c73656374696f6e7b436f6d7075746162696c697479206f66204b4c54204b6177616d61746120566965687765672056616e697368696e677d0a0a5c7465787462667b4e6f74652c204920646f207468697320626574746572206c617465722c2073686f756c642070726f6261626c792064656c6574652066726f6d20686572657d0a496e2074686973206d6f64696669636174696f6e2049206e6f746520746861742c20612073696d706c65206d6f64696669636174696f6e206f662054616e616b6127730a7468656f72656d205c7265667b54616e616b6144494f507d20676976657320796f752076657273696f6e206f662074686520286c6f6729204b6177616d6174610a566965687765672056616e697368696e6720696e20776869636820746865206d756c7469706c65206f6620746865206e65662064697669736f72206973206174206c656173740a636f6d70757461626c652e204e6f7465207468617420746865726520697320612073696d696c617220726563656e7420726573756c74206f66205c636974657b44467d2c0a7768696368206973206d6f726520726573747269637469766520696e2074686174206974207265717569726573206120736d6f6f74682076617269657479207261746865720a7468616e2061206e6f726d616c2070726f6a656374697665206b6c7420706169722e200a5c626567696e7b7468656f72656d7d0a285c6c6162656c7b74686d3a4566666563746976654b565653757266616365737d20456666656374697665204b4c54204b6177616d6174612d566965687765670a56616e697368696e6720666f72206e6f726d616c20737572666163657329204c657420245c6c65667428582c5c44656c74615c726967687429242062652061206e6f726d616c0a70726f6a656374697665206b6c74207375726661636520286f76657220616e20616c67656272616963616c6c7920636c6f736564206669656c64206f662063686172616374657269737469630a24703e32242920776865726520245c44656c74612420697320616e2065666665637469766520245c6d61746862627b527d242d64697669736f722e204c65740a244e242062652061206e656620616e642062696720245c6d61746862627b527d242d6361727469657220245c6d61746862627b527d242d64697669736f720a7769746820244e5e7b327d3e766f6c5c6c65667428585c726967687429242e204c657420244424206265206120245c6d61746862627b517d242d436172746965720a245c6d61746862627b5a7d242d64697669736f72207375636820746861742024442d5c6c656674284b5f7b587d2d5c44656c74615c726967687429242069730a6e656620616e64206269672e205468656e2024485e7b697d5c6c65667428582c5c6d61746863616c7b4f7d5f7b587d5c6c65667428442b724e2b4e5e7b5c7072696d657d5c7269676874295c7269676874293d30240a666f722065766572792024693e30242c20657665727920706f736974697665207265616c206e756d6265722024725c676531242c20616e64206576657279206e65660a245c6d61746862627b527d242d4361727469657220245c6d61746862627b527d242d64697669736f7220244e5e7b5c7072696d657d24207375636820746861740a24724e2b4e5e7b5c7072696d657d24206973206120436172746965722064697669736f722e205c656e647b7468656f72656d7d0a5c626567696e7b70726f6f667d0a566572626174696d2066726f6d205c636974655b322e31315d7b54616e327d206578636570742074686174205765616b204b6f64616972612056616e697368696e670a5c636974655b322e345d7b54616e327d20696e207468652070726f6f66206f66205c636974655b322e365d7b54616e327d206973207265706c616365642062790a546572616b6177612773207468656f72656d205c7265667b546572616b617761735468656f72656d7d2e250a5c626567696e7b636f6d6d656e747d0a5c626567696e7b636f726f6c6c6172797d0a285c6c6162656c7b74686d3a4566666563746976654b565653757266616365732d317d20456666656374697665204b4c54204b6177616d6174612d566965687765670a56616e697368696e67206f76657220612044565229204c657420245c6c65667428582c5c44656c74615c726967687429242062652061206b6c742070616972206f660a72656c61746976652064696d656e73696f6e20243224206f7665722061204456522024522420776974682072657369647565206669656c6420246b2420616e640a6672616374696f6e206669656c6420244b242073756368207468617420246b2420697320616c67656272616963616c6c7920636c6f736564206f662063686172616374657269737469630a24703e30242e20417373756d6520244b5f7b587d2b5c44656c7461242069732070736575646f2d65666665637469766520616e642073696d706c65206e6f726d616c0a63726f7373696e6773206f766572202452242e204c657420244e242062652061206e656620616e642062696720245c6d61746862627b527d242d636172746965720a245c6d61746862627b527d242d64697669736f72207769746820244e5e7b327d3e766f6c5c6c65667428585c726967687429242e204c6574202444242062650a6120245c6d61746862627b517d242d4361727469657220245c6d61746862627b5a7d242d64697669736f72207375636820746861742024442d5c6c656674284b5f7b587d2d5c44656c74615c726967687429240a6973206e656620616e64206269672e205468656e2024485e7b697d5c6c65667428582c5c6d61746863616c7b4f7d5f7b587d5c6c65667428442b724e2b4e5e7b5c7072696d657d5c7269676874295c7269676874293d30240a666f722065766572792024693e30242c20657665727920706f736974697665207265616c206e756d6265722024725c676531242c20616e64206576657279206e65660a245c6d61746862627b527d242d4361727469657220245c6d61746862627b527d242d64697669736f7220244e5e7b5c7072696d657d24207375636820746861740a24724e2b4e5e7b5c7072696d657d24206973206120436172746965722064697669736f722e205c656e647b636f726f6c6c6172797d0a5c626567696e7b70726f6f667d0a4170706c79204e616b6179616d612773206c656d6d6120616e64205c636974655b312e322e31322c20352e332e32305d7b4c69757d2c202e2e2e5c7465787462667b6d616b650a7375726520746f206d616b65207468697320636c656172206265666f7265207075626c697368696e677d2e202869742773206a7573742073656d69636f6e74696e756974790a74686f756768292e205c656e647b70726f6f667d0a5c656e647b636f6d6d656e747d0a0a5c656e647b70726f6f667d0a0a0a0a5c73656374696f6e7b496e74657273656374696f6e205468656f7279206f6e2024592f52242e207d0a0a496e20746869732073656374696f6e2c20250a5c626567696e7b636f6d6d656e747d0a5c696e636c75646567726170686963737b70617374656437302e706e677d0a5c656e647b636f6d6d656e747d0a7b7d2024592f522420697320612070726f70657220616c67656272616963207370616365206f662072656c61746976652064696d656e73696f6e2024643d322420776974680a67656f6d6574726963616c6c7920636f6e6e6563746564206669626572732077686572652024522420697320612064697363726574652076616c756174696f6e0a72696e6720776974682072657369647565206669656c6420246b24206f662063686172616374657269737469632024703e302420616e64206672616374696f6e0a6669656c6420244b24206f66206368617261637465726973746963202430242e202853656520666f7220652e672e2054686520636f6d70616374205368696d7572610a566172696574696573206d656e74696f6e65642066726f6d205c636974655b302e315d7b5375687d2e200a0a49662024592f522420697320736d6f6f74682c207468656e206c656d6d61205c7265667b496e74657273656374696f6e4e756d62657273392e337d206170706c6965730a746f2073686f77207468617420666f7220616e792064697669736f72732024432c442420657874656e64696e6720746f20626f7468206669626572732c2077650a63616e206a75737420646566696e652024432e443d5c6c65667428437c5f7b585f7b6b7d7d2e447c5f7b585f7b6b7d7d5c7269676874295f7b585f7b6b7d7d242e0a4f6e20746865206f746865722068616e642c2069662024592f5224206973206d6572656c79206e6f726d616c20616e642070726f7065722c206275742069732061637475616c6c790a6120736368656d652c20746865207265736f6c7574696f6e206f662073696e67756c617269746965732c207468656f72656d205c7265667b54686d3a43505f5265736f6c7574696f6e7d2c0a686f6c64732e20546875732074686520696e74657273656374696f6e207468656f72792063616e20626520646566696e656420617320696e205c636974655b44656620332e315d7b54616e7d3a0a24663a585e7b5c7072696d657d5c746f2058242069732061207265736f6c7574696f6e2c20616e642024432e443d665e7b2a7d432e665e7b2a7d442420666f720a74776f2064697669736f72732024432c4424206f6e2024592f52242e2042792070726f7065726e6573732c207468697320696e74657273656374696f6e20657874656e64730a6279206c696e65617269747920746f205765696c2064697669736f7273207769746820245c6d61746862627b517d24206f7220245c6d61746862627b527d240a636f656666696369656e74732e204e756d65726963616c206571756976616c656e636520616e6420244e5e7b317d5c6c65667428585c7269676874295f7b5c6d61746862627b517d2c5c6d61746862627b527d7d240a617265207468656e20646566696e656420617320757375616c2e200a0a4e6f7465207468652074776f20646966666572656e74206879706f74686573697320686572653a2054686520696e76617269616e6365206f6620706c75726967656e6572610a7468656f72656d20726571756972657320612070726f7065722c20736d6f6f746820616c67656272616963207370616365206f662072656c61746976652064696d656e73696f6e0a2432242c207768696c6520746865206578697374656e6365206f66206d696e696d616c206d6f64656c732072657175697265732074686520696e7465726d6564696174650a7374657073206f6620746865206d696e696d616c206d6f64656c2070726f6772616d20746f206861766520736f6d6520696e74657273656374696f6e207468656f72792c0a616e64207468757320626520736368656d65732028627574206e6f74206e65636573736172696c7920736d6f6f7468292e200a0a0a5c73656374696f6e7b50726f6f66206f662044494f507d0a0a5468652070726f6f66206f6620746865206d61696e20726573756c7420676f657320696e207365766572616c2073746570732e2054686520666972737420737465700a697320746f2073686f77207468617420756e646572206d6f726520726573747269637469766520617373756d7074696f6e73206f6e20746865207061697220245c6c65667428582c5c44656c74615c7269676874292c240a746861742074686520696e76617269616e6365206f6620706c75726967656e65726120686f6c64732e2054686520666f6c6c6f77696e672069732073696d696c61720a746f205c636974655b372e335d7b54616e337d2062757420776974686f757420616e20616d706c6520626f756e646172792e205468652070726f6f662069732073696d696c61720a746f20746865205468656f72656d205c636974655b312e322e31286969295d7b5375687d2c20776865726520656d70747920626f756e6461727920697320636f6e736964657265640a616e642074686572652069732c20696e206164646974696f6e2c20617373756d656420612024575f7b327d24206c696674696e67206879706f7468657369732e200a5c626567696e7b70726f706f736974696f6e7d0a5c6c6162656c7b5465726d696e616c53696d706c65436173657d250a5c626567696e7b636f6d6d656e747d0a5c696e636c75646567726170686963735b6262203d2030203020323030203130302c2064726166742c20747970653d6570735d7b7061737465643530392e706e677d0a0a49207468696e6b2074686520706f696e74206865726520697320746f2073686f7720746865207374726174612072657374726963742028736f206c696b6520245c6d61746862627b427d5c6c656674282e2e5c7269676874297c5f7b585f7b307d7d3d5c6d61746862627b427d5c6c656674282e2e5c72696768742924290a7468656e20796f752063616e20676f2066726f6d204b4c5420746f207465726d696e616c20627920626c6f77696e672075702028582c44656c7461292077686963680a492067756573732073696e636520737472617461206c79696e67206f766572202f20626c616820626c616820626c6168206769766573207573207465726d696e616c0a6f6e2024585f7b307d242061732077656c6c2e20536f20696e2063686172202470242069742773206e6f7420736f20636c65617220746f206d6520492067756573732e200a0a5c696e636c75646567726170686963735b6262203d2030203020323030203130302c2064726166742c20747970653d6570735d7b7061737465643530322e706e677d0a49207468696e6b2074686174206c6f6720736d6f6f7468207468696e67206973206b696e64206f6620646566696e6974696f6e206f6620696e74657273656374696e670a696e207374726174613a200a0a5c696e636c75646567726170686963735b6262203d2030203020323030203130302c2064726166742c20747970653d6570735d7b2e2e2f4d613974682f44313338333333313639392e706e677d0a0a616e7320616c736f20342e3820696e20342e31204b6f6c6c61722073696e67206d6d7020736179732074686174207468652073747261746120617265207468652073616d652e2e2e200a0a616e6420342e32206973200a0a5c696e636c75646567726170686963735b6262203d2030203020323030203130302c2064726166742c20747970653d6570735d7b7061737465643530382e706e677d0a0a646f6e277420666f7267657420746861742049276d20617373756d696e67207465726d696e616c206f6e207370656369616c20616e6420746f74616c2066696265722e2e2e200a0a736f20796561682c206d617962652074686973206f6e653a200a0a5c696e636c75646567726170686963735b6262203d2030203020323030203130302c2064726166742c20747970653d6570735d7b7061737465643531322e706e677d0a5c656e647b636f6d6d656e747d0a4c657420245c6c65667428582c5c44656c74615c726967687429242062652061207465726d696e616c206c6f6720736d6f6f74682070616972206f662072656c61746976650a64696d656e73696f6e20243224206f76657220612044565220245224207769746820616c67656272616963616c6c7920636c6f7365642072657369647565206669656c640a246b24206f662063686172616374657269737469632024703e322420616e642070657266656374206672616374696f6e206669656c6420244b242e20417373756d650a7468617420244b5f7b587d2b5c44656c74612420697320245c6d61746862627b517d242d4361727469657220616e6420245c6e755c6c656674284b5f7b587d2b5c44656c74615c7269676874295c6e657131242e0a417373756d65207468617420245c6d61746862627b427d5f7b2d7d5c6c656674284b5f7b585f7b6b7d7d2b5c44656c74615f7b6b7d5c7269676874295c77656467655c44656c74615f7b6b7d3d5c656d707479736574242e0a5468656e2074686572652065786973747320616e20246d5f7b307d242073756368207468617420666f7220246d5c696e206d5f7b307d5c6d61746862627b5a7d5e7b2b7d242c0a5c5b0a685e7b307d5c6c656674286d5c6c656674284b5f7b585f7b6b7d7d2b5c44656c74615f7b6b7d5c7269676874295c7269676874293d685e7b307d5c6c656674286d5c6c656674284b5f7b585f7b4b7d7d2b5c44656c74615f7b4b7d5c7269676874295c7269676874292e0a5c5d0a20496620244b5f7b587d2b5c44656c746124206973206269672c207468656e20246d5f7b307d2420697320636f6d70757461626c652e2049662073657272650a6475616c69747920686f6c6473206f6e202458242c207468656e207468652073616d6520686f6c647320666f7220245c6e755c6c656674284b5f7b587d2b5c44656c74615c7269676874293d31242e200a5c656e647b70726f706f736974696f6e7d0a5468652070726f6f66206f662070726f706f736974696f6e205c7265667b5465726d696e616c53696d706c65436173657d2c20697320676976656e20696e207468650a666f6c6c6f77696e6720636c61696d732e200a5c626567696e7b636c61696d7d0a5c6c6162656c7b436c61696d3a4d696e696d616c4d6f64656c4f6e5370656369616c7d417373756d7074696f6e732061732061626f76652c2061667465722070617373696e670a746f20616e20657874656e73696f6e2024525e7b5c7072696d657d24206f66202452242c20746865726520697320612070726f7065722c20736d6f6f746820616c676562726169630a73706163652024585e7b6d696e7d2f525e7b5c7072696d657d2420616e6420616e2024525e7b5c7072696d657d24206d6f72706869736d2024585c6f74696d657320525e7b5c7072696d657d5c746f20585e7b6d696e7d240a73756368207468617420626f74682024585f7b6b7d5c746f20585f7b6b7d5e7b6d696e7d24206973206f627461696e6564206279207375636365737369766520626c6f772d646f776e730a6f6620245c6c656674282d315c726967687429242063757276657320616e6420244b5f7b585f7b6b7d5e7b6d696e7d7d2b5c44656c74615f7b585f7b6b7d5e7b6d696e7d7d240a6973206e65662e205c656e647b636c61696d7d0a5c626567696e7b70726f6f667d0a417320246b2420697320616c67656272616963616c6c7920636c6f736564206f662063686172616374657269737469632024703e30242c207468656e2062790a74686520436f6e65205468656f72656d205c7265667b436f6e655468656f72656d7d2c0a5c5b0a5c6f7665726c696e657b4e457d5c6c65667428585f7b6b7d5c7269676874293d5c6f7665726c696e657b4e457d5c6c65667428585f7b6b7d5c7269676874295f7b4b5f7b585f7b6b7d7d2b5c44656c74615f7b6b7d5c6765307d2b5c73756d5c6d61746862627b527d5f7b5c6765307d5c6c6566745b435f7b697d5c72696768745d0a5c5d0a7769746820656163682024435f7b697d2420697320726174696f6e616c206f722024435f7b697d3d425f7b6a7d2420666f7220736f6d652024425f7b6a7d240a6120636f6d706f6e656e74206f6620245c44656c74612420776974682024425f7b6a7d5e7b327d3c30242e20556e6465722074686520617373756d7074696f6e0a7468617420245c6d61746862627b427d5f7b2d7d5c6c656674284b5f7b585f7b6b7d7d2b5c44656c74615f7b6b7d5c7269676874295c77656467655c44656c74615f7b6b7d3d5c656d707479736574242c0a7468656e2061637475616c6c7920656163682024435f7b697d2420697320726174696f6e616c20616e64206973206e6f74206120636f6d706f6e656e74206f660a245c44656c74615f7b6b7d242e20546875732024435f7b697d2e5c44656c74615f7b6b7d5c6765302420736f2024435f7b697d2e4b5f7b585f7b6b7d7d3c30242c0a616e642073696e636520244e5f7b5c7369676d617d5c6c656674284b5f7b585f7b6b7d7d2b5c44656c74615f7b6b7d5c72696768742924206973206120245c6d61746862627b517d242d64697669736f720a6279205c636974655b372e315d7b54616e7d2c207468656e205468656f72656d205c7265667b74686d3a54616e616b6150315468656f72656d7d20696d706c6965730a24435f7b697d5c617070726f785c6d61746862627b507d5e7b317d242e204279204c656d6d61205c7265667b282c2d322e332e352d292d317d2c2024435f7b697d240a63616e20626520636f6e7472616374656420746f2061206c6f672d63616e6f6e6963616c20706f696e742c2077686963682069732061637475616c6c79206120736d6f6f74680a706f696e7420756e64657220746865207465726d696e616c20617373756d7074696f6e2e20546875732024435f7b697d2420697320616e20657863657074696f6e616c0a6375727665206f6620746865206669727374206b696e642c20736f20697420697320706f737369626c6520746f206170706c79204c656d6d61205c7265667b4b61747375726155656e6f7d2e200a0a4279204c656d6d61205c7265667b4b61747375726155656e6f7d2c20746865726520697320612044565220245c74696c64657b527d5c7375707365742052240a73756368207468617420245c70693a585c6f74696d65735c74696c64657b527d5c746f5c74696c64657b587d2420696e64756365732074686520636f6e7472616374696f6e0a6f662024435f7b697d24206f6e2024585f7b6b7d2420616e642024585f7b4b7d242c20616e64206675727468657220250a5c626567696e7b636f6d6d656e747d0a5c696e636c75646567726170686963735b6262203d2030203020323030203130302c2064726166742c20747970653d6570735d7b7061737465643433392e706e677d0a5c656e647b636f6d6d656e747d0a7b7d20245c74696c64657b5c7661727068697d3a5c74696c64657b587d5c746f20537065635c6c656674285c74696c64657b527d5c726967687429242069732070726f7065722c0a736d6f6f74682c207365706172617465642c20616e642066696e69746520747970652e204e6f7465207468617420616674657220612062617365206368616e67652c0a74686520657874656e73696f6e20245c74696c64657b527d5c73757073657420522420696e647563657320612066696e69746520657874656e73696f6e206f6e0a72657369647565206669656c64732c20616e642073696e636520246b2420697320616c67656272616963616c6c7920636c6f7365642c20697420696e64756365730a6964656e74697479206f6e2072657369647565206669656c64732e204e6f772049206e65656420746f20776f726b207769746820245c74696c64657b587d242e0a496e206f7264657220746f206170706c792074686520436f6e65205468656f72656d205c7265667b436f6e655468656f72656d7d20616761696e2c2049206e6565640a245c74696c64657b587d5f7b6b7d2420746f2062652070726f6a6563746976652c20250a5c626567696e7b636f6d6d656e747d0a736f204920706f737369626c7920616761696e20657874656e6420245c74696c64657b527d2420746f2067657420245c74696c64657b6b7d5e7b5c7072696d657d240a616c67656272616963616c6c7920636c6f7365642e200a5c656e647b636f6d6d656e747d0a5c626567696e7b636f6d6d656e747d0a5c696e636c75646567726170686963735b6262203d2030203020323030203130302c2064726166742c20747970653d6570735d7b7061737465643433382e706e677d0a5c656e647b636f6d6d656e747d0a7b7d20627574206120736d6f6f746820616c67656272616963207370616365206f662064696d656e73696f6e202432242c2070726f7065722c207365706172617465642c0a616e64206f662066696e6974652074797065206f76657220616e20616c67656272616963616c6c7920636c6f736564206669656c642069732070726f6a6563746976652c0a736f20245c74696c64657b587d5f7b6b7d242069732070726f6a6563746976652e2054687573207468652073616d652070726f636573732063616e2062652072657065617465642e0a4561636820657874656e73696f6e20245c74696c64657b527d5c73757073657420522420696e6475636573206120666c61742062617365206368616e6765206f6e0a7468652067656e6572696320666962657220616e6420616e2069736f6d6f72706869736d206f6e20746865207370656369616c2066696265722c20616e6420626c6f772d7570730a6172652070726573657276656420627920666c617420626173652d6368616e67652c20736f207468657265206973206e6f2070726f626c656d20696e20657874656e64696e670a2452242e2041732074686520506963617264206e756d6265722064726f7073206561636820737465702c20746865726520617265206f6e6c792066696e6974656c790a6d616e792073746570732e5c656e647b70726f6f667d0a5c626567696e7b636c61696d7d0a5c6c6162656c7b636c61696d3a4d696e696d616c4d6f64656c4f6e47656e657269637d576520616c736f206861766520244b5f7b585f7b4b7d5e7b6d696e7d7d2b5c44656c74615f7b585f7b4b7d5e7b6d696e7d7d240a6e65662e2028496e207468652067656e6572616c207479706520636173652c20746865726520697320616e6f7468657220617267756d656e742c20632e662e2074776f0a636c61696d7320646f776e2e295c656e647b636c61696d7d0a5c626567696e7b70726f6f667d0a497420737566666963657320746f206170706c79205c7265667b4c69754e65666e6573737d20746f2024585f7b6b7d5e7b6d696e7d242c20616e64207468656e0a726573747269637420746f2024585f7b4b7d2e24200a5c656e647b70726f6f667d0a5c6d6564736b69707b7d0a0a0a4e6f772077652070726f6365656420627920636173657320646570656e64696e67206f6e20746865204b6f64616972612064696d656e73696f6e2e200a5c626567696e7b636c61696d7d0a284361736520313a20245c6e753d32242920496e207468652063617365207468617420746865207370656369616c206669626572206973206269672c2074686572650a6973206120636f6d70757461626c6520246d5f7b307d242073756368207468617420666f7220246d5f7b307d7c6d242c20776520686176650a5c5b0a685e7b307d5c6c656674286d5c6c656674284b5f7b585f7b6b7d7d2b5c44656c74615f7b6b7d5c7269676874295c7269676874293d685e7b307d5c6c656674286d5c6c656674284b5f7b585f7b4b7d7d2b5c44656c74615f7b4b7d5c7269676874295c7269676874292e0a5c5d0a5c656e647b636c61696d7d0a5c626567696e7b70726f6f667d0a4279207468652061626f76652c20776520616368696576652024585e7b6d696e7d242073756368207468617420244b5f7b587d2b5c44656c746124206973206e65660a6f6e20626f74682024585f7b6b7d5e7b6d696e7d2420616e642024585f7b4b7d5e7b6d696e7d242e20427920746865204b6177616d61746120566965687765670a56616e697368696e67205468656f72656d205c7265667b74686d3a4566666563746976654b565653757266616365737d206170706c69656420746f20746865207370656369616c0a66696265722028616e64207468652073656d69636f6e74696e75697479207468656f72656d2920746865726520657869737473206120636f6d70757461626c6520246d5f7b307d5c676730240a73756368207468617420666f7220246d5f7b307d3c6d2420616e642024693e30242c2077652068617665200a5c5b0a685e7b697d5c6c656674286d5c6c656674284b5f7b585f7b4b7d7d2b5c44656c74615f7b4b7d5c7269676874295c7269676874293d685e7b697d5c6c656674286d5c6c656674284b5f7b585f7b6b7d7d2b5c44656c74615f7b6b7d5c7269676874295c7269676874293d302e0a5c5d0a496e20666163742c20696620245c44656c74613d30242c207468656e20456b656461686c27732076616e697368696e67205468656f72656d205c7265667b456b656461686c56616e697368696e677d0a63616e206265206170706c6965642e20546875732c206170706c79696e672074686520696e76617269616e6365206f662045756c65722063686172616374657269737469630a285468656f72656d205c7265667b544641455f4c69755f44494f507d292c20616e64206269726174696f6e616c20696e76617269616e6365206f662074686520706c75726967656e6572612c0a697420666f6c6c6f7773207468617420666f7220246d3e6d5f7b307d242c200a5c5b0a685e7b307d5c6c656674286d5c6c656674284b5f7b585f7b6b7d7d2b5c44656c74615f7b6b7d5c7269676874295c7269676874293d685e7b307d5c6c656674286d5c6c656674284b5f7b585f7b4b7d7d2b5c44656c74615f7b4b7d5c7269676874295c7269676874292e0a5c5d0a5c656e647b70726f6f667d0a5c626567696e7b636c61696d7d0a4966205365727265206475616c69747920686f6c6473206f6e2024582f52242c207468656e20666f722073756666696369656e746c79206c6172676520246d240a616e6420616e79206b6f64616972612064696d656e73696f6e2c2077652068617665200a5c5b0a685e7b307d5c6c656674286d5c6c656674284b5f7b585f7b6b7d7d2b5c44656c74615f7b6b7d5c7269676874295c7269676874293d685e7b307d5c6c656674286d5c6c656674284b5f7b585f7b4b7d7d2b5c44656c74615f7b4b7d5c7269676874295c7269676874292e0a5c5d0a205c656e647b636c61696d7d0a5c626567696e7b70726f6f667d0a4279207468652070726576696f757320636c61696d2c207765206163686965766520616e20245c70695e7b5c7072696d657d3a585e7b6d696e7d5c746f20525e7b5c7072696d657d240a616e6420616e2024525e7b5c7072696d657d24206d6f72706869736d2024585c6f74696d657320525e7b5c7072696d657d5c746f20585e7b6d696e7d2420737563680a7468617420626f74682024585f7b6b7d5c746f20585f7b6b7d5e7b6d696e7d24206973206f627461696e6564206279207375636365737369766520626c6f772d646f776e730a6f6620245c6c656674282d315c726967687429242063757276657320616e6420626f746820244b5f7b585f7b6b7d5e7b6d696e7d7d2b5c44656c74615f7b585f7b6b7d5e7b6d696e7d7d240a616e6420244b5f7b585f7b4b7d5e7b6d696e7d7d2b5c44656c74615f7b585f7b4b7d5e7b6d696e7d7d2420617265206e65662e204e6f772c20627920746865205468656f72656d730a5c7265667b544641455f4c69755f44494f507d20616e64205c7265667b636f723a4f737365726d616e56617269616e747d20697420737566666963657320746f0a73686f7720746861742024485e7b317d5c6c65667428582c5c6d61746863616c7b4f7d5f7b587d5c6c656674286d5c6c656674284b5f7b587d2b5c44656c74615c7269676874295c7269676874295c726967687429240a697320746f7273696f6e2066726565206f7220746861742024525e7b317d5c70695f7b2a7d5e7b5c7072696d657d5c6d61746863616c7b4f7d5f7b587d5c6c656674286d5c6c656674284b5f7b587d2b5c44656c74615c7269676874295c726967687429240a697320746f7273696f6e20667265652e204974207365656d73207468617420616e7920746f7273696f6e20696e20746865207365636f6e64207368656166206f63637572730a61742074686520636c6f73656420706f696e7420245c6c656674286b5c72696768742924206f662024533d537065635c20522c2420736f2069742073686f756c643f0a287468697320776f756c6420626520656173696572206966205365727265204475616c6974792068656c64206f76657220522129207375666669636520746f2073686f770a7468617420746865206475616c73206f6620746865736520245c6d61746863616c7b4f7d5f7b4b7d2d246d6f64756c65732061726520245c6c656674286b5c7269676874292d24646976697369626c652e0a0a432e662e20537568207765206d6179206261736520746f20617373756d652024525e7b5c7072696d657d2420697320756e72616d69666965642c20616e6420746875730a632e662e205c636974655b312e322e315d7b5375687d2c2024585f7b6b7d5e7b6d696e7d24206c6966747320746f2024575f7b327d242e20432e662e205c636974657b54616e7d2c0a244b5f7b587d2b5c44656c7461242069732073656d695c2d616d706c652c20736f20245c6c6566747c6d5c6c656674284b5f7b585f7b6b7d7d2b5c44656c74615f7b6b7d5c7269676874295c72696768747c240a636f6e7461696e73206120736d6f6f746820637572766520666f7220246d5c67673024207768696368207468657265666f7265206c6966747320746f2024575f7b327d5c6c656674286b5c726967687429242e0a4c657420244c3a3d6d5c6c656674284b5f7b587d2b5c44656c74615c726967687429242e2041732077652061726520696e20746865207465726d696e616c2063617465676f72792c0a616e6420244c2420686173206e6f20737461626c652062617365206c6f6375732c207468656e20706f696e7420626c6f77757073207072657365727665206f75720a24575f7b327d5c6c656674286b5c72696768742924206c696674696e67206f662024585f7b6b7d242c20616e6420616c736f20676c6f62616c2067656e65726174696f6e0a6973207072657365727665642c20632e662e205c636974657b5375687d206f72204c696574646b652e20546875732074686520726564756374696f6e73206f660a5c636974655b352e31322e612066726f6d20746865206f6e6c696e65206c656374757265206e6f7465732076657273696f6e5d7b45567d20686f6c6420696e20746869730a73657474696e672c20616e6420746869732067697665732061207375726a65637469766974792024485e7b317d5c6c656674284c5f7b6b7d5e7b2a7d5c6f74696d6573204e5f7b585f7b6b7d2f587d5e7b2a7d5c7269676874295c746f20485e7b317d5c6c656674284c5f7b6b7d5e7b2a7d5c7269676874292e240a4e6f7720666f7220246d5c676730242c2024485e7b327d5c6c656674284c5c7269676874293d485e7b327d5c6c656674284c5c6f74696d6573204e5f7b585f7b6b7d2f587d5c7269676874293d30242c0a736f206279205468656f72656d205c7265667b544641455f4c69755f44494f507d2c2024485e7b317d5c6c656674284c5e7b2a7d5c7269676874295c6f74696d6573206b5c617070726f7820485e7b317d5c6c65667428585f7b6b7d2c4c5f7b6b7d5e7b2a7d5c7269676874292c240a24485e7b317d5c6c656674284c5e7b2a7d5c6c656674282d585f7b6b7d5c7269676874295c7269676874295c6f74696d6573206b5c617070726f7820485e7b317d5c6c65667428585f7b6b7d2c4c5f7b6b7d5c6f74696d6573204e5f7b585f7b6b7d2f587d5e7b2a7d5c7269676874292e240a4170706c79696e67204e616b6179616d612773204c656d6d6120746f20746865206469616772616d0a5c5b0a5c78796d61747269787b485e7b317d5c6c656674284c5e7b2a7d5c6c656674282d585f7b6b7d5c7269676874295c7269676874295c61725b645d202620485e7b317d5c6c656674284c5e7b2a7d5c7269676874295c61725b645d5c5c0a485e7b317d5c6c65667428585f7b6b7d2c4c5f7b6b7d5c6f74696d6573204e5f7b585f7b6b7d2f587d5e7b2a7d5c7269676874295c61725b725d202620485e7b317d5c6c65667428585f7b6b7d2c4c5f7b6b7d5e7b2a7d5c7269676874290a7d0a5c5d0a67697665732061207375726a656374696f6e2024485e7b317d5c6c656674284c5e7b2a7d5c6c656674282d585f7b6b7d5c7269676874295c7269676874295c74776f6865616472696768746172726f7720485e7b317d5c6c656674284c5e7b2a7d5c726967687429240a776869636820636f6e636c75646573207468652070726f6f662e200a5c656e647b70726f6f667d0a5c6d6564736b69707b7d0a0a5c626567696e7b636c61696d7d0a284361736520323a20245c6e753d30242920496e207468652063617365207468617420746865207370656369616c2066696265722068617320245c6e755c6c656674284b5f7b585f7b6b7d7d2b5c44656c74615f7b6b7d5c7269676874293d30242c0a7468657265206973206120636f6d70757461626c6520246d5f7b307d242073756368207468617420666f7220246d5f7b307d7c6d2c242077652068617665200a5c5b0a685e7b307d5c6c656674286d5c6c656674284b5f7b585f7b6b7d7d2b5c44656c74615f7b6b7d5c7269676874295c7269676874293d685e7b307d5c6c656674286d5c6c656674284b5f7b585f7b4b7d7d2b5c44656c74615f7b4b7d5c7269676874295c7269676874292e0a5c5d0a5c656e647b636c61696d7d0a5c626567696e7b70726f6f667d0a4173206265666f72652c207765206163686965766520616e20245c70695e7b5c7072696d657d3a585e7b6d696e7d5c746f20525e7b5c7072696d657d2420616e640a616e2024525e7b5c7072696d657d24206d6f72706869736d2024585c6f74696d657320525e7b5c7072696d657d5c746f20585e7b6d696e7d24207375636820746861740a626f74682024585f7b6b7d5c746f20585f7b6b7d5e7b6d696e7d24206973206f627461696e6564206279207375636365737369766520626c6f772d646f776e730a6f6620245c6c656674282d315c726967687429242063757276657320616e6420626f746820244b5f7b585f7b6b7d5e7b6d696e7d7d2b5c44656c74615f7b585f7b6b7d5e7b6d696e7d7d240a616e6420244b5f7b585f7b4b7d5e7b6d696e7d7d2b5c44656c74615f7b585f7b4b7d5e7b6d696e7d7d2420617265206e65662e200a0a4170706c79696e67205c636974657b54616e7d2c2077652066696e64207468617420244b5f7b585f7b6b7d5e7b6d696e7d7d2b5c44656c74615f7b585f7b6b7d5e7b6d696e7d7d240a69732073656d692d616d706c652e20556e646572207468652070736575646f2d65666665637469766520617373756d7074696f6e2c20616e642073696e636520245c6e755c6c656674284b5f7b585f7b6b7d5e7b6d696e7d7d2b5c44656c74615f7b585f7b6b7d5e7b6d696e7d7d5c7269676874293d30242c0a62757420244b5f7b585f7b6b7d5e7b6d696e7d7d2b5c44656c74615f7b585f7b6b7d5e7b6d696e7d7d24206973206e65662c207468656e2061637475616c6c790a244b5f7b585f7b6b7d5e7b6d696e7d7d2b5c44656c74615f7b585f7b6b7d5e7b6d696e7d7d5c657175697630242e20412068696768206d756c7469706c65206f660a612073656d692d616d706c652c20616e64206e756d65726963616c6c79207472697669616c2062756e646c6520697320676c6f62616c6c792067656e6572617465640a616e64206e756d65726963616c6c79207472697669616c2c2068656e636520245c6d61746863616c7b4f7d5f7b585f7b6b7d5e7b6d696e7d7d5c6c656674286d5c6c656674284b5f7b585f7b6b7d5e7b6d696e7d7d2b5c44656c74615f7b585f7b6b7d5e7b6d696e7d7d5c7269676874295c7269676874293d5c6d61746863616c7b4f7d5f7b585f7b6b7d5e7b6d696e7d7d2c240a246d5f7b6b7d5c676730242e2041637475616c6c79207468652073616d6520686f6c6473206f6e20626f7468206669626572732c2073696e636520746865206162756e64616e63650a686173206265656e2070726f76656e206f7665722061206669656c6420246b242e20546875732c20706572686170732074616b696e6720246d5e7b5c7072696d657d3d6d5f7b6b7d5c63646f74206d5f7b4b7d242c0a7468656e2074686520636f6e636c7573696f6e20666f6c6c6f77732066726f6d205468656f72656d205c7265667b636f723a4f737365726d616e56617269616e747d0a616e6420636f686f6d6f6c6f676963616c20666c61746e657373206f662074686520736d6f6f7468206d61702024585e7b6d696e7d5c746f20525e7b5c7072696d657d242c0a632e662e205c636974655b4578632e20352e332e31345d7b4c69757d2e200a5c656e647b70726f6f667d0a5c626567696e7b636f6d6d656e747d0a5c626567696e7b636c61696d7d0a2847656e6572616c205479706520436173652c20657175616c2063686172616374657269737469632050726f6f662032206578706572696d656e74616c2d20696e636c756465640a6265636175736520696e746572657374696e6720646966666572656e742070726f6f662920496e207468652067656e6572616c207479706520636173652c2074686572650a697320736f6d6520246d5f7b307d242073756368207468617420666f7220246d5f7b307d7c6d242c20776520686176650a5c5b0a685e7b307d5c6c656674286d5c6c656674284b5f7b585f7b6b7d7d2b5c44656c74615f7b6b7d5c7269676874295c7269676874293d685e7b307d5c6c656674286d5c6c656674284b5f7b585f7b4b7d7d2b5c44656c74615f7b4b7d5c7269676874295c7269676874292e0a5c5d0a5c656e647b636c61696d7d0a5c626567696e7b70726f6f667d0a427920636c61696d205c7265667b436c61696d3a4d696e696d616c4d6f64656c4f6e5370656369616c7d2c2077652063616e2074616b652024585f7b6b7d240a6d696e696d616c2e204669727374206e6f7465207468617420632e662e205c636974655b312e322e312c312e322e335d7b5375687d2c20616674657220626173650a6368616e676520736f207468617420246b2420697320616c67656272616963616c6c7920636c6f73656420616e642024522420697320636f6d706c657465202f0a756e72616d69666965642c207468656e2024585f7b6b7d24206c6966747320746f2024575f7b327d24205c7465787462667b28646f65732024585f7b4b7d243f0a49206775657373207468697320697320696d706f7274616e745c696e636c75646567726170686963737b70617374656436332e706e677d6c696564746b65207d0a5c656e647b70726f6f667d0a5c7465787462667b736f206120736d6f6f74682073757266616365206f76657220616c67656272616963616c6c7920636c6f736564206669656c64206c696674730a746f2072616d696669656420657874656e73696f6e206f662024575c6c656674286b5c726967687429242e20297d0a5c626567696e7b70726f6f667d0a2c20616e642c20627920456b656461686c2773205468656f72656d205c7265667b456b656461686c56616e697368696e677d20616e64205468656f72656d205c7265667b544641455f4c69755f44494f507d2c0a5c5b0a685e7b307d5c6c65667428324b5f7b585f7b6b7d7d5c7269676874293d685e7b307d5c6c65667428324b5f7b585f7b4b7d7d5c7269676874292c685e7b307d5c6c65667428334b5f7b585f7b6b7d7d5c7269676874293d685e7b307d5c6c65667428334b5f7b585f7b4b7d7d5c7269676874295c205c205c737461720a5c5d0a204279205468656f72656d205c7265667b544641455f4c69755f44494f507d2c20616e64205365727265204475616c6974792c2077652068617665200a5c5b0a32685e7b307d5c6c656674285c4f6d6567615f7b585f7b6b7d7d5c7269676874292b685e7b317d5c6c656674285c4f6d6567615f7b585f7b4b7d7d5c7269676874293d32685e7b307d5c6c656674285c4f6d6567615f7b585f7b4b7d7d5c7269676874292b685e7b317d5c6c656674285c4f6d6567615f7b585f7b6b7d7d5c7269676874290a5c5d0a20736f20746861742062792073656d692d636f6e74696e756974792c200a5c5b0a685e7b307d5c6c656674285c4f6d6567615f7b585f7b6b7d7d5c7269676874293d685e7b317d5c6c656674285c4f6d6567615f7b585f7b4b7d7d5c7269676874295c205c205c737461725c737461722e0a5c5d0a2041732077652061726520696e20657175616c2063686172616374657269737469632c20697420737566666963657320746f20776f726b20696e66696e69746573696d616c6c792e0a417320246b2420697320706572666563742c207468656e206279206166746572207468652062617365206368616e676520736f2024522420697320636f6d706c6574652c0a7468656e20632e662e205c636974655b436861707420325d7b53657272657d2c2024525c617070726f78206b5c6c6566745b5c6c6566745b745c72696768745d5c72696768745d242c0a746875732062792028573244494f502064697669736962696c6974792e776f726470726573732e636f6d205c7465787462667b666978206369746174696f6e7d290a697420737566666963657320746f2073686f77207468617420666f722024535f7b6e7d3d537065635c206b5c6c6566745b745c72696768745d2f5c6c65667428745e7b6e2b317d5c726967687429240a666f7220616c6c20246e242c20245c6c65667428585f7b6e7d2c5c756c636f726e65725c44656c74615f7b6e7d5c7572636f726e65725c72696768742924206861730a61206c696674696e6720245c6c656674285c74696c64657b587d5f7b6e7d2c5c756c636f726e65725c74696c64657b5c44656c74617d5f7b6e7d5c7572636f726e65725c726967687429240a6f76657220245c74696c64657b537d5f7b6e7d3d537065635c6c65667428575f7b327d5c6c656674286b5c6c6566745b745c72696768745d2f5c6c65667428745e7b6e2b317d5c7269676874295c7269676874295c726967687429240a73756368207468617420245c74696c64657b587d5f7b6e7d2f5c74696c64657b537d5f7b6e7d242069732061206c6f6720736d6f6f7468206c696674696e67206f660a24585f7b6e7d2f535f7b6e7d242e200a0a4279205c636974657b54616e7d2c2077652063616e20617373756d6520244b5f7b585f7b6b7d7d2b5c44656c74615f7b6b7d242069732073656d692d616d706c652c0a616e6420746875732061206c61726765206d756c7469706c6520636f6e7461696e73206120736d6f6f74682063757276652c207768696368206c6966747320746f0a24575f7b327d5c6c656674286b5c7269676874292e242054687573206279205c636974655b382e335d7b45567d2c20697420737566666963657320746f2073686f770a7468657265206172652065786163742073657175656e6365733a200a5c5b0a305c746f20705c63646f745c4f6d6567615f7b5c74696c64657b587d5f7b6e7d2f5c74696c64657b537d5f7b6e7d7d5e7b617d5c746f5c4f6d6567615f7b5c74696c64657b587d5f7b6e7d2f5c74696c64657b537d5f7b6e7d7d5e7b617d5c746f5c4f6d6567615f7b585f7b6e7d2f535f7b6e7d7d5e7b617d5c746f300a5c5d0a2024615c676530242e20436f6e736964657220746865206469616772616d3a200a5c5b0a5c78796d61747269787b305c61725b725d202620705c63646f745c4f6d6567615f7b5c74696c64657b587d5f7b6e7d2f5c74696c64657b537d5f7b6e7d7d5e7b617d5c61725b725d2026205c4f6d6567615f7b5c74696c64657b587d5f7b6e7d2f5c74696c64657b537d5f7b6e7d7d5e7b617d5c61725b725d5e7b725f7b6e7d7d5c61725b645d5f7b667d2026205c4f6d6567615f7b585f7b6e7d2f535f7b6e7d7d5e7b617d5c61725b725d5c61725b645d5f7b677d2026205c63646f74735c5c0a305c61725b725d202620705c63646f745c4f6d6567615f7b5c74696c64657b587d5f7b6e2d317d2f5c74696c64657b537d5f7b6e2d317d7d5e7b617d2026205c4f6d6567615f7b5c74696c64657b585f7b6e2d317d7d2f5c74696c64657b537d5f7b6e2d317d7d5e7b617d5c61725b725d2026205c4f6d6567615f7b585f7b6e2d317d2f535f7b6e2d317d7d5e7b617d5c61725b725d202620300a7d0a5c5d0a546f2073686f77207375726a6563746976697479206f662024725f7b6e7d242c20632e662e205c636974655b70672e203638315d7b47487d2c2069742073756666696365730a746f2073686f77207375726a6563746976697479206f662024662420616e642024672e2420466f722024613d31242c207468697320686f6c647320627920245c737461725c73746172242e0a466f722024613d32242c2074656e736f722074686520626f74746f6d20726f77206f6620746865206469616772616d20776974682024324b5f7b5c74696c64657b587d5f7b6e2d317d7d2c240a616e642074686520746f7020726f7720776974682024324b5f7b5c74696c64657b587d5f7b6e7d7d242e20427920245c73746172242c2077652068617665207375726a65637469766974790a6f662024662c672420616e64207468657265666f72652024725f7b6e7d24206973207375726a6563746976652c2061667465722074656e736f72696e67207468650a746f7020726f77207769746820242d324b5f7b5c74696c64657b587d5f7b6e7d7d2e24205c656e647b70726f6f667d0a5c656e647b636f6d6d656e747d0a0a0a5c6d6564736b69707b7d0a0a0a0a5c73656374696f6e7b46696e6974652047656e65726174696f6e20526573756c74737d0a0a546865206e657874207374657020697320746f2072656d6f766520746865207265737472696374696f6e206f6e207468652062617365206c6f6375732066726f6d0a70726f706f736974696f6e205c7265667b5465726d696e616c53696d706c65436173657d2e200a5c626567696e7b636f726f6c6c6172797d0a5c626567696e7b636f6d6d656e747d0a5c696e636c75646567726170686963735b6262203d2030203020323030203130302c2064726166742c20747970653d6570735d7b7061737465643438382e706e677d0a0a5c696e636c75646567726170686963735b6262203d2030203020323030203130302c2064726166742c20747970653d6570735d7b7061737465643438392e706e677d0a5c656e647b636f6d6d656e747d0a5c6c6162656c7b636f723a4b4c545f56657273696f6e7d204c657420245c6c65667428582c5c44656c74615c726967687429242062652061206b6c7420706169720a6f662072656c61746976652064696d656e73696f6e20243224206f76657220612044565220245224207769746820706572666563742072657369647565206669656c640a246b24206f662063686172616374657269737469632024703e302420616e642070657266656374206672616374696f6e206669656c6420244b24250a5c626567696e7b636f6d6d656e747d0a2c20616e6420244b2420697320656974686572206f66206368617261637465726973746963202430240a5c656e647b636f6d6d656e747d0a5c626567696e7b636f6d6d656e747d0a206f722024585f7b4b7d24206c6966747320746f2024575f7b327d242e20417373756d6520746861742024585f7b6b7d24206c6966747320746f2024575f7b327d240a5c656e647b636f6d6d656e747d0a2e20417373756d65207468617420244b5f7b587d2b5c44656c7461242069732c206269672c20245c6d61746862627b517d242d436172746965722c20616e640a73696d706c65206e6f726d616c2063726f7373696e6773206f766572202452242e205468656e2c2074686572652065786973747320612028636f6d70757461626c65290a246d5f7b307d2420646570656e64696e67206f6e2074686520696e74657273656374696f6e206e756d626572732c2073756368207468617420666f7220246d5c696e206d5f7b307d5c6d61746862627b5a7d5e7b2b7d240a2c200a5c5b0a685e7b307d5c6c656674286d5c6c656674284b5f7b585f7b6b7d7d2b5c44656c74615f7b6b7d5c7269676874295c7269676874293d685e7b307d5c6c656674286d5c6c656674284b5f7b585f7b4b7d7d2b5c44656c74615f7b4b7d5c7269676874295c7269676874290a5c5d0a20746875732c20616674657220706f737369626c7920657874656e64696e67202452242c207468652063616e6f6e6963616c2072696e672024525c6c656674284b5f7b587d2b5c44656c74615c726967687429240a69732066696e6974656c792067656e657261746564206f766572202452242e20496620244b5f7b587d2b5c44656c7461242069732070736575646f2d656666656374697665286e6f740a6e65636573736172696c7920626967292c206120636f6e7472616374696f6e206f66206120244b5f7b585f7b6b7d7d2b5c44656c74615f7b6b7d242d6e656761746976650a65787472656d616c2072617920637574206f757420627920616e20616d706c6520244824206f6e2024522420696e6475636573206120636f6e7472616374696f6e0a6f66206120244b5f7b587d2b5c44656c746124206e656761746976652065787472656d616c207261792e2049662074686520636f6e7472616374696f6e2069730a6120666c697070696e6720636f6e7472616374696f6e2c207468656e2074686520666c6970206578697374732e205c656e647b636f726f6c6c6172797d0a5c626567696e7b70726f6f667d0a53696e636520746865206879706f74686573697320616e6420636f6e636c7573696f6e20617265207072657365727665642062792062617365206368616e67652c0a7468656e20657874656e64696e67202452242c207765206d617920617373756d65207468617420246b2420697320616c67656272616963616c6c7920636c6f7365640a616e6420746861742024522420697320636f6d706c6574652e205468652070726f6f6620666f6c6c6f77732073696d696c61726c7920746f205c636974655b312e365d7b484d58323031307d0a65786365707420746861742050726f706f736974696f6e205c7265667b5465726d696e616c53696d706c65436173657d206973207573656420696e20706c6163650a6f66204b6177616d61746120566965687765672056616e697368696e672e20526563616c6c207468617420746865206c6f672d63616e6f6e6963616c2072696e670a6f6620244b5f7b585f7b6b7d7d2b5c44656c74615f7b6b7d242069732066696e6974656c792067656e6572617465642028632e662e205c636974655b372e315d7b54616e7d290a736f20244e5f7b5c7369676d617d5c6c656674284b5f7b585f7b6b7d7d2b5c44656c74615f7b6b7d5c72696768742924206973206120245c6d61746862627b517d242d64697669736f722e0a4c6574200a5c5b0a5c54686574615f7b6b7d3d5c44656c74615f7b6b7d2d5c44656c74615f7b6b7d5c7765646765204e5f7b5c7369676d617d5c6c656674284b5f7b585f7b6b7d7d2b5c44656c74615f7b6b7d5c7269676874290a5c5d0a20616e64206c65742024305c6c655c54686574615c6c655c44656c746124206265206120245c6d61746862627b517d242d64697669736f72206f6e2024582f52240a7375636820746861742c206279206c6f672d736d6f6f74686e65737320250a5c626567696e7b636f6d6d656e747d0a616e6420706f737369626c7920612066696e6974652062617365206368616e676520746f20656e737572652024585c746f20522420697320756e72616d69666965642c0a5c7465787462667b646f6e2774206e6565642c2073696e636520776520746f6f6b20636f6d706c6574696f6e206f66205220736f20636f6d706163742e7d0a5c656e647b636f6d6d656e747d0a7b7d20245c54686574617c5f7b585f7b6b7d7d3d5c54686574615f7b6b7d2e24205265706c6163696e6720245c6c65667428582c5c44656c74615c726967687429240a6279206120626c6f772d75702c20617373756d6520245c6c65667428582c5c44656c74615c72696768742924206973207465726d696e616c2e20427920646566696e6974696f6e0a6f6620244e5f7b5c7369676d617d2c24206c657474696e6720246d5c6767302420746f2066697420746865206879706f746865736973206f662050726f706f736974696f6e0a5c7265667b5465726d696e616c53696d706c65436173657d2c20616e642073756666696369656e746c7920646976697369626c652073756368207468617420246d5c6c656674284b5f7b585f7b6b7d7d2b5c54686574615f7b6b7d5c726967687429240a697320696e74656772616c2c207468656e0a5c5b0a685e7b307d5c6c656674286d5c6c656674284b5f7b585f7b6b7d7d2b5c44656c74615f7b6b7d5c7269676874295c7269676874293d685e7b307d5c6c656674286d5c6c656674284b5f7b585f7b6b7d7d2b5c54686574615f7b6b7d5c7269676874295c7269676874290a5c5d0a616e6420667572746865726d6f72652c2062792050726f706f736974696f6e205c7265667b5465726d696e616c53696d706c65436173657d2c20200a5c5b0a685e7b307d5c6c656674286d5c6c656674284b5f7b585f7b6b7d7d2b5c54686574615f7b6b7d5c7269676874295c7269676874293d685e7b307d5c6c656674286d5c6c656674284b5f7b585f7b4b7d7d2b5c54686574615f7b4b7d5c7269676874295c7269676874292e0a5c5d0a20417320245c54686574615c6c655c44656c7461242c207468652066697273742070617274206f6620746865207468656f72656d20666f6c6c6f77732062792073656d69636f6e74696e756974792e0a0a4e6f7720627920746865207468656f7279206f662073757266616365732c20746865726520697320246d5c676730242c2073756368207468617420245c6269676f706c75735f7b6d5c6765307d485e7b307d5c6c656674286d6c5c6c656674284b5f7b585f7b6b7d7d2b5c44656c74615f7b6b7d5c7269676874295c726967687429240a69732067656e65726174656420696e20646567726565202431242c20736f20746861742074686572652069732061207375726a656374696f6e200a5c5b0a535e7b6c7d485e7b307d5c6c656674286d5c6c656674284b5f7b585f7b6b7d7d2b5c44656c74615f7b6b7d5c7269676874295c7269676874295c74776f6865616472696768746172726f7720485e7b307d5c6c656674286d6c5c6c656674284b5f7b585f7b6b7d7d2b5c44656c74615f7b6b7d5c7269676874295c7269676874292e0a5c5d0a200a20436f6e73696465722074686520666f6c6c6f77696e67206469616772616d3a200a5c5b0a5c78796d61747269787b535e7b6c7d485e7b307d5c6c656674286d5c6c656674284b5f7b587d2b5c44656c74615c7269676874292f525c7269676874295c61725b725d5e7b5c616c7068617d5c61725b645d202620485e7b307d5c6c656674286d6c5c6c656674284b5f7b587d2b5c44656c74615c7269676874292f525c7269676874295c61725b645d5c5c0a535e7b6c7d485e7b307d5c6c656674286d5c6c656674284b5f7b585f7b6b7d7d2b5c44656c74615f7b6b7d5c7269676874295c7269676874295c61725b725d5e7b5c74776f6865616472696768746172726f777d202620485e7b307d5c6c656674286d6c5c6c656674284b5f7b585f7b6b7d7d2b5c44656c74615f7b6b7d5c7269676874295c7269676874290a7d0a5c5d0a54686520766572746963616c206d61707320617265207375726a656374697665206279207468652066697273742070617274206f6620746865207468656f72656d0a28616e64206170706c79696e67204e616b6179616d612773206c656d6d6120746f2070756c6c206261636b207468652067656e657261746f7273206f66207468650a246b242d6d6f64756c6573292e204e6f7720616761696e207573696e672c204e616b6179616d612773204c656d6d61205c636974655b4368617074657220352e335d7b47487d2c0a7375726a6563746976697479206f662074686520626f74746f6d206d617020696d706c696573207375726a6563746976697479206f6620245c616c706861242c0a616e6420746875732024525c6c656674284b5f7b587d2b5c44656c74615c726967687429242069732066696e6974656c792067656e657261746564206f7665720a24522e24200a0a46696e616c6c7920737570706f73652074686174207468657265206973206120636f6e7472616374696f6e206f662061206375727665206f6e2074686520636c6f7365640a666962657220245c6c65667428585f7b6b7d2c5c44656c74615f7b6b7d5c7269676874292420636f72726573706f6e64696e6720746f206120244b5f7b585f7b6b7d7d2b5c44656c74615f7b6b7d240a2d6e656761746976652065787472656d616c2072617920245c5369676d615f7b6b7d242e204966206e65636573736172792c20657874656e642024522420746f0a626520636f6d706c65746520616e6420246b2420616c67656272616963616c6c7920636c6f7365642e204c65742024485f7b6b7d3d487c5f7b585f7b6b7d7d240a62652073756368207468617420245c6c656674284b5f7b585f7b6b7d7d2b5c44656c74615f7b6b7d2b485f7b6b7d5c7269676874292e5c5369676d615f7b6b7d3d30242e0a54686520676f616c20697320746f2073686f772074686174200a5c5b0a525c6c656674284b5f7b587d2b5c44656c74612b482f525c7269676874290a5c5d0a69732066696e6974656c792067656e65726174656420736f207468617420746865726520657869737473206120636f6e7472616374696f6e20646566696e65642062790a24585f7b317d3d50726f6a5c20525c6c656674284b5f7b587d2b5c44656c74612b482f525c726967687429242e20486f77657665722c206173202448242069730a616d706c652c207468656e20756e6465722074686520617373756d7074696f6e207468617420244b5f7b585f7b6b7d7d2b5c44656c74615f7b6b7d242069732070736575646f2d6566666563746976652c0a244b5f7b585f7b6b7d7d2b5c44656c74615f7b6b7d2b485f7b6b7d242069732061637475616c6c79206269672c20616e6420736f207468697320666f6c6c6f77732e200a0a5c6d6564736b69707b7d0a5c656e647b70726f6f667d0a5c626567696e7b636f726f6c6c6172797d0a5c6c6162656c7b47656e6572616c697a656446696e69746547656e65726174696f6e7d4c657420245c6c65667428582c5c44656c74615c726967687429242062650a61206b6c742070616972206f662072656c61746976652064696d656e73696f6e20243224206f76657220612044565220245224207769746820706572666563740a72657369647565206669656c6420246b24206f662063686172616374657269737469632024703e302420616e642070657266656374206672616374696f6e206669656c640a244b2420250a5c626567696e7b636f6d6d656e747d0a2c20616e6420244b2420697320656974686572206f66206368617261637465726973746963202430240a5c656e647b636f6d6d656e747d0a5c626567696e7b636f6d6d656e747d0a206f722024585f7b4b7d24206c6966747320746f2024575f7b327d242e20417373756d6520746861742024585f7b6b7d24206c6966747320746f2024575f7b327d240a5c656e647b636f6d6d656e747d0a2e20417373756d65207468617420244b5f7b587d2b5c44656c74612420697320245c6d61746862627b517d242d436172746965722c20616e642073696d706c650a6e6f726d616c2063726f7373696e6773206f766572202452242e2049662024415f7b317d2c2e2e2e2c415f7b6d7d242061726520616e7920616d706c652064697669736f72732c0a7468656e20283129207468652072696e672024525c6c65667428582c4b5f7b587d2b5c44656c74612b415f7b317d2c2e2e2e2c4b5f7b587d2b5c44656c74612b415f7b6e7d5c726967687429240a69732066696e6974656c792067656e657261746564206f7665722024522e24205c656e647b636f726f6c6c6172797d0a5c626567696e7b70726f6f667d0a432e662e207468652070726f6f66206f66205c636974655b322e31315d7b435a7d2c20697420737566666963657320746f2070726f7665207468617420696620250a5c626567696e7b636f6d6d656e747d0a5c696e636c75646567726170686963737b70617374656436382e706e677d0a5c656e647b636f6d6d656e747d0a7b7d2024473d5c73756d5f7b693d317d5e7b6b7d6d5f7b697d5c6c65667428615c6c656674284b5f7b587d2b5c44656c74615f7b697d2b415f7b697d5c7269676874295c726967687429242c0a66697865642024615c696e5c6d61746862627b4e7d242c20616e6420246d5f7b317d2c2e2e2e2c6d5f7b6b7d5c6765302420616e6420246c5c696e5c6c6566745c7b20312c2e2e2e2c6c5c72696768745c7d20240a7468656e2074686572652065786973747320246d5f7b6c7d24207375636820746861742074686520666f6c6c6f77696e67206d61707320617265207375726a6563746976650a5c5b0a485e7b307d5c6c65667428582c5c6d61746863616c7b4f7d5f7b587d5c6c65667428472d615c6c656674284b5f7b587d2b5c44656c74612d415f7b6c7d5c7269676874295c7269676874295c7269676874295c6f74696d657320485e7b307d5c6c65667428582c5c6d61746863616c7b4f7d5f7b587d5c6c65667428615c6c656674284b5f7b587d2b5c44656c74612b415f7b6c7d5c7269676874295c7269676874295c7269676874295c746f20485e7b307d5c6c65667428582c5c6d61746863616c7b4f7d5f7b587d5c6c65667428475c7269676874295c7269676874290a5c5d0a206973207375726a6563746976652e204279204e616b6179616d612773206c656d6d61206170706c6965642061732061626f76652c2069742073756666696365730a746f2073686f7720746865207375726a6563746976697479206f6e207468652063656e7472616c2066696265722e200a0a4170706c79696e67205c636974657b54616e7d2c207468657265206578697374732061206d696e696d616c206d6f64656c20245c6c65667428585f7b6b7d5e7b5c7072696d657d2c5c44656c74615f7b6b7d5e7b5c7072696d657d5c726967687429240a666f7220245c6c65667428585f7b6b7d2c5c44656c74615f7b6b7d5c726967687429242c2073756368207468617420244b5f7b585f7b6b7d7d2b5c44656c74615f7b6b7d240a6973206e656620616e642073656d692d616d706c652e205468757320746865726520697320246d5c676730242073756368207468617420246d5c6c656674284b5f7b585f7b6b7d7d2b5c44656c74615f7b6b7d5c726967687429240a697320626f74682062706620616e6420246d2d3224206973206c6172676520656e6f75676820736f2074686520656666656374697665204b6177616d61746120566965687765670a76616e697368696e67205468656f72656d205c7265667b74686d3a4566666563746976654b565653757266616365737d6170706c6965732e204e6f77207468650a70726f6f66206f66205c636974655b322e375d7b435a7d206170706c6965732e200a5c656e647b70726f6f667d0a5c6d6564736b69707b7d0a0a0a0a5c73656374696f6e7b4162756e64616e63657d0a0a4c657420245c47616d6d612420612067656f6d65747269632076616c756174696f6e206f6e202458242e20446566696e6520245c7369676d615f7b5c47616d6d617d3d696e665c6c6566745c7b206d756c745f7b5c47616d6d617d445e7b5c7072696d657d5c207c5c20445c73696d5f7b5c6d61746862627b527d7d445e7b5c7072696d657d5c6765305c72696768745c7d205c696e5c6d61746862627b527d242e0a4173206120726573756c74206f66207468652067656e6572616c697a65642066696e6974652067656e65726174696f6e3a200a5c626567696e7b636f726f6c6c6172797d0a5c6c6162656c7b74686d4162756e64616e63654e6566426967496d7069657353656d69616d706c65527d5c636974655b332e385d7b434c7d4c657420245c6c65667428582c5c44656c74615c726967687429240a62652061206b6c742070616972206f662072656c61746976652064696d656e73696f6e20243224206f76657220612044565220245224207769746820706572666563740a72657369647565206669656c6420246b24206f662063686172616374657269737469632024703e302420616e642070657266656374206672616374696f6e206669656c640a244b242e20417373756d65207468617420245c44656c746124206973206269672e20496620244b5f7b587d2b5c44656c746124206973206e65662c207468656e0a69742069732073656d692d616d706c652e205c656e647b636f726f6c6c6172797d0a5c626567696e7b70726f6f667d0a4c65742024412420616e20616d706c6520245c6d61746862627b517d242d64697669736f72206f6e202458242073756368207468617420245c6c65667428582c5c44656c74612b415c726967687429240a6973206b6c742e20417320245c44656c746124206973206269672c20697420697320706f737369626c6520746f20777269746520245c44656c74613d5c44656c74615e7b5c7072696d657d2b41240a73756368207468617420245c6c65667428582c5c44656c74615e7b5c7072696d657d2b415c72696768742924206973206b6c742e2054687573207468652072696e673a0a5c5b0a5c6d61746863616c7b527d3d525c6c656674284b5f7b587d2b5c44656c74612c4b5f7b587d2b5c44656c74612b415c7269676874290a5c5d0a2069732066696e6974656c792067656e65726174656420627920436f726f6c6c617279205c7265667b47656e6572616c697a656446696e69746547656e65726174696f6e7d2c0a616e642024537570705c205c6d61746863616c7b527d2420636f6e7461696e732061206269672064697669736f722028244b5f7b587d2b5c44656c74612b4124292c0a736f20616e792070736575646f2d6566666563746976652024445c696e5c6d61746862627b527d5f7b2b7d5c6c656674284b5f7b587d2b5c44656c74615c7269676874292b5c6d61746862627b527d5f7b2b7d5c6c656674284b5f7b587d2b5c44656c74612b415c726967687429240a697320696e2024537570705c205c6d61746863616c7b527d242e204279205468656f72656d205c7265667b74686d332e357d2832292c2024537570705c205c6d61746863616c7b527d3d5c6d61746862627b527d5f7b2b7d5c6c656674284b5f7b587d2b5c44656c74612c4b5f7b587d2b5c44656c74612b415c7269676874292e240a466f7220616e7920245c657073696c6f6e3e30242c20616e6420616e792067656f6d65747269632076616c756174696f6e20245c47616d6d6124206f6e202458242c0a245c7369676d615f7b5c47616d6d617d5c6c656674284b5f7b587d2b5c44656c74612b5c657073696c6f6e20415c7269676874293d30242077686572652c20736f0a7468617420245c7369676d615f7b5c47616d6d617d24206973207a65726f206f6e2024537570705c205c6d61746863616c7b527d242c20616e6420746875730a7468652063656e747265206f6620245c47616d6d6124206973206e6f7420696e20245c6d61746862627b427d5c6c656674284b5f7b587d2b5c44656c74615c726967687429240a666f7220616e79207375636820245c47616d6d61242e200a5c656e647b70726f6f667d0a5c6d6564736b69707b7d0a0a5c626567696e7b646566696e6974696f6e7d0a5c636974655b64656620342e315d7b434c7d250a5c626567696e7b636f6d6d656e747d0a5c696e636c75646567726170686963737b70617374656437312e706e677d0a5c656e647b636f6d6d656e747d0a7b7d204c65742024572420612066696e6974652064696d656e73696f6e616c207265616c20766563746f722073706163652c2024435c73756273657420572420610a636c6f73656420636f6e76657820636f6e65207370616e6e696e67202457242c20616e642024765c696e2057242e205468652076697369626c6520626f756e646172790a6f66202443242066726f6d20247624206973200a5c5b0a563d5c6c6566745c7b20775c696e5c7061727469616c20435c207c5c205c6c6566745b762c775c72696768745d5c63617020433d5c6c6566745c7b20775c72696768745c7d205c72696768745c7d202e0a5c5d0a0a5c656e647b646566696e6974696f6e7d0a5c6d6564736b69707b7d0a0a0a0a5c73656374696f6e7b526174696f6e616c6974792c20436f6e652c20436f6e7472616374696f6e7d0a5c626567696e7b7468656f72656d7d0a5c6c6162656c7b74686d332e357d285c636974655b332e355d7b434c7d250a5c626567696e7b636f6d6d656e747d0a5c696e636c75646567726170686963737b70617374656434332e706e677d0a5c656e647b636f6d6d656e747d0a7b7d204c6574202458242062652061206e6f726d616c20736368656d65206f662072656c61746976652064696d656e73696f6e202432242c2070726f706572206f7665720a2453242c2074686520737065637472756d206f662061204456522077686963682068617320706572666563742072657369647565206669656c6420246b24206f660a63686172616374657269737469632024703e302420616e642070657266656374206672616374696f6e206669656c6420244b242e204c65742024445f7b317d2c2e2e2e2c445f7b727d240a626520245c6d61746862627b517d242d436172746965722064697669736f7273206f6e202458242e20417373756d6520746861742024525c6c65667428583b445f7b317d2c2e2e2e2c445f7b727d5c726967687429240a69732066696e6974656c792067656e6572617465642c20616e64206c65742024443a5c6d61746862627b527d5e7b727d5c6e695c6c656674285c6c616d6264615f7b317d2c2e2e2e2c5c6c616d6264615f7b727d5c7269676874295c6d617073746f5c73756d5c6c616d6264615f7b697d445f7b697d5c696e204469765f7b5c6d61746862627b527d7d5c6c65667428585c726967687429240a62652074686520746175746f6c6f676963616c206d61702e200a0a2831292054686520737570706f7274206f6620245224206973206120726174696f6e616c20706f6c7968656472616c20636f6e652e200a0a2832292049662024537570705c20522420636f6e7461696e732061206269672064697669736f7220616e642024445c696e5c73756d5c6d61746862627b527d5f7b2b7d445f7b697d240a69732070736575646f6566666563746976652c207468656e2024445c696e20537570705c2052242e200a0a28332920546865726520697320612066696e69746520726174696f6e616c20706f6c7968656472616c207375626469766973696f6e2024537570705c20523d5c62696763757020435f7b697d240a73756368207468617420245c7369676d615f7b5c47616d6d617d242069732061206c696e6561722066756e6374696f6e206f6e2024435f7b697d2420666f720a65766572792067656f6d65747269632076616c756174696f6e20245c47616d6d6124206f66202458242e20467572746865726d6f72652c2074686572652069730a6120636f617273657374207375626469766973696f6e207769746820746869732070726f70657274792c20696e207468652073656e736520746861742c206966202469240a616e6420246a24206172652064697374696e63742c207468657265206973206174206c65617374206f6e652067656f6d65747269632076616c756174696f6e20245c47616d6d61240a6f6620245824207375636820746861742028746865206c696e65617220657874656e73696f6e73206f662920245c7369676d615f7b5c47616d6d617d7c5f7b435f7b697d7d240a616e6420245c7369676d615f7b5c47616d6d617d7c5f7b435f7b6a7d7d242061726520646966666572656e742e200a0a28342920546865726520697320612066696e69746520696e6465782073756267726f757020245c6d61746862627b4c7d5c7375627365745c6d61746862627b5a7d5e7b727d240a73756368207468617420666f7220616c6c20246e5c696e5c6d61746862627b4e7d5e7b727d5c6361705c6d61746862627b4c7d2c242069662024445c6c656674286e5c7269676874295c696e20537570705c2052242c0a7468656e20245c7369676d615f7b5c47616d6d617d5c6c65667428445c6c656674286e5c7269676874295c7269676874293d6d756c745f7b5c47616d6d617d5c6c6566747c445c6c656674286e5c7269676874295c72696768747c242e205c656e647b7468656f72656d7d0a5c626567696e7b70726f6f667d0a332e3528312c20322920686f6c64207468652073616d6520617320696e2074686520736f757263652070617065722e20466f722024332c3424206e6f746520746861740a5c636974655b342e375d7b454c4d7d2069732073746174656420666f7220616e20617262697472617279204e6f657468657269616e20736368656d652c20616e640a74686973207468656f72656d20697320746865206f6e6c7920726573756c74207573656420696e207468652070726f6f66206f66207468697320726573756c742077686963680a697320676976656e20696e205c636974655b332e355d7b434c7d2e200a5c656e647b70726f6f667d0a5c6d6564736b69707b7d0a0a5c626567696e7b636f726f6c6c6172797d0a5c636974655b342e325d7b434c7d205c6c6162656c7b436f6e655468656f72656d4f6e527d20284b6177616d617461277320526174696f6e616c6974792c20436f6e650a616e6420436f6e7472616374696f6e205468656f72656d29204c657420245c6c65667428582c5c44656c74615c726967687429242062652061206b6c7420706169720a6f662072656c61746976652064696d656e73696f6e202432242c2070726f706572206f766572206120445652202452242077697468207065726665637420726573696475650a6669656c6420246b24206f662063686172616374657269737469632024703e302420616e642070657266656374206672616374696f6e206669656c6420244b240a5c626567696e7b636f6d6d656e747d0a2c20616e6420244b2420697320656974686572206f66206368617261637465726973746963202430240a5c656e647b636f6d6d656e747d0a5c626567696e7b636f6d6d656e747d0a206f722024585f7b4b7d24206c6966747320746f2024575f7b327d242e20417373756d6520746861742024585f7b6b7d24206c6966747320746f2024575f7b327d240a5c656e647b636f6d6d656e747d0a2e20417373756d6520656974686572207468617420244b5f7b587d2b5c44656c74612420697320245c6d61746862627b517d242d436172746965722c20616e640a73696d706c65206e6f726d616c2063726f7373696e6773206f766572202452242c206f72206973206f627461696e656420616674657220612066696e697465206e756d6265720a6f66207374657073206f6620746865206d696e696d616c206d6f64656c2070726f6772616d2066726f6d2073756368206120245c6d61746862627b517d242d64697669736f722e0a4c657420245624206265207468652076697369626c6520626f756e64617279206f6620244e65665c6c65667428582f525c726967687429242066726f6d2024765f7b307d5c696e204e5e7b317d5c6c65667428585c7269676874295f7b5c6d61746862627b527d7d240a6f66207468652064697669736f7220244b5f7b587d2b5c44656c7461242e205468656e2028312920657665727920636f6d70616374207375627365742024465c7375627365742072656c696e745c2056240a697320636f6e7461696e656420696e206120756e696f6e206f662066696e6974656c79206d616e7920737570706f7274696e6720726174696f6e616c206879706572706c616e65732c0a616e642028322920657665727920245c6d61746862627b517d242d4361727469657220245c6d61746862627b517d242d64697669736f72206f6e202458240a7769746820636c61737320696e2072656c696e74202456242069732073656d69616d706c652e205c656e647b636f726f6c6c6172797d0a5c626567696e7b70726f6f667d0a5c626567696e7b636f6d6d656e747d0a70726f7065726e65737320697320696d706f7274616e742073696e636520696e74657273656374696f6e207468656f72792063616e277420626520646566696e65640a696620646f6e2774206861766520636f6d706163746e6573732e0a5c656e647b636f6d6d656e747d0a5c626567696e7b636f6d6d656e747d0a5c696e636c75646567726170686963737b70617374656436392e706e677d0a5c656e647b636f6d6d656e747d0a7b7d20417320696e20746865206369746564207468656f72656d2c206e6f74696e67206974206f6e6c79207265717569726573207468652066696e6974652067656e65726174696f6e0a6f6620436f726f6c6c617279205c7265667b47656e6572616c697a656446696e69746547656e65726174696f6e7d2c20616e64205468656f72656d205c7265667b74686d332e357d2e0a5061727420283229206973206120636f6e73657175656e6365206f6620436f726f6c6c617279205c7265667b74686d4162756e64616e63654e6566426967496d7069657353656d69616d706c65527d2e0a200a5c656e647b70726f6f667d0a5c6d6564736b69707b7d0a0a5c626567696e7b6c656d6d617d0a5c636974655b362e325d7b434c7d5c6c6162656c7b45787472656d616c5261797345786973747d4c657420245c6c65667428582c5c44656c74615c726967687429240a62652061206b6c742070616972206f662072656c61746976652064696d656e73696f6e20243224206f76657220612044565220245224207769746820706572666563740a72657369647565206669656c6420246b24206f662063686172616374657269737469632024703e302420616e642070657266656374206672616374696f6e206669656c640a244b242e20537570706f736520245c6c65667428582c5c44656c74615c72696768742924206973206e6f74206e65662c20616e64202441242069732061206269670a245c6d61746862627b517d242d64697669736f722073756368207468617420245c6c65667428582c5c44656c74612b415c72696768742924206973206b6c742c0a616e6420244b5f7b587d2b5c44656c74612b4124206973206e65662e204c657420245c6c616d6264612420626520746865206e6566207468726573686f6c642e0a5468656e20245c6c616d6264615c696e5c6d61746862627b517d5e7b2b7d242c20616e642074686572652069732024525c7375627365745c6f7665726c696e657b4e457d5c6c65667428585c726967687429240a7769746820245c6c656674284b5f7b587d2b5c44656c74612b5c6c616d62646120415c7269676874292e523d302420616e6420245c6c656674284b5f7b587d2b5c44656c74615c7269676874292e523c30242e205c656e647b6c656d6d617d0a5c626567696e7b70726f6f667d0a417320696e20746865206369746564207468656f72656d2c20746865206f6e6c7920726573756c74206265696e67206e6565646564206973207468652066696e6974650a67656e65726174696f6e20436f726f6c6c617279205c7265667b47656e6572616c697a656446696e69746547656e65726174696f6e7d2e200a5c656e647b70726f6f667d0a5c626567696e7b636f6d6d656e747d0a5c6d6564736b69707b7d0a0a5c626567696e7b636f726f6c6c6172797d0a28636f726f6c6c617279205c7265667b636f723a416c6c4d696e696d616c4d6f64656c737d29204c657420245c6c65667428582c5c44656c74615c726967687429240a62652061206b6c742070616972206f662072656c61746976652064696d656e73696f6e20243224206f76657220612044565220245224207769746820706572666563740a72657369647565206669656c6420246b2420616e642070657266656374206672616374696f6e206669656c6420244b242e20417373756d65207468617420244b5f7b587d2b5c44656c7461240a697320612070736575646f2d65666665637469766520245c6d61746862627b517d242d436172746965722064697669736f722c2077686963682069732073696d706c650a6e6f726d616c2063726f7373696e6773206f766572202452242e205468656e20746865206d696e696d616c206d6f64656c206f6620245c6c65667428582c5c44656c74615c726967687429240a657869737473206f7665722024522420616e642061206d696e696d616c206d6f64656c2070726f6772616d2063616e2062652072756e20756e74696c20244b5f7b587d2b5c44656c7461240a6973206e6566206f6e20626f7468207468652067656e6572696320616e64207370656369616c206669626572732e205c656e647b636f726f6c6c6172797d0a5c626567696e7b70726f6f667d0a4966206e65636573736172792c20657874656e642024522420746f20626520636f6d706c65746520616e6420246b2420616c67656272616963616c6c7920636c6f7365642e0a4c65742024412420626520616e20616d706c652064697669736f72206f6e20245224207375636820746861742024415f7b6b7d3d417c5f7b6b7d242069730a616d706c652e204669727374206e6f7465207468617420746865206d696e696d616c206d6f64656c206f6620244b5f7b585f7b6b7d7d2b5c44656c74615f7b6b7d240a697320676976656e206279202450726f6a5c20525c6c656674284b5f7b585f7b6b7d7d2b5c44656c74615f7b6b7d2b5c657073696c6f6e20415f7b6b7d5c726967687429240a666f7220736f6d652024303c5c657073696c6f6e5c6c6c31242077686963682069732066696e6974656c792067656e657261746564206279205c636974655b372e315d7b54616e7d2e0a417320244b5f7b587d2b5c44656c74612b5c657073696c6f6e204124206973206269672c20736e63206f766572202452242c20616e6420245c6d61746862627b517d242d436172746965722c0a7468656e20436f726f6c6c617279205c7265667b636f723a4d4d507d20696d706c6965732074686174202450726f6a5c20525c6c656674284b5f7b587d2b5c44656c74612b5c657073696c6f6e20415c726967687429240a69732066696e6974656c792067656e6572617465642e205468757320746865206d696e696d616c206d6f64656c20666f7220244b5f7b587d2b5c44656c74612f52240a6578697374732e200a0a4e6578742c207265706c61636520245c44656c74612420627920245c44656c74612b5c657073696c6f6e20412420736f2074686174207765206d617920617373756d650a244b5f7b587d2b5c44656c746124206973206269672c20616e642074686520676f616c20697320746f2073686f7720746861742061206d696e696d616c206d6f64656c0a70726f6772616d2063616e2062652072756e20666f72207468697320245c6d61746862627b517d242d64697669736f722e204e6f77206173202452242069730a636f6d706c6574652c206279207468652073696d706c65206e6f726d616c2063726f7373696e6773206f7665722024522420617373756d7074696f6e2c207468650a737472617461206f6620245c6c65667428582c5c44656c74615c7269676874292420696e7465727365637420746865207370656369616c2066696265722024585f7b6b7d240a696e2074686520737472617461206f6620245c6c65667428585f7b6b7d2c5c44656c74615f7b6b7d5c7269676874292e24205265706c6163696e6720245c6c65667428582c5c44656c74615c726967687429240a6279206120626c6f772d75702c20776520617373756d6520245c6c65667428582c5c44656c74615c72696768742924206973207465726d696e616c2e204e6f770a646566696e65200a5c5b0a5c7068695f7b6b7d3a3d5c44656c74615f7b6b7d5c7765646765204e5f7b5c7369676d617d5c6c656674284b5f7b585f7b6b7d7d2b5c44656c74615f7b6b7d5c7269676874290a5c5d0a616e64206c657420245c70686924206f6e202452242062652074686520636f72726573706f6e64696e672064697669736f7220287768696368206578697374730a6279206c6f672d736d6f6f74686e657373292e20417320696e207468652070726f6f66206f662050726f706f736974696f6e205c7265667b5465726d696e616c53696d706c65436173657d2c0a6166746572207375627472616374696e6720245c7068695f7b6b7d24207765206d61792066697273742072756e2061206d696e696d616c206d6f64656c2070726f6772616d0a666f7220244b5f7b587d2b5c44656c74615e7b5c7072696d657d3d4b5f7b587d2b5c756e64657262726163657b5c44656c74612d5c7068697d5f7b5c44656c74615e7b5c7072696d657d7d240a6f6e20626f7468206669626572732073696d756c74616e656f75736c7920756e74696c20616c6c207468652063757276657320696e20245c6d61746862627b427d5f7b2d7d5c6c656674284b5f7b585f7b6b7d7d2b5c44656c74615f7b6b7d5e7b5c7072696d657d5c7269676874292c5c205c6d61746862627b427d5f7b2d7d5c6c656674284b5f7b585f7b4b7d7d2b5c44656c74615f7b4b7d5e7b5c7072696d657d5c726967687429240a68617665206265656e20636f6e747261637465642e20427920646566696e6974696f6e206f6620245c706869242c207468652072656d61696e696e67206375727665730a61726520696e2074686520737570706f7274206f6620245c44656c7461242c20616e642068656e63652c2062792074686520617373756d7074696f6e20746861740a244b5f7b587d2b5c44656c74612420697320736e63206f766572202452242c2074686573652063757276657320657874656e6420746f20626f7468206669626572732e0a53756368206375727665732061726520244b5f7b585f7b6b7d7d2b5c44656c74615f7b6b7d5e7b5c7072696d657d242d6e656761746976652c20616e6420616c736f0a244b5f7b585f7b6b7d7d2b5c44656c74615f7b6b7d5e7b5c7072696d657d2b5c64656c74615c7068695f7b6b7d242d6e6567617469766520666f722024303c5c64656c74615c6c6c31242e0a427920746865206669727374207061726167726170682c20746865206d696e696d616c206d6f64656c20666f7220244b5f7b587d2b5c44656c74615e7b5c7072696d657d2b5c64656c74615c706869240a65786973747320616e6420617320746869732064697669736f7220686173207468652073616d6520737570706f727420617320244b5f7b587d2b5c44656c7461242c0a7468652074776f206d696e696d616c206d6f64656c732061677265652e205c656e647b70726f6f667d0a5c656e647b636f6d6d656e747d0a7b7d20250a5c626567696e7b636f6d6d656e747d0a49742072656d61696e7320746f2073686f772074686174207768656e207468652067656f6d65747269632066696265727320617265207465726d696e616c2c207468656e0a246624206973206e6f74206120666c697070696e6720636f6e7472616374696f6e20696e207468652073656e7365206f6620646566696e6974696f6e205c7265667b6465663a466c69707d2e0a53696e63652024585f7b6b7d24206861732064696d656e73696f6e202432242c207468656e2024665f7b6b7d3a585f7b6b7d5c746f20585f7b6b7d5e7b5c7072696d657d3a3d50726f6a5c20525c6c656674284b5f7b585f7b6b7d7d2b5c44656c74615f7b6b7d2b485f7b6b7d5c726967687429240a697320612064697669736f7269616c20636f6e7472616374696f6e20616e6420746875732c20632e662e205c636974655b342e355d7b4269727d2c2024585f7b6b7d240a697320245c6d61746862627b517d242d666163746f7269616c2e205468757320246d5c6c656674284b5f7b585f7b6b7d7d2b5c44656c74615f7b6b7d5c726967687429240a6973206c6f63616c6c792067656e65726174656420627920612073696e676c6520656c656d656e7420666f7220736f6d65206c6172676520616e6420646976697369626c650a246d242e204279207468656f72656d205c7265667b4d61696e5468656f72656d496e74726f64756374696f6e7d2c20616e64204e616b6179616d612773206c656d6d612c0a246d5c6c656674284b5f7b587d2b5c44656c74615c7269676874292420697320616c736f206c6f63616c6c792067656e65726174656420627920612073696e676c650a73656374696f6e20616e64206973207468757320436172746965722e2049662024662420697320696e2066616374206120244b5f7b587d2b5c44656c7461242d666c697070696e670a636f6e7472616374696f6e2c207468656e2024483d2d6d5c6c656674284b5f7b587d2b5c44656c74615c726967687429242069732072656c61746976656c7920616d706c652e0a546875732024303c482e5c5369676d613d665f7b2a7d482e5c5369676d613d3024202873696e63652024482420697320436172746965722c2024482420616e640a24665f7b2a7d482420636f696e6369646520696e20636f64696d656e73696f6e20243124292e200a5c656e647b636f6d6d656e747d0a0a0a0a5c73656374696f6e7b4578697374656e6365206f66204d696e696d616c204d6f64656c737d0a5c626567696e7b636f726f6c6c6172797d0a5c626567696e7b636f6d6d656e747d0a5c696e636c75646567726170686963735b6262203d2030203020323030203130302c2064726166742c20747970653d6570735d7b7061737465643438382e706e677d0a0a5c696e636c75646567726170686963735b6262203d2030203020323030203130302c2064726166742c20747970653d6570735d7b7061737465643438392e706e677d0a5c656e647b636f6d6d656e747d0a5c6c6162656c7b636f723a4b4c545f56657273696f6e4d4d50414c4c7d204c657420245c6c65667428582c5c44656c74615c726967687429242062652061206b6c740a70616972206f662072656c61746976652064696d656e73696f6e20243224206f766572206120445652202452242077697468207065726665637420726573696475650a6669656c6420246b24206f662063686172616374657269737469632024703e302420616e642070657266656374206672616374696f6e206669656c6420244b24250a5c626567696e7b636f6d6d656e747d0a2c20616e6420244b2420697320656974686572206f66206368617261637465726973746963202430240a5c656e647b636f6d6d656e747d0a5c626567696e7b636f6d6d656e747d0a206f722024585f7b4b7d24206c6966747320746f2024575f7b327d242e20417373756d6520746861742024585f7b6b7d24206c6966747320746f2024575f7b327d240a5c656e647b636f6d6d656e747d0a2e20417373756d65207468617420244b5f7b587d2b5c44656c74612420697320245c6d61746862627b517d242d436172746965722c2070736575646f2d6566666563746976652c0a616e642073696d706c65206e6f726d616c2063726f7373696e6773206f766572202452242e205468656e20746865206d696e696d616c206d6f64656c206f6620245c6c65667428582c5c44656c74615c726967687429240a6578697374732e205c656e647b636f726f6c6c6172797d0a5c626567696e7b70726f6f667d0a4c65742024412420626520612073756666696369656e746c792067656e6572616c20616d706c652064697669736f722e20436f6e73696465722061206d696e696d616c0a6d6f64656c2070726f6772616d2077697468207363616c696e67206f662024415f7b317d3d41242072756e2028736c696768746c7920646966666572656e742066726f6d0a757375616c2920617320666f6c6c6f77732e204c6574200a5c5b0a5c6c616d6264613d696e665c6c6566745c7b20745c6765305c207c5c204b5f7b587d2b5c44656c74612b74415f7b317d5c2069735c206e65665c206f6e5c20585f7b6b7d5c72696768745c7d202e0a5c5d0a496620245c6c616d6264613d30242c207468656e2077652061726520646f6e652e204f74686572776973652c2073696e6365206e65666e657373206f6e2024585f7b6b7d240a696d706c696573206f6e2024582420285c636974655b352e332e32345d7b4c69757d20616e64205c636974655b312e342e31305d7b4c617a7d292c206170706c79696e670a4c656d6d61205c7265667b45787472656d616c5261797345786973747d2c20746865726520657869737473206120245c6c656674284b5f7b587d2b5c44656c74615c726967687429242d6e656761746976650a65787472656d616c20726179202443242073756368207468617420245c6c656674284b5f7b587d2b5c44656c74612b5c6c616d62646120415c7269676874292e433d30242e0a54616b652074686520636f6e7472616374696f6e206f6e20245c6c65667428582c5c44656c74612b5c6c616d62646120415c7269676874292f522420676976656e0a6279207468652070726576696f7573207468656f72656d20616e64207265706c61636520245c6c65667428585f7b317d2c5c44656c74615f7b317d2b5c6c616d6264615f7b317d415c726967687429240a62792074686520636f72726573706f6e64696e6720666c6970206f7220636f6e7472616374696f6e20245c7068693a5c6c65667428585f7b317d2c5c44656c74615f7b317d2b5c6c616d6264615f7b317d415c7269676874295c746f5c6c65667428585f7b327d2c5c44656c74615f7b327d2b5c6c616d6264615f7b327d415c7269676874292f522e240a4c65742024415f7b327d3d5c7068695f7b2a7d415f7b317d2420616e6420245c44656c74615f7b327d3d5c7068695f7b2a7d5c44656c74615f7b317d2e24205468656e0a244b5f7b585f7b327d7d2b5c44656c74615f7b327d2b5c6c616d62646120415f7b327d24206973206e6566206f6e20626f746820666962657273250a5c626567696e7b636f6d6d656e747d0a6578706c61696e207768792070757368666f7277617264206973206e6566206f6e20626f7468206669626572732e2e2e20287472697669616c207468696e6720666f720a657870657274732c20627574206e6f742049290a5c656e647b636f6d6d656e747d0a2c20736f206e6f74696e6720746861743a200a5c5b0a525f7b697d3d525c6c65667428585f7b697d2c4b5f7b585f7b697d7d2b5c44656c74615f7b697d2b5c6c616d6264615f7b697d415f7b697d5c7269676874290a5c5d0a5c5b0a5c617070726f7820525c6c65667428585f7b317d2c4b5f7b585f7b317d7d2b5c44656c74615f7b317d2b5c6c616d6264615f7b697d415c7269676874290a5c5d0a776520726570656174207468652070726f636573732c2073696e63652077652063616e2061726775652074686520636f6e7472616374696f6e20657869737473207669610a24585f7b317d242c207768696368206973206c6f672d736d6f6f74682e204e6f772074686520676f616c20697320746f2073686f77207468652073657175656e63650a6f6620245c6c616d6264615f7b697d2420616c776179732064656372656173657320616674657220612066696e697465206e756d626572206f6620696e64696365730a28692e652e207468657265206973206e6f20696e66696e6974652073657175656e6365206f6620666c697073292e205468697320666f6c6c6f77732066726f6d207468650a66696e6974656e657373206f66205765616b204c6f672043616e6f6e6963616c204d6f64656c73206f6e20746865207370656369616c2066696265722028657373656e7469616c6c790a6a75737420612073696d706c69666965642076657273696f6e206f662074686520617267756d656e7420696e205c636974657b4243484d7d2c206e6f74696e670a74686174207468652074776f20726571756972656420726573756c74733a206578697374656e6365206f66206c6f67207465726d696e616c206d6f64656c7320616e640a6e6f6e2d76616e697368696e67207468656f72656d20686f6c64206f6e20746865207370656369616c20666962657220766961205c636974657b54616e7d292061730a6561636820666c697070696e6720636f6e747261637420696e64756365732061207765616b206c6f672063616e6f6e6963616c206d6f64656c206f6e20746865207370656369616c0a66696265722028746869732077696c6c20626520656c61626f7261746564206d6f726520696e204d696e696d616c204d6f64656c7320666f722041726974686d657469630a5468726565666f6c64204765726d7320302e312c20776869636820697320706f737465642073696d756c74616e656f75736c79207769746820746869732076657273696f6e0a6f66205375726644494f502061742064697669736962696c6974792e776f726470726573732e636f6d292e2041732074686572652063616e206265206e6f20696e66696e6974650a73657175656e6365206f6620636f6e7472616374696f6e732c20746865206d696e696d616c206d6f64656c2070726f6772616d2077697468207363616c696e67206d7573740a7468657265666f7265207465726d696e6174652e204e6f74652074686572652069732061206d6f7265206469726563742070726f6f6620696e2074686520636173650a6f6620245c6e755c6c656674284b5f7b585f7b6b7d7d2b5c44656c74615f7b6b7d5c7269676874295c6e65713124207669612074686520746563686e69717565730a6f66205c636974657b434c7d2c20776869636820776f756c6420616c736f20686f6c6420617373756d696e672074686520696e76617269616e6365206f6620706c75726967656e6572610a666f7220245c6e755c6c656674284b5f7b585f7b6b7d7d2b5c44656c74615f7b6b7d5c7269676874293d5c6b617070615c6c656674284b5f7b585f7b6b7d7d2b5c44656c74615f7b6b7d5c7269676874293d31242e200a5c656e647b70726f6f667d0a5c6d6564736b69707b7d0a0a0a54686520666f6c6c6f77696e6720697320616e6f7468657220436f726f6c6c617279206f66205468656f72656d205c7265667b5465726d696e616c53696d706c65436173657d2c0a666f72207061697273206e6f74206f662067656e6572616c20747970652e2054686973206973206120726573756c74206f66207468652070726f6f66206f66205468656f72656d0a5c7265667b5465726d696e616c53696d706c65436173657d206e6f74206265696e6720616666656374656420627920616464696e6720616e20616d706c652064697669736f720a2448242e204279206162756e64616e636520666f72206c6f672073757266616365732c20746869732067697665732061206c6f672076657273696f6e206f66205c636974657b4b557d2e200a0a0a5c73656374696f6e7b496e76617269616e6365206f66204b6f64616972612044696d656e73696f6e737d0a5c626567696e7b636f726f6c6c6172797d0a5c6c6162656c7b636f723a4e756d65726963616c44696d656e73696f6e496e76617269616e63657d4c657420245c6c65667428582c5c44656c74615c726967687429240a62652061206b6c74206c6f672d736d6f6f74682070616972206f662072656c61746976652064696d656e73696f6e20243224206f766572206120445652202452240a776974682072657369647565206669656c6420246b2420616e64206672616374696f6e206669656c6420244b242073756368207468617420246b242069730a616c67656272616963616c6c7920636c6f736564206f662063686172616374657269737469632024703e30242e20417373756d6520244b5f7b587d2b5c44656c7461240a69732070736575646f2d6566666563746976652e205468656e20746865206e756d65726963616c206b6f64616972612064696d656e73696f6e20736174697366790a5c5b0a5c6e755c6c656674284b5f7b585f7b4b7d7d2b5c44656c74615f7b4b7d5c7269676874293d5c6e755c6c656674284b5f7b585f7b6b7d7d2b5c44656c74615f7b6b7d5c7269676874292e0a5c5d0a204173206120726573756c74206f66206162756e64616e636520666f72206c6f672073757266616365732c20746865206c6f67206b6f64616972612064696d656e73696f6e0a616c736f2073617469736679200a5c5b0a5c6b617070615c6c656674284b5f7b585f7b4b7d7d2b5c44656c74615f7b4b7d5c7269676874293d5c6b617070615c6c656674284b5f7b585f7b6b7d7d2b5c44656c74615f7b6b7d5c7269676874292e0a5c5d0a205c656e647b636f726f6c6c6172797d0a5c626567696e7b70726f6f667d0a466f7220616e7920616d706c65202441242c2074686572652065786973747320616e20246d5f7b307d242073756368207468617420666f7220246d3e6d5f7b307d242c0a244b5f7b587d2b5c44656c74612b5c667261637b317d7b6d7d413d4b5f7b587d2b5c44656c74615e7b5c7072696d657d24206973206b6c7420616e6420616e640a626967202873696e636520244b5f7b587d2b5c44656c74612420697320617373756d65642070736575646f2d656666656374697665292e2054687573207468650a726573756c7420666f6c6c6f77732066726f6d20436f726f6c6c617279205c7265667b636f723a4b4c545f56657273696f6e7d2e20250a5c626567696e7b636f6d6d656e747d0a496620746861742076657273696f6e206f66206162756e64616e636520646f65736e27742061637475616c6c7920686f6c642c207468656e20796f752063616e206170706c790a452e562e20352e31302063617365206166746572207265647563696e6720746f20746865207465726d696e616c2063617365202873696e636520796f75206765740a612073656d692d616d706c652068656e636520736d6f6f74682c20616e6420796f7520686176652061206c696674696e67206f6620746865207061697220696e20746869730a63617365292e200a5c656e647b636f6d6d656e747d0a7b7d200a5c656e647b70726f6f667d0a0a5c73656374696f6e7b537570706c656d656e7461727920416c676562726120526573756c74737d0a0a0a5c73756273656374696f6e7b44697363726574652056616c756174696f6e2052696e67737d0a0a546869732073656374696f6e20636f6e7461696e7320736f6d6520626173696320726573756c7473206f6e2064697363726574652076616c756174696f6e2072696e67730a75736566756c20666f7220756e6465727374616e64696e67204c656d6d61205c7265667b4b61747375726155656e6f7d2e0a5c626567696e7b646566696e6974696f6e7d0a5c6c6162656c7b6465663a4456527d20412064697363726574652076616c756174696f6e2072696e67202844565220666f722073686f727429202452242069730a616e20696e74656772616c20646f6d61696e20776869636820697320616e20696e74656772616c6c7920636c6f736564206e6f657468657269616e206c6f63616c0a72696e672077697468204b72756c6c2064696d656e73696f6e206f6e652e200a0a5c6d6564736b69707b7d0a5c656e647b646566696e6974696f6e7d0a5c626567696e7b6c656d6d617d0a4c65742024412420626520612064697363726574652076616c756174696f6e2072696e672077697468206672616374696f6e206669656c6420244b242e204c65740a244c2f4b2420626520616e792066696e69746520736570617261626c6520657874656e73696f6e2c20616e64206c6574202442242064656e6f7465207468650a696e74656772616c20636c6f73757265206f662024412420696e20244c242e205468656e2024422420697320612066696e697465202441242d6d6f64756c652c0a616e642069662024412420697320636f6d706c6574652c207468656e20736f2069732024422c2420616e64202442242069732061204456522e20546861740a69732c2066696e69746520657874656e73696f6e732061726520636f6d706c65746520616e6420756e73706c69742e200a0a5c6d6564736b69707b7d0a5c656e647b6c656d6d617d0a5c626567696e7b646566696e6974696f6e7d0a4c65742024412c4224206265204e6f657468657269616e206c6f63616c2072696e67732e2041206c6f63616c20686f6d6f6d6f72706869736d2024415c746f2042240a6973207361696420746f20626520616e20756e72616d696669656420686f6d6f6d6f72706869736d206f66206c6f63616c2072696e6773206966200a0a28312920245c6d6174686672616b7b6d7d5f7b417d423d5c6d6174686672616b7b6d7d5f7b427d2c240a0a28322920245c6b617070615c6c656674285c6d6174686672616b7b6d7d5f7b427d5c7269676874292420697320612066696e69746520736570617261626c6520657874656e73696f6e0a6f6620245c6d6174686672616b7b5c6b617070617d5c6c656674285c6d6174686672616b7b6d7d5f7b417d5c726967687429242c20616e640a0a2833292024422420697320657373656e7469616c6c79206f662066696e6974652074797065206f766572202441242028692e652e20244224206973207468650a6c6f63616c697a6174696f6e206f6620612066696e6974652074797065202441242d616c67656272612061742061207072696d652e200a5c656e647b646566696e6974696f6e7d0a5c6d6564736b69707b7d0a0a5c626567696e7b646566696e6974696f6e7d0a4c65742024412c4224206265204e6f657468657269616e206c6f63616c2072696e67732e2041206c6f63616c20686f6d6f6d6f72706869736d2024663a415c746f2042240a6973207361696420746f20626520616e20e974616c6520686f6d6f6d6f72706869736d206f66206c6f63616c2072696e6773206966206974206973206120666c61740a616e6420756e72616d696669656420686f6d6f6d6f72706869736d206f66206c6f63616c2072696e67732e204966202459242069732061206c6f63616c6c79204e6f657468657269616e0a736368656d652c20616e642024663a585c746f2059242069732061206d6f72706869736d206f6620736368656d6573207768696368206973206c6f63616c6c790a6f662066696e69746520747970652c207468656e20246624206973207361696420746f20626520e974616c6520696620697420697320e974616c6520617420616c6c0a69747320706f696e74732e200a5c656e647b646566696e6974696f6e7d0a5c6d6564736b69707b7d0a0a5c626567696e7b6c656d6d617d0a5c636974655b362e31345d7b4465627d204c6574202441242062652061206e6f657468657269616e20696e74656772616c6c7920636c6f736564206c6f63616c0a72696e672077697468206672616374696f6e206669656c6420244b2420616e64207365742024533d537065635c6c65667428415c7269676874292e24204c65740a245c7068693a585c746f20532420626520616e20e974616c6520636f7665722e205468656e2024582420697320616c736f206e6f726d616c2c20616e6420696e0a706172746963756c61722c2069742063616e206265207772697474656e2061732074686520636f70726f64756374206f6620697473202866696e6974656c79206d616e79290a6972726564756369626c6520636f6d706f6e656e74732e20467572746865726d6f72652c20676976656e206120636f6e6e656374656420636f6d706f6e656e742024585f7b307d240a6f66202458242c2074686520696e647563656420e974616c6520636f7665722024585f7b307d5c746f20532420697320746865206e6f726d616c697a6174696f6e0a6f662024532420696e20246b5c6c65667428535c7269676874295c686f6f6b72696768746172726f77206b5c6c65667428585f7b307d5c726967687429242e200a0a5c6d6564736b69707b7d0a0a5c656e647b6c656d6d617d0a46726f6d207468652061626f7665206c656d6d61732c20697420697320636c656172207468617420616e20e974616c6520636f766572206f66206120636f6d706c6574650a44565220726573756c7473206973206120636f6d706c657465204456522e200a0a5c6d6564736b69707b7d0a0a5c626567696e7b6c656d6d617d0a5c636974655b322e322e31345d7b426f7d205c6c6162656c7b426f7363684c656d6d617d4c65742024663a585c746f205324206265206120736d6f6f74680a6d6f72706869736d20286f6620736368656d6573292e204c657420247324206265206120706f696e74206f66202453242c20616e64206c6574202478242062650a6120636c6f73656420706f696e74206f66207468652066696272652024585f7b737d3d585c74696d65735f7b537d537065635c206b5c6c65667428735c726967687429240a73756368207468617420246b5c6c65667428785c72696768742924206973206120736570617261626c6520657874656e73696f6e206f6620246b5c6c65667428735c7269676874292e24250a5c626567696e7b636f6d6d656e747d0a4e6f7465204c697520322e312e31322c207061676520333020676976657320746861742069662024585f7b6b7d24206973206120736368656d65206f76657220246b242c0a616e6420246d2420697320616e79206d6178696d616c20696465616c207468656e2024412f6d2420697320612066696e69746520616c67656272616963202868656e63650a736570617261626c652920657874656e73696f6e206f6620246b242e200a5c656e647b636f6d6d656e747d0a7b7d205468656e2074686572652065786973747320616e20e974616c65206d6f72706869736d2024673a535e7b5c7072696d657d5c746f20532420616e64206120706f696e740a24735e7b5c7072696d657d5c696e20535e7b5c7072696d657d242061626f7665202473242073756368207468617420746865206d6f72706869736d2024665e7b5c7072696d657d3a585c74696d65735f7b537d535e7b5c7072696d657d5c746f20535e7b5c7072696d657d240a6f627461696e65642066726f6d20246624206279207468652062617365206368616e67652024535e7b5c7072696d657d5c746f2053242061646d69747320610a73656374696f6e2024683a535e7b5c7072696d657d5c746f20585c74696d65735f7b537d535e7b5c7072696d657d2c242077686572652024685c6c65667428735e7b5c7072696d657d5c726967687429240a6c6965732061626f7665202478242c20616e6420776865726520246b5c6c65667428735e7b5c7072696d657d5c7269676874293d6b5c6c65667428785c726967687429242e0a5c626567696e7b636f6d6d656e747d0a6e6f74652078206973206120636c6f73656420706f696e74206f66207468652066696265722c20736f207265616c6c7920246b5c6c65667428735e7b5c7072696d657d5c7269676874292f6b5c6c65667428735c726967687429240a6973206120736570617261626c6520657874656e73696f6e2c20736f20696620706572666563742c207468656e20246b5c6c65667428735e7b5c7072696d657d5c726967687429240a697320636f6e7461696e656420696e20616c6765627261696320636c6f737572652e2e2e0a0a6e6f74652069662069742773206120636f6d706c657465206476722c207468656e2074686572652073686f756c64206f6e6c79206265206f6e65207072696d65206c79696e670a6f7665722c20736f20616761696e20697427732061206476722e2e2e0a0a7468617427732077687920776520666972737420657874656e6420746f206476722e2e2e200a5c656e647b636f6d6d656e747d0a5c656e647b6c656d6d617d0a5c626567696e7b72656d61726b7d0a5c6c6162656c7b72656d3a426f7363684c656d6d614c6f63616c52656d61726b7d4974207365656d7320746f206d652c207468617420696620246b242069730a706572666563742c207468652070726f6f66206f66207468652061626f7665206c656d6d6120676f6573207468726f756768207768656e2024663a585c746f2053240a6973206d6572656c7920736d6f6f74682061742024785c696e20582420616e642024663a585c746f205324206973206c6f63616c6c79206f662066696e6974650a747970652e0a5c656e647b72656d61726b7d0a0a5c73756273656374696f6e7b5269656d616e6e2d526f636820666f722050657266656374204669656c64737d0a0a546865207374616e64617264205269656d616e6e2d526f6368207468656f72656d20666f7220616c67656272616963207375726661636573206973207374617465640a6f76657220616e20616c67656272616963616c6c7920636c6f736564206669656c642e2049276d2073757265207468652076657273696f6e20666f7220706572666563740a6669656c6473206973206b6e6f776e20696620747275652c206275742073696e636520492077617320756e61626c6520746f2066696e642061207265666572656e63652c0a696e20746869732073656374696f6e20492067697665206e656365737361727920696e6772656469656e747320746f20657874656e64696e67207468652070726f6f660a696e205c636974655b4368617074657220352e315d7b4861727d20746f2070657266656374206669656c64732e200a5c626567696e7b6c656d6d617d0a5c636974655b372e332e31365d7b4c69757d204c65742024582420626520612070726f6a6563746976652076617269657479206f7665722061206669656c640a246b242e204c6574200a5c5b0a305c746f20465c746f20475c746f20485c746f300a5c5d0a20626520616e2065786163742073657175656e6365206f6620636f686572656e742073686561766573206f6e202458242e205468656e200a5c5b0a5c6368695c6c65667428475c7269676874293d5c6368695c6c65667428465c7269676874292b5c6368695c6c65667428485c7269676874292e0a5c5d0a0a0a5c6d6564736b69707b7d0a5c656e647b6c656d6d617d0a5c626567696e7b7468656f72656d7d0a5c636974655b372e332e31375d7b4c69757d204c65742024582420626520612070726f6a656374697665206375727665206f7665722061206669656c6420246b242e0a4c657420244424206265206120436172746965722064697669736f72206f6e202458242e205468656e2077652068617665200a5c5b0a5c6368695c6c656674285c6d61746863616c7b4f7d5f7b587d5c6c65667428445c7269676874295c7269676874293d6465675c20442b5c6368695c6c656674285c6d61746863616c7b4f7d5f7b587d5c7269676874292e0a5c5d0a0a5c656e647b7468656f72656d7d0a5c6d6564736b69707b7d0a0a5c626567696e7b646566696e6974696f6e7d0a5c636974655b342e312e322c20382e332e315d7b4c69757d41206e6f726d616c204e6f657468657269616e20696e74656772616c20646f6d61696e206f662064696d656e73696f6e0a243024206f72202431242069732063616c6c6564206120446564656b696e6420646f6d61696e2e2041206e6f726d616c206c6f63616c6c79204e6f657468657269616e0a736368656d65206f662064696d656e73696f6e20243024206f72202431242069732063616c6c6564206120446564656b696e6420736368656d652e204c65740a245324206265206120446564656b696e6420536368656d652e2057652063616c6c20616e20696e74656772616c2c2070726f6a6563746976652c20666c6174202453242d736368656d650a245c70693a585c746f205324206f662064696d656e73696f6e20243224206120666962657265642073757266616365206f766572202453242e204966202464696d5c20533d30240a7468656e2024582420697320616e20696e74656772616c2c2070726f6a6563746976652c20616c676562726169632073757266616365206f7665722061206669656c642e0a416e206972726564756369626c65205765696c2064697669736f72202444242069732063616c6c656420686f72697a6f6e74616c206966202464696d5c20533d31240a616e6420696620245c70697c5f7b447d3a445c746f205324206973207375726a6563746976652e20496620245c70695c6c65667428445c726967687429242069730a7265647563656420746f206120706f696e742c2077652073617920746861742024442420697320766572746963616c2e200a0a5c6d6564736b69707b7d0a5c656e647b646566696e6974696f6e7d0a5c626567696e7b7468656f72656d7d0a5c636974655b392e312e31325d7b4c69757d28496e74657273656374696f6e206f6e206120666962657265642073757266616365292e204c65742024585c746f2053240a6265206120726567756c6172206669626572656420737572666163652e204c65742024735c696e205324206265206120636c6f73656420706f696e742e205468656e0a746865726520657869737473206120756e697175652062696c696e656172206d617020286f6620245c6d61746862627b5a7d242d6d6f64756c657329200a5c5b0a695f7b737d3a4469765c6c65667428585c7269676874295c74696d6573204469765f7b737d5c6c65667428585c7269676874295c746f5c6d61746862627b5a7d0a5c5d0a2077686963682076657269666965732074686520666f6c6c6f77696e672070726f706572746965733a0a0a2861292049662024445c696e204469765c6c65667428585c7269676874292420616e642024455c696e204469765f7b737d5c6c65667428585c726967687429240a68617665206e6f20636f6d6d6f6e20636f6d706f6e656e742c207468656e200a5c5b0a695f7b737d5c6c65667428442c455c7269676874293d5c73756d5f7b787d695f7b787d5c6c65667428442c455c7269676874295c6c6566745b6b5c6c65667428785c7269676874293a6b5c6c65667428735c7269676874295c72696768745d2c0a5c5d0a207768657265202478242072756e73207468726f7567682074686520636c6f73656420706f696e7473206f662024585f7b737d242e200a0a28622920546865207265737472696374696f6e206f662024695f7b737d2420746f20244469765f7b737d5c6c65667428585c7269676874295c74696d6573204469765f7b737d5c6c65667428585c726967687429240a69732073796d6d65747269632e200a0a2863292024695f7b737d5c6c65667428442c455c7269676874293d695f7b737d5c6c65667428445e7b5c7072696d657d2c455c726967687429242069662024445c73696d20445e7b5c7072696d657d2e24200a0a2864292049662024303c455c6c6520585f7b737d242c207468656e200a5c5b0a695f7b737d5c6c65667428442c455c7269676874293d6465675f7b6b5c6c65667428735c7269676874297d5c6d61746863616c7b4f7d5f7b587d5c6c65667428445c7269676874297c5f7b457d2e0a5c5d0a0a5c656e647b7468656f72656d7d0a5c6d6564736b69707b7d0a0a5c626567696e7b7468656f72656d7d0a5c6c6162656c7b74686d3a41646a756e6374696f6e7d5c636974655b392e312e33375d7b4c69757d204c65742024585c746f205324206265206120726567756c61720a6669626572656420737572666163652c2024735c696e205324206120636c6f73656420706f696e742c20616e642024455c696e204469765f7b737d5c6c65667428585c726967687429240a7375636820746861742024303c453c585f7b737d242028746865207365636f6e6420696e657175616c69747920697320616e20656d70747920636f6e646974696f6e0a6966202464696d5c20533d3024292e205468656e2077652068617665200a5c5b0a5c6f6d6567615f7b452f6b5c6c65667428735c7269676874297d5c617070726f785c6c656674285c6d61746863616c7b4f7d5f7b587d5c6c65667428455c7269676874295c6f74696d65735c6f6d6567615f7b582f537d5c7269676874297c5f7b457d2c0a5c5d0a20616e6420696620244b5f7b582f537d2420697320612063616e6f6e6963616c2064697669736f722c200a0a5c5b0a705f7b617d5c6c65667428455c7269676874293d312b5c667261637b317d7b327d5c6c65667428455e7b327d2b4b5f7b582f537d5c63646f7420455c7269676874292e0a5c5d0a0a5c656e647b7468656f72656d7d0a5c6d6564736b69707b7d0a0a5c626567696e7b7468656f72656d7d0a5c636974655b4949492e372e375d7b4861727d204c65742024582420626520612070726f6a65637469766520436f68656e2d4d616361756c617920736368656d650a6f66206571756964696d656e73696f6e20246e24206f7665722061206669656c6420246b242e205468656e20666f7220616e79206c6f63616c6c7920667265650a736865616620245c6d6174687363727b467d24206f6e2024582420746865726520617265206e61747572616c2069736f6d6f72706869736d73200a5c5b0a485e7b697d5c6c65667428582c5c6d6174687363727b467d5c7269676874295c617070726f7820485e7b6e2d697d5c6c65667428582c5c6d6174687363727b467d5e7b5c7665657d5c6f74696d65735c6f6d6567615f7b587d5e7b5c636972637d5c7269676874295e7b5c7072696d657d0a5c5d0a20776865726520245c6f6d6567615f7b587d5e7b5c636972637d2420697320746865206475616c697a696e67207368656166206f6e202458242e200a5c656e647b7468656f72656d7d0a5c6d6564736b69707b7d0a0a5c626567696e7b7468656f72656d7d0a5c636974655b436f7220392e5d7b42437d204c6574202458242062652061206e6f6e73696e67756c61722070726f6a6563746976652076617269657479206f660a64696d656e73696f6e20246e24206f76657220612070657266656374206669656c6420246b242e205468656e20245c6f6d6567615f7b587d5e7b5c636972637d3d5c4f6d6567615f7b587d5e7b6e7d242e200a5c656e647b7468656f72656d7d0a5c6d6564736b69707b7d0a0a0a46696e616c6c79206e6f746520746861742074686520666f6c6c6f77696e67205269656d616e6e2d526f636820666f726d756c6120686f6c6473206f76657220706572666563740a6669656c64732e205468652070726f6f66206973207468652073616d6520617320746865206f6e6520696e205c636974657b4861727d204368617074657220352c0a62757420746865206669656c64206973206e6f206c6f6e67657220617373756d656420616c67656272616963616c6c7920636c6f7365642e20416c6c20746865206e65636573736172790a726573756c747320617265207374617465642061626f76652e200a5c626567696e7b7468656f72656d7d0a5c6c6162656c7b5269656d616e6e526f63687d204c65742024442420626520612064697669736f72206f6e2061206e6f6e73696e67756c61722c2070726f6a6563746976650a7375726661636520245824206f76657220612070657266656374206669656c6420246b2e24205468656e200a5c5b0a5c6368695c6c656674285c6d61746863616c7b4f7d5f7b587d5c6c65667428445c7269676874295c7269676874293d5c667261637b317d7b327d442e5c6c65667428442d4b5c7269676874292b5c6368695c6c656674285c6d61746863616c7b4f7d5f7b587d5c7269676874292e0a5c5d0a5c656e647b7468656f72656d7d0a0a0a255c696e636c7564657b63686170337d202546696e6974652047656e65726174696f6e20726573756c7473206f766572204456522e0a0a5c636861707465727b46696e6974652047656e65726174696f6e20526573756c74737d5c6c6162656c7b63686170337d0a5c6669786368617074657268656164696e6720252055736520746869732069662073656374696f6e20666f6c6c6f7773206368617074657220696d6d6564696174656c790a5c73656374696f6e7b46696e6974652047656e65726174696f6e20284269672043617365297d0a5c626567696e7b636f726f6c6c6172797d0a5c6c6162656c7b636f723a42696746696e69746547656e65726174696f6e7d20250a536974756174696f6e2061732061626f76652c20616674657220706f737369626c7920657874656e64696e67202452242c207468652063616e6f6e6963616c2072696e670a24525c6c656674284b5f7b587d2b5c44656c74615c726967687429242069732066696e6974656c792067656e657261746564206f766572202452242e205c656e647b636f726f6c6c6172797d0a5c626567696e7b70726f6f667d0a4279205c636974657b54616e7d2c20746865726520697320246d5c676730242c20737563682074686174200a5c5b0a5c6269676f706c75735f7b6d5c6765307d485e7b307d5c6c656674286d6c5c6c656674284b5f7b585f7b6b7d7d2b5c44656c74615f7b6b7d5c7269676874295c7269676874290a5c5d0a69732067656e65726174656420696e20646567726565202431242c20736f20746861742074686572652069732061207375726a656374696f6e200a5c5b0a535e7b6c7d485e7b307d5c6c656674286d5c6c656674284b5f7b585f7b6b7d7d2b5c44656c74615f7b6b7d5c7269676874295c7269676874295c74776f6865616472696768746172726f7720485e7b307d5c6c656674286d6c5c6c656674284b5f7b585f7b6b7d7d2b5c44656c74615f7b6b7d5c7269676874295c7269676874292e0a5c5d0a200a20436f6e73696465722074686520666f6c6c6f77696e67206469616772616d3a200a5c5b0a5c78796d61747269787b535e7b6c7d485e7b307d5c6c656674286d5c6c656674284b5f7b587d2b5c44656c74615c7269676874292f525c7269676874295c61725b725d5e7b5c616c7068617d5c61725b645d202620485e7b307d5c6c656674286d6c5c6c656674284b5f7b587d2b5c44656c74615c7269676874292f525c7269676874295c61725b645d5c5c0a535e7b6c7d485e7b307d5c6c656674286d5c6c656674284b5f7b585f7b6b7d7d2b5c44656c74615f7b6b7d5c7269676874295c7269676874295c61725b725d5e7b5c74776f6865616472696768746172726f777d202620485e7b307d5c6c656674286d6c5c6c656674284b5f7b585f7b6b7d7d2b5c44656c74615f7b6b7d5c7269676874295c7269676874290a7d0a5c5d0a54686520766572746963616c206d61707320617265207375726a656374697665206279205468656f72656d205c7265667b44494f507d2028616e64206170706c79696e670a4e616b6179616d612773206c656d6d6120616e6420636f686f6d6f6c6f677920616e642062617365206368616e676520746f2070756c6c206261636b207468652067656e657261746f72730a6f662074686520246b242d6d6f64756c6573292e204e6f77206170706c79696e67207468652076657273696f6e206f66204e616b6179616d612773204c656d6d610a676976656e20696e205c636974655b4368617074657220352e335d7b47487d2c207375726a6563746976697479206f662074686520626f74746f6d206d617020696d706c6965730a7375726a6563746976697479206f6620245c616c706861242c20616e6420746875732024525c6c656674284b5f7b587d2b5c44656c74615c726967687429240a69732066696e6974656c792067656e657261746564206f7665722024522e24205c656e647b70726f6f667d0a5c626567696e7b70726f706f736974696f6e7d0a5c6c6162656c7b70726f703a47656e6572616c697a656447656e65726174696f6e4f6e537572666163657d5c636974657b487d20250a7b7d204c65742024582420626520612074776f2064696d656e73696f6e616c20245c6d61746862627b517d242d666163746f7269616c206e6f726d616c20766172696574790a6f76657220616e20616c67656272616963616c6c7920636c6f736564206669656c64206f662063686172616374657269737469632024703e30242e204c657420245c6c6566745c7b205c6c65667428582c5c44656c74615f7b697d5c7269676874295c72696768745c7d205f7b695c696e5c6c6566745c7b20312c2e2e2e2c6b5c72696768745c7d207d240a62652061206269672c206c6f6720736d6f6f74682c20245c6d61746862627b517d242d43617274696572204b4c54207061697220666f722065616368202469240a616e642073756368207468617420244b5f7b587d2b5c73756d5c44656c74615f7b697d24206861732073696d706c65206e6f726d616c2063726f7373696e67730a737570706f72742e205468656e207468652072696e67200a5c5b0a525c6c65667428582c4b5f7b587d2b5c44656c74615f7b317d2c2e2e2e2c4b5f7b587d2b5c44656c74615f7b6b7d5c7269676874290a5c5d0a2069732066696e6974656c792067656e6572617465642e205c656e647b70726f706f736974696f6e7d0a5c626567696e7b636f726f6c6c6172797d0a5c6c6162656c7b47656e6572616c697a656446696e69746547656e65726174696f6e7d4c657420245c6c6566745c7b205c6c65667428582c5c44656c74615f7b697d5c7269676874295c72696768745c7d205f7b695c696e5c6c6566745c7b20312c2e2e2e2c6e5c72696768745c7d207d240a6265206120636f6c6c656374696f6e206f66206b6c742070616972206f662072656c61746976652064696d656e73696f6e20243224206f7665722061204456520a245224207769746820706572666563742072657369647565206669656c6420246b24206f662063686172616374657269737469632024703e302420616e640a70657266656374206672616374696f6e206669656c6420244b242e20417373756d65207468617420244b5f7b587d2b5c44656c74615f7b697d24206973206269672c0a245c6d61746862627b517d242d4361727469657220616e642073756368207468617420244b5f7b587d2b5c73756d5c44656c74615f7b697d24206861732073696d706c650a6e6f726d616c2063726f7373696e677320737570706f72742e205468656e207468652072696e67200a5c5b0a525c6c65667428582c4b5f7b587d2b5c44656c74615f7b317d2c2e2e2e2c4b5f7b587d2b5c44656c74615f7b6e7d5c7269676874290a5c5d0a2069732066696e6974656c792067656e657261746564206f766572202452242e205c656e647b636f726f6c6c6172797d0a5c626567696e7b70726f6f667d0a41667465722062617365206368616e67652c207765206d617920617373756d6520746861742024522420697320636f6d706c65746520616e6420246b2420697320616c67656272616963616c6c7920636c6f7365642e20432e662e207468652070726f6f66206f66205c636974655b322e31315d7b435a7d2c20697420737566666963657320746f2070726f766520746861742069662024473d5c73756d5f7b693d317d5e7b6b7d6d5f7b697d5c6c65667428615c6c656674284b5f7b587d2b5c44656c74615f7b697d5c7269676874295c726967687429242c0a776974682066697865642024615c696e5c6d61746862627b4e7d242c20246d5f7b317d2c2e2e2e2c6d5f7b6b7d5c6765302c2420616e6420246c5c696e5c6c6566745c7b20312c2e2e2e2c6c5c72696768745c7d20240a7468656e2074686572652065786973747320246d5f7b6c7d24207375636820746861742074686520666f6c6c6f77696e67206d61707320617265207375726a6563746976650a5c5b0a485e7b307d5c6c65667428582c5c6d61746863616c7b4f7d5f7b587d5c6c65667428472d615c6c656674284b5f7b587d2b5c44656c74615f7b697d5c7269676874295c7269676874295c7269676874295c6f74696d657320485e7b307d5c6c65667428582c5c6d61746863616c7b4f7d5f7b587d5c6c65667428615c6c656674284b5f7b587d2b5c44656c74615f7b697d5c7269676874295c7269676874295c7269676874290a5c5d0a5c5b0a5c746f20485e7b307d5c6c65667428582c5c6d61746863616c7b4f7d5f7b587d5c6c65667428475c7269676874295c7269676874292e0a5c5d0a4279206170706c79696e67204e616b6179616d612773204c656d6d6120616e64205468656f72656d205c7265667b44494f507d20617320696e207468652070726f6f660a6f66205468656f72656d205c7265667b636f723a42696746696e69746547656e65726174696f6e7d2c20697420737566666963657320746f2073686f77207468650a7375726a6563746976697479206f6e207468652063656e7472616c20666962657220776869636820686f6c64732062792070726f706f736974696f6e205c7265667b70726f703a47656e6572616c697a656447656e65726174696f6e4f6e537572666163657d2e0a5c656e647b70726f6f667d0a0a5c73656374696f6e7b46696e6974656e657373206f66204d6f64656c7320466f722053757266616365737d0a0a54686520666f6c6c6f77696e67207468656f72656d206973206e6f7420616e797468696e67206e65772c20627574206973207374617465642068657265206173207468650a6d696e696d616c206d6f64656c2070726f6772616d206973206e6f7420757375616c6c792072756e2077697468207363616c696e67206f6e206120737572666163650a28696e205c636974657b4b4b39342c54616e7d2c207465726d696e6174696f6e2069732070726f76656e20776974686f7574207363616c696e67292e200a5c626567696e7b7468656f72656d7d0a5c6c6162656c7b46696e6974656e6573734f664d6f64656c7353757266616365737d4c65742024582420626520612074776f2064696d656e73696f6e616c206e6f726d616c0a76617269657479206f76657220612070657266656374206669656c64206f662063686172616374657269737469632024703e30242e204c657420245c6c65667428582c5c44656c74615c726967687429240a62652061206c6f6720736d6f6f7468204b4c5420706169722077697468206120676f6f64206d696e696d616c206d6f64656c202877686963682065786973747320666f720a6e6f6e2d6e65676174697665204b6f64616972612064696d656e73696f6e73206279205c636974657b54616e7d2920616e64206c65742024412420626520616e0a616d706c6520245c6d61746862627b517d242d64697669736f72206f6e202458242e205468656e2074686572652065786973747320616e20245c657073696c6f6e3e30240a73756368207468617420746865206d696e696d616c206d6f64656c732028616e6420746865206f7574707574206f6620746865206d696e696d616c206d6f64656c0a70726f6772616d2077697468207363616c696e672920666f7220245c6c65667428582c5c44656c74612b74415c726967687429242061726520616c6c2069736f6d6f72706869630a666f722024745c696e5c6c6566745b302c5c657073696c6f6e5c72696768745d242e205c656e647b7468656f72656d7d0a5c626567696e7b70726f6f667d0a28457373656e7469616c6c792073616d65206173205c636974655b32362c32375d7b4c61697d20616e642073696d706c69666965732064756520746f207468650a6661637420746861742061206269726174696f6e616c2069736f6d6f72706869736d20696e20636f64696d656e73696f6e20243124206f6e206120737572666163650a676976657320616e2069736f6d6f72706869736d292e204c657420245c7068693a5c6c65667428582c5c44656c74615c7269676874295c746f5c6c65667428585f7b677d2c5c44656c74615f7b677d5c726967687429240a6265206120676f6f64206d696e696d616c206d6f64656c2e204c65742024663a585f7b677d5c746f205a3d50726f6a5c20525c6c656674284b5f7b585f7b677d7d2b5c44656c74615f7b677d5c726967687429240a74686520636f6e7472616374696f6e20287768696368206578697374732062792073696e636520244b5f7b585f7b677d7d2b5c44656c74615f7b677d242069730a6e65662c2068656e63652073656d69616d706c65206279205c636974657b54616e7d292e205468656e20245c7068692420636f6e747261637473207468652064697669736f7269616c0a70617274206f6620245c6d61746862627b427d5c6c656674284b5f7b587d2b5c44656c74615c726967687429242e205069636b2024745f7b307d3e302420737563680a7468617420245c6c65667428585f7b677d2c5c44656c74615f7b677d2b745f7b307d5c7068695f7b2a7d415c7269676874293d5c6c65667428585f7b677d2c5c44656c74615f7b677d2b745f7b307d415f7b677d5c726967687429240a6973206b6c7420776974682024412420616d706c65206f6e2024582420286e6f74652024415f7b677d24206973206269672c206e6f7420696e2067656e6572616c0a6e6566292e20466f722024482420616d706c65206f6e2024585f7b677d242c206c657420245c7068693a585f7b677d5c746f20585e7b5c7072696d657d240a626520746865206d696e696d616c206d6f64656c2070726f6772616d2077697468207363616c696e672c207768696368207465726d696e617465732028616761696e0a6279205c636974657b54616e7d292c20616e642067697665732061206d696e696d616c206d6f64656c206f6620245c6c65667428585f7b677d2c5c44656c74615f7b677d2b745f7b307d5c44656c74615f7b677d5c726967687429240a6f76657220245a242e20466f7220616e7920637572766520636f6e74726163746564206279202466242c20245c6c656674284b5f7b585f7b677d7d2b5c44656c74615f7b677d5c7269676874292e433d30242c0a68656e636520244b5f7b585e7b5c7072696d657d7d2b5c7073695f7b2a7d5c44656c74615f7b677d3d4b5f7b585e7b5c7072696d657d7d2b5c44656c74615e7b5c7072696d657d5c65717569765f7b5a7d30242e0a546875732063757276657320636f6e7472616374656420627920245c707369242068617665207472697669616c20696e74657273656374696f6e207769746820244b5f7b585f7b677d7d2b5c44656c74615f7b677d242c0a616e6420696e74657273656374206e656761746976656c7920776974682024415f7b677d242e2054687573206368616e67696e672024742420646f6573206e6f740a6166666563742077686963682063757276657320696e74657273656374206e656761746976656c79207769746820244b5f7b585f7b677d7d2b5c44656c74615f7b677d2b74415f7b677d242c0a616e6420736f2024585e7b5c7072696d657d242069732061206d696e696d616c206d6f64656c206f6620245c6c65667428585f7b677d2c5c44656c74615f7b677d2b74415f7b677d5c726967687429240a666f7220616c6c2024745c696e28302c745f7b307d5d2e24200a0a4e6f7720245c44656c74615e7b5c7072696d657d2b745f7b307d415e7b5c7072696d657d2420776974682024415e7b5c7072696d657d3d5c7073695f7b2a7d415f7b677d240a287768696368206973206269672920696d706c69657320627920746865205468656f72656d205c7265667b436f6e655468656f72656d7d2c20746861742074686572650a6578697374206f6e6c792066696e6974656c79206d616e7920244b5f7b585e7b5c7072696d657d7d2b5c44656c74615e7b5c7072696d657d2b745f7b307d415e7b5c7072696d657d240a6e656761746976652065787472656d616c207261797320696e20245c6f7665726c696e657b4e457d5c6c65667428585e7b5c7072696d657d5c7269676874292e240a54686573652061726520616c6c206e65636573736172696c79206a75737420696e74657273656374696e672024415e7b5c7072696d657d24206e656761746976656c792c0a736f2064656372656173696e672024745f7b307d242c206576656e7475616c6c792077652067657420746f206120706f696e74207768657265206120667572746865720a646563726561736520696e2024745f7b307d2420646f65736e2774206368616e676520746865206e756d626572206f66206e656761746976652065787472656d616c0a726179732e205069636b207375636820612024745f7b307d2420286e6f7720776520617265206f6e2024585e7b5c7072696d657d242c206e6f74206f7665720a245a24292e20416761696e20736872696e6b696e672024745f7b307d242c20737570706f7365207468617420245c7073695c636972635c706869242069730a64697363726570616e6379206e6567617469766520772772277420245c6c65667428582c5c44656c74612b74415c7269676874292420666f7220616c6c202474240a696e207468652068616c66206f70656e20696e74657276616c202428302c745f7b307d5d2e24204e6f7465207468617420245c6d61746862627b427d5c6c656674284b5f7b587d2b5c44656c74612b745f7b307d415c7269676874295c7375627365745c6d61746862627b427d5c6c656674284b5f7b587d2b5c44656c74615c726967687429242c0a736f20245c7073692420636f6e747261637473206f6e6c792074686520637572766573206e6f7420636f6e7472616374656420627920245c706869242e20546875730a245c7073695c636972635c706869242069732064697363726570616e6379206e65676174697665206f6e2074686520636c6f73656420696e74657276616c20245c6c6566745b302c745f7b307d5c72696768745d242c0a736f2024585e7b5c7072696d657d242069732061206d696e696d616c206d6f64656c206f6620245c6c65667428582c5c44656c74612b74415c726967687429240a666f7220616c6c2024745c696e5c6c6566745b302c745f7b307d5c72696768745d242e205468757320245c6d61746862627b427d5c6c656674284b5f7b587d2b5c44656c74612b74415c726967687429240a686173207468652073616d652064697669736f7269616c20636f6d706f6e656e747320666f7220616c6c2024745c696e5c6c6566745b302c745f7b307d5c72696768745d242e0a48656e63652c20616e792074776f206d696e696d616c206d6f64656c7320666f7220646966666572656e742024745c696e5c6c6566745b302c745f7b307d5c72696768745d240a617265206269726174696f6e616c20616e642069736f6d6f727068696320696e20636f64696d656e73696f6e206f6e652c20616e642061732074686520746f74616c0a64696d656e73696f6e2069732074776f2c20746865792061726520746875732069736f6d6f72706869632e200a5c656e647b70726f6f667d0a0a0a5c73656374696f6e7b4b4c542056616e697368696e677d0a0a496e20746869732073656374696f6e0a5c626567696e7b636f6d6d656e747d546869732073656374696f6e206f726967696e6174657320696e206d792041756775737420706f737473206f6e206d7920626c6f672064697669736962696c6974792e776f726470726573732e636f6d20224d6978656420436861726163746572697374696320496e76617269616e6365206f6620506c75726967656e65726120616e642046696e6974652047656e65726174696f6e20666f722052656c61746976652044696d656e73696f6e2032225c656e647b636f6d6d656e747d0a492073747564792074686520636f6d7075746162696c697479206f662074686520636f6e7374616e7420676976656e20696e2054616e616b6127732022782d6d6574686f64222076616e697368696e670a7468656f72656d205c636974655b322e31315d7b54616e327d2e2054686520706f696e7420697320746f206861766520736f6d65206d6178696d756d20636f6e7374616e7420666f722074686520656e746972652066616d696c79207768656e20776520676c6f62616c697a65205468656f72656d205c7265667b4269675465726d696e616c4361736552756e6e696e674d4d507d2e200a46697273742061207468656f72656d206f6620546572616b6177613a0a5c626567696e7b7468656f72656d7d0a5c636974657b5465727d250a5c6c6162656c7b546572616b617761735468656f72656d7d204c657420245824206265206120736d6f6f74682070726f6a65637469766520737572666163650a6f76657220616e20616c67656272616963616c6c7920636c6f736564206669656c64206f662063686172616374657269737469632024703e302420616e64206c65740a24442420626520612062696720616e64206e656620436172746965722064697669736f72206f6e202458242e20417373756d65207468617420656974686572200a0a28312920245c6b617070615c6c65667428585c7269676874295c6e6571322420616e6420245824206973206e6f742071756173692d656c6c697074696320776974680a245c6b617070615c6c65667428585c7269676874293d31243b206f720a0a28322920245824206973206f662067656e6572616c20747970652077697468200a0a24705c6765332420616e6420245c6c65667428445e7b327d5c7269676874293e766f6c5c6c65667428585c72696768742924206f720a0a24703d322420616e6420245c6c65667428445e7b327d5c7269676874293e6d61785c6c6566745c7b20766f6c5c6c65667428585c7269676874292c766f6c5c6c65667428585c7269676874292d335c6368695c6c656674285c6d61746863616c7b4f7d5f7b587d5c7269676874292b325c72696768745c7d202e24200a0a5468656e200a5c5b0a485e7b697d5c6c65667428582c5c6d61746863616c7b4f7d5f7b587d5c6c656674284b5f7b587d2b445c7269676874295c7269676874293d300a5c5d0a20666f7220616c6c2024693e30242e200a5c656e647b7468656f72656d7d0a526563616c6c2074686520666f6c6c6f77696e6720636f766572696e67204c656d6d613a0a5c626567696e7b6c656d6d617d5c636974655b5468656f72656d20312e315d7b4b4d4d7d0a7b7d205c6c6162656c7b436f766572696e674c656d6d617d4c65742024582420626520616e20246e242d64696d656e73696f6e616c20736d6f6f746820766172696574792e0a4c657420244424206265206120245c6d61746862627b517d242d64697669736f72207375636820746861742074686520737570706f7274206f6620746865206672616374696f6e616c0a7061727420245c6c6566745c7b20445c72696768745c7d20242069732073696d706c65206e6f726d616c2063726f7373696e672e204d6f72656f7665722c20737570706f73650a746861742c20666f7220746865207072696d65206465636f6d706f736974696f6e20245c6c6566745c7b20445c72696768745c7d203d5c73756d5f7b695c696e20497d5c667261637b625e7b5c6c65667428695c7269676874297d7d7b615e7b5c6c65667428695c7269676874297d7d445e7b5c6c65667428695c7269676874297d2c240a6e6f20696e7465676572732024615e7b5c6c65667428695c7269676874297d242061726520646976697369626c65206279202470242e205468656e2074686572650a65786973747320612066696e697465207375726a656374697665206d6f72706869736d20245c67616d6d613a595c746f2058242066726f6d206120736d6f6f74680a766172696574792024592420776974682074686520666f6c6c6f77696e672070726f706572746965733a0a0a28312920546865206669656c6420657874656e73696f6e20244b5c6c65667428595c7269676874292f4b5c6c65667428585c7269676874292420697320612047616c6f69730a657874656e73696f6e2e200a0a28322920245c67616d6d615e7b2a7d4424206973206120245c6d61746862627b5a7d242d64697669736f7220286974207365656d7320746865206465677265650a6f662074686520657874656e73696f6e20697320616e20246d2420636c656172696e67207468652064656e6f6d696e61746f7273206f66207468652024445e7b5c6c65667428695c7269676874297d242e290a0a28332920245c6d61746863616c7b4f7d5f7b587d5c6c656674284b5f7b587d2b5c756c636f726e657220445c7572636f726e65725c7269676874295c617070726f785c6c656674285c67616d6d615f7b2a7d5c6d61746863616c7b4f7d5f7b597d5c6c656674284b5f7b597d2b5c67616d6d615e7b2a7d445c7269676874295c7269676874295e7b477d2c240a776865726520244724206973207468652047616c6f69732067726f7570206f6620244b5c6c65667428595c7269676874292f4b5c6c65667428585c7269676874292e24200a0a2834292049662024445e7b5c7072696d657d24206973206120245c6d61746862627b517d242d64697669736f722073756368207468617420245c6c6566745c7b20445e7b5c7072696d657d5c72696768745c7d203d5c6c6566745c7b20445c72696768745c7d202c240a7468656e20245c67616d6d615e7b2a7d445e7b5c7072696d657d24206973206120245c6d61746862627b5a7d242d64697669736f722c20616e6420245c6d61746863616c7b4f7d5f7b587d5c6c656674284b5f7b587d2b5c756c636f726e657220445e7b5c7072696d657d5c7572636f726e65725c7269676874295c617070726f785c6c656674285c67616d6d615f7b2a7d5c6d61746863616c7b4f7d5f7b597d5c6c656674284b5f7b597d2b5c67616d6d615e7b2a7d445e7b5c7072696d657d5c7269676874295c7269676874295e7b477d2e24205c656e647b6c656d6d617d0a5c626567696e7b72656d61726b7d0a5c6c6162656c7b4b4d4d50726f6f667d0a5365766572616c2061737065637473206f66207468652070726f6f66206f66207468652061626f7665204c656d6d612077696c6c206265207573656420696e207468652070726f6f66206f662074686520657870616e6465642076657273696f6e206f66205468656f72656d205c7265667b4566666563746976655765616b4b56567d2e0a5c626567696e7b6974656d697a657d0a5c6974656d20244b5f593d205c7461755e2a284b5f5829202b20286d2d31295c6c656674285c73756d285c7461755e2a5c47616d6d615f69295f7b7265647d202b205c73756d285c7461755e2a20485f6b5e7b2869297d295f7b7265647d295c726967687429240a5c6974656d20245c7461755e2a205c47616d6d615f69203d206d5c6c65667428285c7461755e2a205c47616d6d615f6920295f7b7265647d205c72696768742929240a5c656e647b6974656d697a657d0a5c656e647b72656d61726b7d0a4170706c79696e67205468656f72656d205c7265667b546572616b617761735468656f72656d7d20616e64204c656d6d61205c7265667b436f766572696e674c656d6d617d20746f2054616e616b6127732070726f6f662067697665732074686520666f6c6c6f77696e673a200a5c626567696e7b7468656f72656d7d205c636974655b322e365d7b54616e327d205c6c6162656c7b4566666563746976655765616b4b56567d4c657420245824206265206120736d6f6f74682070726f6a6563746976652073757266616365206f76657220616e0a616c67656272616963616c6c7920636c6f736564206669656c64206f662063686172616374657269737469632024705c676530242e204c657420244e242062650a61206e656620616e642062696720245c6d61746862627b527d242d6361727469657220616e64202442242061206e656620616e642062696720245c6d61746862627b517d242d64697669736f720a77686f7365206672616374696f6e616c20706172742069732073696d706c65206e6f726d616c2063726f7373696e672c2077686f7365206672616374696f6e616c0a7061727420686173206e6f2064656e6f6d696e61746f727320646976697369626c65206279207468652063686172616374657269737469632e205468656e2074686572650a65786973747320616e202472242c20636f6d70757461626c6520696e207465726d73206f662074686520696e74657273656374696f6e206e756d62657273206f660a74686520636f6d706f6e656e7473206f662024422c4e242c244b5f7b587d242c20616e6420616e79206f6e6520666978656420616d706c652064697669736f7220244124206f6e20245824205c666f6f746e6f74657b496e2070726163746963652c20492077696c6c206170706c7920746869732073746174656d656e7420696e20612066616d696c792077686572652074686520616d706c652064697669736f722024412420686173207468652073616d6520696e74657273656374696f6e206e756d62657273206f6e20616c6c20746865206669626572737d20737563682074686174200a5c5b0a485e7b697d5c6c65667428582c5c6d61746863616c7b4f7d5f7b587d5c6c656674284b5f7b587d2b5c756c636f726e657220425c7572636f726e65722b724e2b4e5e7b5c7072696d657d5c7269676874295c7269676874293d300a5c5d0a20666f722065766572792024693e30242c20616e64206576657279206e656620245c6d61746862627b527d242d4361727469657220245c6d61746862627b527d242d64697669736f720a244e5e7b5c7072696d657d24207375636820746861742024724e2b4e5e7b5c7072696d657d24206973206120245c6d61746862627b5a7d242d64697669736f722e205c656e647b7468656f72656d7d0a5c626567696e7b70726f6f667d0a7b7d20284120736c696768746c7920646966666572656e742070726f6f66207468616e20746865206369746564205468656f72656d292e20546865206672616374696f6e616c0a70617274206f662024422b724e2b4e5e7b5c7072696d657d2420697320657175616c20746f20746865206672616374696f6e2070617274206f6620244224207768656e0a24724e2b4e5e7b5c7072696d657d24206973206120245c6d61746862627b5a7d242d64697669736f722e2054687573207765206170706c79204c656d6d61205c7265667b436f766572696e674c656d6d617d200a2020746f206f627461696e20612064656772656520246d2420636f76657220245c67616d6d613a595c746f2058242028696e646570656e64656e74206f66202472240a616e6420244e5e7b5c7072696d657d242920776865726520245924206973206120736d6f6f746820737572666163652e205468656e200a5c5b0a485e7b317d5c6c656674284b5f7b587d2b5c756c636f726e657220425c7572636f726e65722b724e2b4e5e7b5c7072696d657d5c7269676874290a5c5d0a5c5b0a3d485e7b317d5c6c656674284b5f7b587d2b5c756c636f726e657220422b724e2b4e5e7b5c7072696d657d5c7572636f726e65725c7269676874290a5c5d0a5c5b0a3d485e7b317d5c6c656674285c67616d6d615f7b2a7d5c6c656674284b5f7b597d2b5c67616d6d615e7b2a7d5c6c65667428422b724e2b4e5e7b5c7072696d657d5c7269676874295c7269676874295c7269676874295e7b477d0a5c5d0a5c5b0a3d485e7b317d5c6c65667428592c4b5f7b597d2b5c67616d6d615e7b2a7d422b725c67616d6d615e7b2a7d4e2b5c67616d6d615e7b2a7d4e5e7b5c7072696d657d5c7269676874295e7b477d2e0a5c5d0a20746865206c617374207465726d2076616e697368696e6720627920546572616b6177612773205468656f72656d205c7265667b546572616b617761735468656f72656d7d20616e6420736f6d652024725c6767302c240a6173206279207468652070726f6f66206f66205c636974655b312d312d315d7b4b4d4d7d2c2074686520636f7665722063616e206265206d6164652067656e6572616c0a747970652e200a0a4e6f77204920636c61696d20746861742024722420676976656e2061626f766520646570656e6473206f6e6c79206f6e2074686520696e74657273656374696f6e73206f6620244b5f582c422420616e64207468652064656772656573206f6620636f6d706f6e656e7473206f660a24423d5c73756d20615f7b697d5c47616d6d615f7b697d2e242049742077696c6c207375666669636520746f2073686f772074686174202459242069732067656e6572616c0a7479706520616e64207468617420245c6c65667428422b724e5c7269676874295e7b327d3e4b5f7b597d5e7b327d242c20736f2074686174205468656f72656d0a5c7265667b546572616b617761735468656f72656d7d2063616e206265206170706c6965642e0a0a4173202442242069732062696720616e64206e65662c2074686572652065786973747320616e20200a6566666563746976652064697669736f72202444242073756368207468617420666f7220616c6c20246a5c67672030242c202442202d205c667261637b317d7b6a7d2044205c657175697620415f6a242c20776974682024415f6a2420616d706c652e0a4170706c79696e67205c636974655b322e322e31352c20322e322e31395d7b4c617a7d202077652063616e206576656e20636f6d7075746520246a2420696e207465726d73206f662074686520696e74657273656374696f6e206e756d62657273206f662024412420616e64202442242073756368207468617420202444242069732062696720616e6420245c667261637b317d7b6a7d20422e44203e205c667261637b317d7b6a5e327d20445e32242e0a0a466f6c6c6f77696e67207468652070726f6f66206f66205c636974655b312d312d315d7b4b4d4d7d2c206c657420244d3d6b5f6a415f6a24206265200a7665727920616d706c65202877652063616e20636f6d7075746520246b5f6a2420627920205c636974657b5465722c44467d290a616e64206c657420246d5f6a242062652073756368207468617420246d5f6a240a636c65617273207468652064656e6f6d696e61746f7273206f662074686520636f6d706f6e656e7473206f662024422420616e642073756368207468617420246d5f6a204d2d5c47616d6d615f7b697d240a6973207665727920616d706c6520666f7220616c6c202469242028616761696e2077652063616e20636f6d70757465207375636820616e20246d5f6a24206279205c636974657b5465722c44467d3a0a696e207468652063617365207468617420245c47616d6d615f7b697d5e7b327d3c30242c207468656e20656e7375726520246b5f6a24206973206c6172676520656e6f7567680a736f207468617420246b5f6a20412e5c47616d6d615f7b697d3e2d5c47616d6d615f7b697d5e7b327d242c2074616b6520245c47616d6d615f7b697d5e7b5c7072696d657d3d5c47616d6d615f7b697d2b4d240a616e64206279205c636974657b5465722c2044467d2066696e642028636f6d70757461626c652920246d5e7b5c7072696d657d2420737563680a7468617420246d5e7b5c7072696d657d4d2d5c47616d6d615f7b697d5e7b5c7072696d657d3d6d5e7b5c7072696d655c7072696d657d4d2d5c47616d6d615f7b697d240a6973207665727920616d706c652e29205265706c61636520246d5f6a2420627920246d5e7b5c7072696d655c7072696d657d2420696620246d5e7b5c7072696d655c7072696d657d203e206d242c20616e64206c65742024485f7b697d5c696e5c6c6566747c6d5f6a204d2d5c47616d6d615f7b697d5c72696768747c240a666f7220616c6c2024695c202420287468757320245c667261637b317d7b6d5f6a207d5c6c656674285c47616d6d615f7b697d2b485f7b697d5c7269676874295c73696d204d240a6973207665727920616d706c65292e204170706c79696e672052656d61726b205c7265667b4b4d4d50726f6f667d207765207468656e20686176650a0a5c5b0a4b5f7b597d0a5c5d0a5c5b0a3d5c7461755e7b2a7d4b5f7b587d2b5c6c656674286d5f6a2d315c7269676874295c6c656674285c73756d5c6c656674285c7461755e7b2a7d5c47616d6d615f7b697d5c7269676874295f7b7265647d2b5c73756d5c6c656674285c7461755e7b2a7d485f7b6b7d5e7b5c6c65667428695c7269676874297d5c7269676874295f7b7265647d5c7269676874290a5c5d0a5c5b0a3d5c7461755e7b2a7d4b5f7b587d2b5c7461755e7b2a7d5c6c656674285c73756d5f7b697d5c6c656674285c47616d6d615f7b697d2b485f7b697d2d5c667261637b317d7b6d5f6a7d5c6c656674285c47616d6d615f7b697d2b485f7b697d5c7269676874295c7269676874295c7269676874290a5c5d0a7b7d200a5c5b0a3d5c7461755e7b2a7d4b5f7b587d2b5c7461755e7b2a7d5c6c656674285c6c656674286d5f6a2d315c7269676874294d5c7269676874290a5c5d0a20736f2074686174202459242069732067656e6572616c20747970652c20616e64200a200a205c5b0a20766f6c5c6c65667428595c7269676874293d204b5f595e32203d200a20284b5f58202b20286d5f6a202d2031296b5f6a2041295e320a205c5d0a205c5b0a203d5c6c6566745b5c6c656674285c6c656674286d5f6a2b315c7269676874296b2b315c726967687429415c72696768745d5e7b327d0a205c5d0a736f2c20746f207361746973667920746865206879706f746865736973206f66205468656f72656d205c7265667b546572616b617761735468656f72656d7d2c20697420737566666963657320746f207069636b20247224206c6172676520656e6f7567682074686174200a5c5b0a5c6c65667428422b724e5c7269676874295e7b327d202d2032203e20284b5f58202b20286d5f6a202d2031296b5f6a20415f6a295e32200a5c5d0a6f722c20627920636f6e737472756374696f6e206f66202441242c20737563682074686174200a5c5b0a5c6c65667428422b724e5c7269676874295e7b327d202d2032203e20284b5f58202b20286d5f6a202d2031296b5f6a2042295e32200a5c5d0a5c656e647b70726f6f667d0a4e6f77204920726573746174652054616e616b6127732076616e697368696e67207468656f72656d2c20776974682061206e6f7465206f6e2074686520636f6d7075746162696c6974790a696e206365727461696e2063697263756d7374616e6365732e200a5c626567696e7b7468656f72656d7d0a5c6c6162656c7b74686d3a4566666563746976654b565653757266616365737d2028456666656374697665204b4c54204b6177616d6174612d566965687765670a56616e697368696e6720666f72206e6f726d616c20737572666163657320632e662e205c636974655b322e31315d7b54616e327d29204c657420245c6c65667428582c5c44656c74615c726967687429240a62652061206e6f726d616c2070726f6a656374697665206b6c742073757266616365206f76657220616e20616c67656272616963616c6c7920636c6f736564206669656c640a6f662063686172616374657269737469632024705c676532242c20776865726520244b5f7b587d2b5c44656c74612420697320616e2065666665637469766520245c6d61746862627b527d242d64697669736f722e0a4c657420244e242062652061206e656620616e642062696720245c6d61746862627b527d242d6361727469657220245c6d61746862627b527d242d64697669736f722e0a4c657420244424206265206120245c6d61746862627b517d242d4361727469657220245c6d61746862627b5a7d242d64697669736f72207375636820746861740a24442d5c6c656674284b5f7b587d2d5c44656c74615c72696768742924206973206e656620616e64206269672e205468656e2074686572652065786973747320616e0a24725f7b307d24205c666f6f746e6f74657b4279205468656f72656d205c7265667b4566666563746976655765616b4b56567d2c2065786365707420666f7220696e20706f737369626c7920612066696e697465206e756d626572206f66206368617261637465726973746963732024703e30242c2024725f302420697320636f6d70757461626c6520696e207465726d73206f660a746865206e756d626572206f6620636f6d706f6e656e747320245c44656c74612420616e6420696e207465726d73206f66207468652073656c6620696e74657273656374696f6e730a6f6620746865736520636f6d706f6e656e74732c20616e64207468656972206d756c7469706c696369746965732e204f74686572776973652054616e616b6127730a6f726967696e616c2073746174656d656e74206769766573206a75737420746865206578697374656e6365206f6620616e2024725f302420646570656e64696e67206f6e6c79206f6e207468652072656c6576616e742064697669736f72732e20496e20616e7920636173652c206966207468652066616d696c792068617070656e7320746f206265206f76657220245c6d61746862627b5a7d24206f7220612073696d696c617220446564656b696e6420646f6d61696e2c207468656e20796f752063616e207573652054616e616b612773206f726967696e616c20636f6e7374616e7420666f72207468652066696e697465206e756d626572206f6620636861726163746572697374696373206469766964696e672064656e6f6d696e61746f7273206f662074686520626f756e646172792064697669736f727d20737563682074686174200a5c5b0a485e7b697d5c6c65667428582c5c6d61746863616c7b4f7d5f7b587d5c6c65667428442b724e2b4e5e7b5c7072696d657d5c7269676874295c7269676874293d300a5c5d0a20666f722065766572792024693e30242c20657665727920706f736974697665207265616c206e756d6265722024725c676520725f7b307d242c20616e642065766572790a6e656620245c6d61746862627b527d242d4361727469657220245c6d61746862627b527d242d64697669736f7220244e5e7b5c7072696d657d2420737563680a746861742024724e2b4e5e7b5c7072696d657d24206973206120436172746965722064697669736f722e205c656e647b7468656f72656d7d0a5c626567696e7b70726f6f667d0a54686520636f6d7075746162696c69747920666f6c6c6f777320656173696c792066726f6d205c636974655b322e31315d7b54616e327d2065786365707420746861740a5765616b204b6177616d61746120566965687765672056616e697368696e6720696e207468652070726f6f66206973207265706c61636564206279205468656f72656d0a5c7265667b4566666563746976655765616b4b56567d2e2053696e63652c20696e20746869732070617065722c20492063616e206170706c792074686973207468656f72656d0a7768656e2024582420697320736d6f6f746820616e6420245c6c6c636f726e65725c44656c74615c6c72636f726e65723d30242c2068657265206973207468650a70726f6f6620696e20746861742073696d706c6520636173653a200a5c5b0a485e7b317d5c6c65667428442b724e2b4e5e7b5c7072696d657d5c7269676874290a5c5d0a5c5b0a3d485e7b317d5c6c656674284b5f7b587d2b442d4b5f7b587d2d5c6c6c636f726e65725c44656c74615c6c72636f726e65722b724e2b4e5e7b5c7072696d657d5c7269676874290a5c5d0a5c5b0a3d485e7b317d5c6c656674284b5f7b587d2b442d4b5f7b587d2b5c756c636f726e65722d5c44656c74615c7572636f726e65722b724e2b4e5e7b5c7072696d657d5c7269676874290a5c5d0a5c5b0a3d485e7b317d5c6c656674284b5f7b587d2b5c756c636f726e657220442d4b5f7b587d2d5c44656c74615c7572636f726e65722b724e2b4e5e7b5c7072696d657d5c7269676874290a5c5d0a73696e63652077652063616e206d6f76652074686520696e74656772616c2064697669736f722024442d4b5f7b587d2420696e746f2074686520726f756e642075702e0a54686973206c617374207465726d2076616e6973686573206279205468656f72656d205c7265667b4566666563746976655765616b4b56567d2e205468652076616e697368696e670a6f662024485e7b327d2420666f6c6c6f777320656173696c79207573696e67205365727265204475616c6974792e204f7468657277697365206966202458240a6973206e6f726d616c2c206f6e652063616e206b65657020747261636b206f662074686520657874726120636f6d706f6e656e7473206f6620245c44656c7461240a6761696e656420696e20626c6f77696e672075702c20616e6420636f6d707574652066726f6d20746861742e0a5c656e647b70726f6f667d0a4e6f77206170706c79696e67207468652073616d652070726f6f6620617320696e2073656374696f6e205c7265667b44494f507d20287768657265207468652073616d652069730a70726f7665642062757420776974686f7574206120636f6d70757461626c6520636f6e7374616e74292c20776520686176652074686520666f6c6c6f77696e673a0a5c626567696e7b636f726f6c6c6172797d205c6c6162656c7b44494f50434f4d50555441424c457d250a4c657420245c6c65667428582c5c44656c74615c726967687429242062652061206b6c742070616972206f662072656c61746976652064696d656e73696f6e202432240a6f76657220612044565220245224207769746820706572666563742072657369647565206669656c6420246b24206f662063686172616374657269737469630a24703e302420616e642070657266656374206672616374696f6e206669656c6420244b242e20417373756d65207468617420244b5f7b587d2b5c44656c7461240a6973206269672c20245c6d61746862627b517d242d436172746965722c20616e642073696d706c65206e6f726d616c2063726f7373696e6773206f766572202452242e0a5468656e2c20746865726520657869737473206120636f6d70757461626c6520246d5f7b307d242028646570656e64696e67206f6e6c79206f6e2074686520696e74657273656374696f6e7320636f6d706f6e656e7473206f6620244b5f582420616e6420245c44656c74612420616e6420706f737369626c792074686520706963617264206e756d626572206f662024582429200a73756368207468617420666f7220246d5c67672030202c6d5c696e206d5f7b307d5c6d61746862627b5a7d5e7b2b7d24202c200a5c5b0a685e7b307d5c6c656674286d5c6c656674284b5f7b585f7b6b7d7d2b5c44656c74615f7b6b7d5c7269676874295c7269676874293d685e7b307d5c6c656674286d5c6c656674284b5f7b585f7b4b7d7d2b5c44656c74615f7b4b7d5c7269676874295c7269676874292e0a5c5d0a0a5c656e647b636f726f6c6c6172797d0a5c73656374696f6e7b47656e6572616c697a6174696f6e206f6620546572616b61776127732042617365706f696e742046726565205468656f72656d7d0a0a54686520676f616c206f6620746869732073656374696f6e200a5c626567696e7b636f6d6d656e747d546869732073656374696f6e206f726967696e6174656420696e206d79204465677265652773206e6f7465206174206d7920626c6f672064697669736962696c6974792e776f726470726573732e636f6d0a5c656e647b636f6d6d656e747d0a20697320746f20676976652061207370656369616c697a65642076657273696f6e206f66205468656f72656d0a322e342066726f6d205c636974657b5465727d20746f204b4c542070616972733a200a0a0a5c626567696e7b7468656f72656d7d0a7b7d205c6c6162656c7b4250465468656f72656d7d4c657420245c6c65667428582c5c44656c74615c726967687429242061206d696e696d616c2073696d706c650a6e6f726d616c2063726f7373696e67732070726f6a656374697665204b4c542070616972206f662067656e6572616c207479706520616e642064696d656e73696f6e0a24322420646566696e6564206f76657220616e20616c67656272616963616c6c7920636c6f736564206669656c64206f662063686172616374657269737469630a24705c676532242e204c657420244c203d206d284b5f58202b205c44656c746129242062652061206e656620616e6420626967206c696e652062756e646c65206f6e202458242e20417373756d65207468617420246c3d4c5e7b327d5c6765204b5f7b587d5e7b327d2d335c6368695c6c656674285c6d61746863616c7b4f7d5f7b587d5c7269676874292b322b34642b35240a666f722024645c676530242e205468656e207468657265206973206120636f6d70757461626c6520636f6e7374616e7420246d5f7b307d242028646570656e64696e670a6f6e6c79206f6e2074686520696e74657273656374696f6e7320244b5f7b587d2420616e6420245c44656c74612420616e6420746865206e756d626572206f660a636f6d706f6e656e7473206f6620245c44656c74612420292073756368207468617420246d206d5f7b307d5c6c656674284b5f7b587d2b5c44656c74615c726967687429240a69732062617365706f696e742d667265652e200a5c656e647b7468656f72656d7d0a546865206b6579206c656d6d6120696e207468652070726f6f66205468656f72656d205c7265667b4250465468656f72656d7d206973204c656d6d61205c7265667b6c656d3a322e32546572656b6177617d202020776869636820666f6c6c6f777320656173696c792066726f6d0a7468652063697465642070617065722e200a5c626567696e7b6c656d6d617d0a5c636974655b322e325d7b5465727d250a5c626567696e7b636f6d6d656e747d0a5c656e647b636f6d6d656e747d0a7b7d205c6c6162656c7b6c656d3a322e32546572656b6177617d4c657420245c6c65667428582c5c44656c74615c726967687429242061206d696e696d616c2073696d706c650a6e6f726d616c2063726f7373696e67732070726f6a656374697665204b4c542070616972206f662067656e6572616c207479706520616e642064696d656e73696f6e0a24322420646566696e6564206f76657220616e20616c67656272616963616c6c7920636c6f736564206669656c64206f662063686172616374657269737469630a24705c676532242e204c657420245a242062652061202430242d6379636c65207769746820246465675c205a3d642b3124207768657265202464242069730a61206e6f6e6e6567617469766520696e74656765722e20417373756d65207468617420244c242069732061206c696e652062756e646c65207375636820746861740a244b5f7b587d2b5c44656c74612b4c24206973204361727469657220616e642024485e7b317d5c6c656674284b5f7b587d2b5c44656c74612b4c5c7269676874293d30242e0a417373756d65207468617420244b5f7b587d2b4c2420697320245c6c65667428642d315c726967687429242d7665727920616d706c6520616e6420746865207265737472696374696f6e0a6d6170206973206e6f74207375726a6563746976653a200a5c5b0a5c47616d6d615c6c656674284b5f7b587d2b5c44656c74612b4c5c7269676874295c746f5c47616d6d615c6c656674285c6d61746863616c7b4f7d5f7b5a7d5c6c656674284b5f7b587d2b5c44656c74612b4c5c7269676874295c7269676874292e0a5c5d0a205468656e2074686572652065786973747320612072616e6b20243224206c6f63616c6c79206672656520736865616620244524206f6e202458242077686963680a697320676976656e206279207468652073686f72742065786163742073657175656e63650a5c5b0a305c746f5c6d61746863616c7b4f7d5f7b587d5c746f20455c746f20495f7b5a7d5c6c656674284c5c7269676874295c746f300a5c5d0a2077686572652024495f7b5a7d242069732074686520696465616c207368656166206f6620245a242e200a5c656e647b6c656d6d617d0a5c7465787462667b50726f6f66206f66205468656f72656d205c7265667b4250465468656f72656d7d7d2e0a4c657420246d5f7b307d24206265206c6172676520656e6f75676820736f207468617420746865206879706f746865736973206f66205468656f72656d205c7265667b74686d3a4566666563746976654b565653757266616365737d20686f6c647320692e652e20737563682074686174200a5c5b0a485e7b317d5c6c656674284b5f7b587d2b5c44656c74612b4c5c7269676874293d485e7b317d5c6c656674286d5f7b307d5c6c656674284b5f7b587d2b5c44656c74615c7269676874295c7269676874293d302e0a5c5d0a2049662024443d4b5f7b587d2b5c44656c74612b4c24206973206e6f7420626173652d706f696e7420667265652c207468656e2074686572652069732061202430242d6379636c650a245a24206f6620646567726565202431242073756368207468617420746865207265737472696374696f6e206d6170200a5c5b0a5c47616d6d615c6c65667428582c445c7269676874295c746f5c47616d6d615c6c656674285a2c447c5f7b5a7d5c7269676874290a5c5d0a206973206e6f74207375726a6563746976652e204279204c656d6d61205c7265667b6c656d3a322e32546572656b6177617d2c207468657265206578697374730a612072616e6b20243224206c6f63616c6c79206672656520736865616620244524206f6e2024582420776869636820697320676976656e206279207468650a73686f72742065786163742073657175656e63650a5c5b0a305c746f5c6d61746863616c7b4f7d5f7b587d5c746f20455c746f20495f7b5a7d5c6c656674284c5c7269676874295c746f300a5c5d0a2077686572652024495f7b5a7d242069732074686520696465616c207368656166206f6620245a242e205468652072657374206f662074686520617267756d656e740a666f6c6c6f77732065786163746c7920617320696e20746865206369746564205468656f72656d2e20250a5c626567696e7b636f6d6d656e747d0a5c656e647b636f6d6d656e747d0a7b7d200a0a0a5c73756273656374696f6e7b46696e6974652047656e65726174696f6e20696e2046616d696c6965737d0a0a5c626567696e7b646566696e6974696f6e7d0a4c657420245c6c65667428582c5c73756d20535f7b697d5c726967687429242061206c6f6720736d6f6f74682c206c6f672d63616e6f6e6963616c2070726f6a6563746976650a706169722077686572652024582420697320612074776f2064696d656e73696f6e616c2c206e6f726d616c2076617269657479206f76657220616e20616c67656272616963616c6c790a636c6f736564206669656c64206f662063686172616374657269737469632024703e302420776974682024535f7b697d242064697374696e6374207072696d650a64697669736f72732c2024563d5c73756d5c6d61746862627b527d535f7b697d5c737562736574204469765f7b5c6d61746862627b527d7d5c6c65667428585c726967687429242e0a446566696e652074686520666f6c6c6f77696e6720736574732c20746865206669727374206f6620776869636820697320636c6561726c79206120706f6c79746f70652e0a5c5b0a5c6d61746863616c7b4c7d5c6c65667428565c7269676874293d5c6c6566745c7b205c73756d5f7b693d317d5e7b6e7d615f7b697d535f7b697d5c696e20565c207c5c20615f7b697d5c696e5c6c6566745b302c315c72696768745d5c72696768745c7d200a5c5d0a5c5b0a5c6d61746863616c7b457d5c6c65667428565c7269676874293d5c6c6566745c7b205c44656c74615c696e5c6d61746863616c7b4c7d5c6c65667428565c7269676874295c207c5c204b5f7b587d2b5c44656c74615c73696d5f7b5c6d61746862627b527d7d445c6765305c72696768745c7d202e0a5c5d0a20476976656e2024663a585c746f2059242061206269726174696f6e616c20636f6e7472616374696f6e2c206c657420245c6d61746863616c7b437d5f7b667d5c6c65667428565c726967687429240a64656e6f74652074686520636c6f73757265206f6620245c6d61746863616c7b4c7d5c6c65667428565c72696768742924206f66200a5c5b0a5c6c6566745c7b205c44656c74615c696e5c6d61746863616c7b457d5c6c65667428565c7269676874295c207c5c20665c205c6d626f787b69732061206c6f67207465726d696e616c206d6f64656c206f66207d5c6c65667428582c5c44656c74615c7269676874295c72696768745c7d202e0a5c5d0a432e662e205c636974655b322e31335d7b434c323031337d2c20287468652073746174656d656e7420697320666f72206368617261637465726973746963202430240a696e20616e792064696d656e73696f6e206279205c636974655b332e345d7b53437d2c2062757420696e207468652073757266616365206361736520686572650a6d6572656c792072656c696573206f6e205c636974655b302e325d7b54616e7d29207468656e20746865726520617265206269726174696f6e616c20636f6e7472616374696f6e730a24665f7b697d3a585c746f20595f7b697d242073756368207468617420245c6d61746863616c7b437d5f7b665f7b697d7d5c6c65667428565c7269676874292c2e2e2e2c5c6d61746863616c7b437d5f7b665f7b6b7d7d5c6c65667428565c726967687429240a61726520726174696f6e616c20706f6c79746f70657320616e64200a5c5b0a5c6d61746863616c7b457d5c6c65667428565c7269676874293d5c6269676375705f7b693d317d5e7b6b7d5c6d61746863616c7b437d5f7b665f7b697d7d5c6c65667428565c7269676874290a5c5d0a20736f207468617420245c6d61746863616c7b457d5c6c65667428565c7269676874292420697320616c736f206120706f6c79746f70652e205c656e647b646566696e6974696f6e7d0a5c626567696e7b70726f706f736974696f6e7d0a5c6c6162656c7b70726f703a47656e6572616c697a656447656e65726174696f6e496e46616d696c6965737d250a4c65742024582420626520612074776f2064696d656e73696f6e616c20245c6d61746862627b517d242d666163746f7269616c206e6f726d616c0a76617269657479206f76657220616e20616c67656272616963616c6c7920636c6f736564206669656c64206f662063686172616374657269737469632024703e30242e0a4c657420245c6c6566745c7b205c6c65667428582c5c44656c74615f7b697d5c7269676874295c72696768745c7d205f7b695c696e5c6c6566745c7b20312c2e2e2e2c6b5c72696768745c7d207d240a62652061206269672c206c6f6720736d6f6f74682c20245c6d61746862627b517d242d43617274696572204b4c54207061697220666f722065616368202469240a616e642073756368207468617420244b5f7b587d2b5c73756d5c44656c74615f7b697d24206861732073696d706c65206e6f726d616c2063726f7373696e67730a737570706f72742e205468656e207468652072696e67200a5c5b0a525c6c65667428582c4b5f7b587d2b5c44656c74615f7b317d2c2e2e2e2c4b5f7b587d2b5c44656c74615f7b6b7d5c7269676874290a5c5d200a2069732066696e6974656c792067656e65726174656420696e20736f6d652064656772656520646570656e64696e67206f6e2074686520696e74657273656374696f6e73206f66207468652072656c6576616e742064697669736f72732028696e206f7468657220776f7264732c206966207468652064697669736f72732061726520636f6e7374616e7420696e20612066616d696c792c207468656e2074686520646567726565206f662067656e65726174696f6e2077696c6c20626520636f6e7374616e7420696e207468652066616d696c79290a205c656e647b70726f706f736974696f6e7d2020200a5c626567696e7b70726f6f667d0a4920736b6574636820612070726f6f66206261736564206f6e205c636974655b322e31385d7b434c323031337d207768696368206170706c69657320696e207468650a4b4c542063617365200a63617365292e204c657420245c73756d20737570705c6c656674285c44656c74615f7b697d5c7269676874293d5c73756d20535f7b697d2420666f722024535f7b697d240a64697374696e6374207072696d652064697669736f72732c2024445f7b697d3d5c656c6c5c6c656674284b5f7b587d2b5c44656c74615f7b697d2b415c726967687429240a616e6420245c6d61746863616c7b4d7d3d5c73756d5f7b693d317d5e7b707d5c6d61746862627b5a7d445f7b697d242e204c657420244d5e7b5c6c656674284e5c7269676874297d3d5c73756d5f7b693d317d5e7b707d5c6d61746862627b5a7d4e445f7b697d2e240a417320696e20746865206369746564207468656f72656d2c207468657265206973206120636f6e7374616e7420244d5e7b5c7072696d657d2420616e642067656e657261746f72730a6f6620245c6d61746863616c7b4d7d5c6361705c6d61746862627b527d5f7b2b7d5c6c656674284b5f7b587d2b5c6d61746863616c7b437d5f7b697d5c726967687429240a666f7220616c6c20246924206f662074686520666f726d20244d5e7b5c7072696d657d5c6c656674284b5f7b587d2b425c7269676874292420666f7220736f6d650a24425c696e5c6d61746863616c7b4c7d5c6c65667428565c7269676874292e24204170706c79696e67205468656f72656d205c7265667b4250465468656f72656d7d2c0a7468657265206973206120626f756e64656420636f6e7374616e7420244d5c696e5c6d61746862627b4e7d242028646570656e64696e67206f6e6c79206f6e2074686520696e74657273656374696f6e73206f66207468652072656c6576616e742064697669736f7273290a73756368207468617420666f7220616c6c2024692c6a242077686572652024425f7b696a7d24207370616e206561636820245c6d61746863616c7b437d5f7b697d242c0a73756368207468617420244d5c6c65667428665f7b697d5c7269676874295f7b2a7d5c6c656674284b5f7b587d2b425f7b696a7d5c726967687429242069732062617365706f696e740a667265652e20546875732c20632e662e205c636974655b322e31315d7b435a7d2c20776520617265207265647563656420746f2070726f76696e672074686520666f6c6c6f77696e673a0a4c657420245c6c65667428582c425f7b697d5c726967687429242061206b6c74207061697220666f7220656163682024692420616e6420244c5f7b697d3d615f7b697d5c6c656674284b5f7b587d2b425f7b697d5c726967687429240a6861732062617365706f696e742066726565206c696e6561722073797374656d20666f722065616368202469242c202877652063616e20617373756d6520686572650a7468617420244b5f7b587d2b425f7b697d2420697320626967292e204c65742024473d5c73756d5f7b693d317d5e7b6b7d625f7b697d4c5f7b697d2420666f720a706f73697469766520696e7465676572732024625f7b697d242c20616e6420617373756d6520746861742024625f7b5c656c6c7d3e6e2b31242e205468656e0a746865206e61747572616c206d6170200a5c5b0a485e7b307d5c6c65667428582c5c6d61746863616c7b4f7d5f7b587d5c6c65667428475c7269676874295c7269676874295c6f74696d657320485e7b307d5c6c65667428582c5c6d61746863616c7b4f7d5f7b587d5c6c656674284c5f7b5c656c6c7d5c7269676874295c7269676874295c746f20485e7b307d5c6c65667428582c5c6d61746863616c7b4f7d5f7b587d5c6c65667428472b4c5f7b5c656c6c7d5c7269676874295c7269676874290a5c5d0a206973207375726a6563746976652e20546865207265737420666f6c6c6f7773207468652070726f6f66206f66205c636974655b322e375d7b435a7d2c206275740a737562737469747574696e67207468652056616e697368696e67205468656f72656d205c7265667b74686d3a4566666563746976654b565653757266616365737d0a7768656e206e656365737361727920666f722074686520757375616c204b6177616d61746120566965687765672056616e697368696e672e205c656e647b70726f6f667d0a0a0a0a0a255c696e636c7564657b63686170347d202547656e6572616c2074797065206d696e696d616c206d6f64656c2070726f6772616d206f766572204456520a0a0a5c636861707465727b47656e6572616c2054797065204d696e696d616c204d6f64656c73206f7665722061204456527d5c6c6162656c7b63686170347d0a0a5c73656374696f6e7b426967204162756e64616e6365202f20527d0a5c626567696e7b646566696e6974696f6e7d0a4c65742024445f7b317d2c2e2e2e2c445f7b727d2420626520245c6d61746862627b517d242d4361727469657220245c6d61746862627b517d242d64697669736f72730a6f6e202458242e2024445f7b697d24206172652063616c6c6564205c7465787462667b61646a6f696e742064697669736f72737d206f6e202458242069660a7468657920617265206f662074686520666f726d2024445f7b697d3d4b5f7b587d2b5c44656c74615f7b697d2420666f7220736f6d65205c7465787462667b706169727d0a245c6c65667428582c5c44656c74615f7b697d5c7269676874292420776865726520245824206973206e6f726d616c20616e642070726f6a6563746976652c0a245c44656c74615f7b697d5c6765302420616e64206973206120245c6d61746862627b517d242d64697669736f722e204c6574200a5c5b0a523d525c6c65667428583b445f7b317d2c2e2e2e2c445f7b727d5c7269676874293d5c6269676f706c75735f7b5c6c656674286e5f7b317d2c2e2e2e2c6e5f7b727d5c7269676874295c696e5c6d61746862627b4e7d5e7b727d7d485e7b307d5c6c65667428582c6e5f7b317d445f7b317d2b5c63646f74732b6e5f7b727d445f7b727d5c7269676874292e0a5c5d0a20616e6420646566696e6520746865205c7465787462667b737570706f72747d206f662024522420746f206265200a5c5b0a537570705c20523d5c6c656674285c73756d5f7b693d317d5e7b727d5c6d61746862627b527d5f7b2b7d445f7b697d5c7269676874295c636170204469765f7b5c6d61746862627b527d7d5e7b6566667d5c6c65667428585c7269676874292e0a5c5d0a200a5c656e647b646566696e6974696f6e7d0a5c626567696e7b7468656f72656d7d0a5c6c6162656c7b74686d332e357d5c636974655b332e355d7b434c7d250a7b7d204c6574202458242062652061206e6f726d616c20736368656d65206f662072656c61746976652064696d656e73696f6e202432242c2070726f706572206f7665720a6120445652202452242077686963682068617320706572666563742072657369647565206669656c6420246b24206f662063686172616374657269737469630a24703e302420616e642070657266656374206672616374696f6e206669656c6420244b242e204c65742024445f7b317d2c2e2e2e2c445f7b727d242062650a245c6d61746862627b517d242d436172746965722064697669736f7273206f6e202458242e20417373756d6520746861742024525c6c65667428583b445f7b317d2c2e2e2e2c445f7b727d5c726967687429240a69732066696e6974656c792067656e6572617465642e204c65742024443a5c6d61746862627b527d5e7b727d5c6e695c6c656674285c6c616d6264615f7b317d2c2e2e2e2c5c6c616d6264615f7b727d5c7269676874295c6d617073746f5c73756d5c6c616d6264615f7b697d445f7b697d5c696e204469765f7b5c6d61746862627b527d7d5c6c65667428585c726967687429240a62652074686520746175746f6c6f676963616c206d61702e200a0a2831292054686520737570706f7274206f6620245224206973206120726174696f6e616c20706f6c7968656472616c20636f6e652e200a0a2832292049662024537570705c20522420636f6e7461696e732061206269672064697669736f7220616e642024445c696e5c73756d5c6d61746862627b527d5f7b2b7d445f7b697d240a69732070736575646f6566666563746976652c207468656e2024445c696e20537570705c2052242e200a0a28332920546865726520697320612066696e69746520726174696f6e616c20706f6c7968656472616c207375626469766973696f6e2024537570705c20523d5c62696763757020435f7b697d240a73756368207468617420245c7369676d615f7b5c47616d6d617d242069732061206c696e6561722066756e6374696f6e206f6e2024435f7b697d2420666f720a65766572792067656f6d65747269632076616c756174696f6e20245c47616d6d6124206f66202458242e20467572746865726d6f72652c2074686572652069730a6120636f617273657374207375626469766973696f6e207769746820746869732070726f70657274792c20696e207468652073656e736520746861742c206966202469240a616e6420246a24206172652064697374696e63742c207468657265206973206174206c65617374206f6e652067656f6d65747269632076616c756174696f6e20245c47616d6d61240a6f6620245824207375636820746861742028746865206c696e65617220657874656e73696f6e73206f662920245c7369676d615f7b5c47616d6d617d7c5f7b435f7b697d7d240a616e6420245c7369676d615f7b5c47616d6d617d7c5f7b435f7b6a7d7d242061726520646966666572656e742e200a0a28342920546865726520697320612066696e69746520696e6465782073756267726f757020245c6d61746862627b4c7d5c7375627365745c6d61746862627b5a7d5e7b727d240a73756368207468617420666f7220616c6c20246e5c696e5c6d61746862627b4e7d5e7b727d5c6361705c6d61746862627b4c7d2c242069662024445c6c656674286e5c7269676874295c696e20537570705c2052242c0a7468656e20245c7369676d615f7b5c47616d6d617d5c6c65667428445c6c656674286e5c7269676874295c7269676874293d6d756c745f7b5c47616d6d617d5c6c6566747c445c6c656674286e5c7269676874295c72696768747c242e205c656e647b7468656f72656d7d0a5c626567696e7b70726f6f667d0a50617274732028312920616e642028322920666f6c6c6f7720656173696c792066726f6d20746865206369746564207468656f72656d2e20466f722028332920616e640a283429206e6f74652074686174205c636974655b342e375d7b454c4d7d2069732073746174656420666f7220616e20617262697472617279204e6f657468657269616e0a736368656d652c20616e642074686973207468656f72656d20697320746865206f6e6c7920726573756c742075736564206279207468652070726f6f6620676976656e0a696e205c636974655b332e355d7b434c7d2e205c656e647b70726f6f667d0a5c626567696e7b7468656f72656d7d0a5c6c6162656c7b54686d332e367d285c636974655b332e365d7b434c7d29204c657420245c6c65667428582c5c44656c74615c7269676874292420626520610a6b6c742070616972206f662072656c61746976652064696d656e73696f6e20243224206f766572206120445652202452242077697468207065726665637420726573696475650a6669656c6420246b24206f662063686172616374657269737469632024703e302420616e642070657266656374206672616374696f6e206669656c6420244b242e0a417373756d65207468617420244b5f7b587d2b5c44656c74612420697320245c6d61746862627b517d242d4361727469657220616e6420746861742024525c6c656674284b5f7b587d2b5c44656c74612c4b5f7b587d2b5c44656c74612b415c726967687429240a69732066696e6974656c792067656e6572617465642e20496620244b5f7b587d2b5c44656c7461242069732070736575646f6566666563746976652c207468656e0a697420697320245c6d61746862627b517d242d6566666563746976652e205c656e647b7468656f72656d7d0a5c626567696e7b70726f6f667d0a417320696e2074686520736f757263652070617065722e200a5c656e647b70726f6f667d0a4c657420245c47616d6d612420612067656f6d65747269632076616c756174696f6e206f6e202458242e20446566696e65200a5c5b0a5c7369676d615f7b5c47616d6d617d3d696e665c6c6566745c7b206d756c745f7b5c47616d6d617d445e7b5c7072696d657d5c207c5c20445c73696d5f7b5c6d61746862627b527d7d445e7b5c7072696d657d5c6765305c72696768745c7d205c696e5c6d61746862627b527d2e0a5c5d0a4173206120726573756c74206f66205468656f72656d205c7265667b47656e6572616c697a656446696e69746547656e65726174696f6e7d2c2074686572652069730a74686520666f6c6c6f77696e67206162756e64616e6365207468656f72656d3a0a5c626567696e7b636f726f6c6c6172797d0a5c6c6162656c7b74686d4162756e64616e63654e6566426967496d7069657353656d69616d706c65527d5c636974655b332e385d7b434c7d20250a5c626567696e7b636f6d6d656e747d0a6665656c7320676f6f64206d616e0a5c656e647b636f6d6d656e747d0a4c657420245c6c65667428582c5c44656c74615c72696768742924206265206120626967206b6c742070616972206f662072656c61746976652064696d656e73696f6e0a243224206f76657220612044565220245224207769746820706572666563742072657369647565206669656c6420246b24206f662063686172616374657269737469630a24703e302420616e642070657266656374206672616374696f6e206669656c6420244b242e20417373756d6520746861742024525c6c656674284b5f7b587d2b5c44656c74615c726967687429240a616e642024525c6c656674284b5f7b587d2b5c44656c74612c4b5f7b587d2b5c44656c74612b415c72696768742924206172652066696e6974656c792067656e6572617465640a666f7220616e20616d706c6520245c6d61746862627b517d242d64697669736f7220244124206f6e202458242e20496620244b5f7b587d2b5c44656c7461240a6973206e65662c207468656e2069742069732073656d692d616d706c652e205c656e647b636f726f6c6c6172797d0a5c626567696e7b70726f6f667d0a28546869732073696d706c69666965732066726f6d20746865206369746564207468656f72656d206173204920617373756d6520746865207061697220244b5f7b587d2b5c44656c7461240a697320626967292e20466f7220616e7920245c657073696c6f6e3e30242c20616e6420616e792067656f6d65747269632076616c756174696f6e20245c47616d6d61240a6f6e202458242c20617320244b5f7b587d2b5c44656c74612b5c657073696c6f6e20412420697320616d706c652c206120706f736974697665206d756c7469706c650a69732062617365706f696e7420667265652e20546875732c200a5c5b0a5c7369676d615f7b5c47616d6d617d5c6c656674284b5f7b587d2b5c44656c74612b5c657073696c6f6e20415c7269676874293d300a5c5d0a20736f2074686174250a5c626567696e7b636f6d6d656e747d0a66726f6d206e616b6179616d617320626f6f6b2060605a617269736b69206465636f6d706f736974696f6e20616e6420616e64206162756e64616e63652c20796f750a70726f76652074686174206c696d697420246c696d5f7b5c657073696c6f6e5c746f307d5c7369676d615f7b5c47616d6d617d5c6c65667428442b5c657073696c6f6e20415c7269676874293d5c7369676d615f7b5c47616d6d617d5c6c65667428445c726967687429240a7768656e202444242069732062696720284949492e312e342e62290a5c656e647b636f6d6d656e747d0a7b7d20245c7369676d615f7b5c47616d6d617d24206973206964656e746963616c6c79207a65726f206279205468656f72656d205c7265667b74686d332e357d2834292e0a5468657265666f72652c207468652063656e747265206f6620245c47616d6d6124206973206e6f7420696e20245c6d61746862627b427d5c6c656674284b5f7b587d2b5c44656c74615c726967687429240a666f7220616e79207375636820245c47616d6d61242e205c656e647b70726f6f667d0a5c626567696e7b636f726f6c6c6172797d0a5c6c6162656c7b54686d332e397d204c6574202458242062652061206e6f726d616c2070726f6a65637469766520736368656d65206f662072656c61746976650a64696d656e73696f6e20243224206f76657220612044565220245224207769746820706572666563742072657369647565206669656c6420246b24206f660a63686172616374657269737469632024703e302420616e642070657266656374206672616374696f6e206669656c6420244b2420616e64206c65742024445f7b317d2c2e2e2e2c445f7b727d240a626520245c6d61746862627b517d242d4361727469657220245c6d61746862627b517d242d64697669736f7273206f6e202458242e20417373756d6520746861740a7468652072696e672024523d525c6c65667428583b445f7b317d2c2e2e2e2c445f7b727d5c726967687429242069732066696e6974656c792067656e6572617465642c0a616e64206c65742024537570705c20523d5c62696763757020435f7b697d2420626520612066696e69746520726174696f6e616c20706f6c7968656472616c207375626469766973696f6e0a73756368207468617420666f722065766572792067656f6d65747269632076616c756174696f6e20245c47616d6d6124206f662024582c2420245c7369676d615f7b5c47616d6d617d240a6973206c696e656172206f6e2024435f7b697d242c20617320696e205468656f72656d205c7265667b74686d332e357d2e2044656e6f746520245c7661727068693a5c73756d5c6d61746862627b527d5f7b2b7d445f7b697d5c746f204e5e7b317d5c6c65667428585c7269676874295f7b5c6d61746862627b527d7d240a7468652070726f6a656374696f6e2c20616e6420617373756d652074686572652065786973747320246b24207375636820746861742024435f7b6b7d5c6361705c7661727068695e7b2d317d5c6c65667428416d705c20445c7269676874295c6e65715c656d707479736574242e0a5468656e2024435f7b6b7d5c73756273657420537570705c20525c6361705c7661727068695e7b2d317d5c6c656674284e65665c20585c726967687429242e2049660a746865207375626469766973696f6e20697320636f6172736573742c207468656e20245c6d61746863616c7b437d5f7b6b7d3d537570705c20525c6361705c7661727068695e7b2d317d5c6c656674284e65665c20585c72696768742924250a5c626567696e7b636f6d6d656e747d0a6e6565642074686973206c617374207061727420666f722074686520636f6e65207468656f72656d0a5c656e647b636f6d6d656e747d0a5c656e647b636f726f6c6c6172797d0a5c626567696e7b70726f6f667d0a417320696e2074686520736f757263652c20627574206170706c79696e67205468656f72656d73205c7265667b74686d332e357d20616e64205c7265667b74686d4162756e64616e63654e6566426967496d7069657353656d69616d706c65527d2e0a5c656e647b70726f6f667d0a0a5c73656374696f6e7b436f6e652c20526174696f6e616c6974792c20616e6420636f6e7472616374696f6e202f20527d0a5c626567696e7b646566696e6974696f6e7d0a5c636974655b64656620342e315d7b434c7d250a7b7d204c65742024572420612066696e6974652064696d656e73696f6e616c207265616c20766563746f722073706163652c2024435c73756273657420572420610a636c6f73656420636f6e76657820636f6e65207370616e6e696e67202457242c20616e642024765c696e2057242e205468652076697369626c6520626f756e646172790a6f66202443242066726f6d20247624206973200a5c5b0a563d5c6c6566745c7b20775c696e5c7061727469616c20435c207c5c205c6c6566745b762c775c72696768745d5c63617020433d5c6c6566745c7b20775c72696768745c7d205c72696768745c7d202e0a5c5d0a5c656e647b646566696e6974696f6e7d0a5c626567696e7b636f726f6c6c6172797d0a28632e662e205c636974655b342e325d7b434c7d29205c6c6162656c7b436f6e655468656f72656d4f6e527d250a7b7d20284b6177616d617461277320526174696f6e616c6974792c20436f6e6520616e6420436f6e7472616374696f6e205468656f72656d29204c657420245c6c65667428582c5c44656c74615c726967687429240a626520612070616972206f662072656c61746976652064696d656e73696f6e202432242c2070726f706572206f7665722061204456522024522420776974680a706572666563742072657369647565206669656c6420246b24206f662063686172616374657269737469632024703e302420616e642070657266656374206672616374696f6e0a6669656c6420244b242e20417373756d6520746861742024765f7b307d3d5b4b5f7b587d2b5c44656c74615d2420697320245c6d61746862627b517d242d436172746965720a616e64206973206f627461696e65642066726f6d20746865206c6f6720736d6f6f7468206b6c74207061697220245c7068693a5c6c65667428585e7b5c7072696d657d2c5c44656c74615e7b5c7072696d657d5c7269676874295c746f5c6c65667428582c5c44656c74615c726967687429240a616674657220612066696e697465206e756d626572206f66207374657073206f6620746865206d696e696d616c206d6f64656c2070726f6772616d2077697468207363616c696e670a6173736f63696174656420746f2061206269672064697669736f7220244124207769746820244b5f7b587d2b5c44656c74612b744124206e6566206f6e2024582f52240a666f7220736f6d652024743e30242e204c657420245624206265207468652076697369626c6520626f756e64617279206f6620244e65665c6c65667428582f525c726967687429240a66726f6d2024765f7b307d5c696e204e5e7b317d5c6c65667428585c7269676874295f7b5c6d61746862627b527d7d2420616e642024755f7b307d5c696e20565c6361705c6c65667428765f7b307d2c5c6c6566745b4b5f7b587d2b5c44656c74612b74415c72696768745d5c726967687429242e0a5468656e207468657265206578697374732061206c6f63616c6c7920706f6c7968656472616c206e65696768626f72686f6f642024555c7375627365742056240a6f662024755f7b307d242073756368207468617420245c666f72616c6c20755e7b5c7072696d657d5c696e2055242c2024755e7b5c7072696d657d242069730a73656d69616d706c652e205c656e647b636f726f6c6c6172797d0a5c626567696e7b70726f6f667d0a5c626567696e7b636f6d6d656e747d0a70726f7065726e65737320697320696d706f7274616e742073696e636520696e74657273656374696f6e207468656f72792063616e277420626520646566696e65640a696620646f6e2774206861766520636f6d706163746e6573732e0a5c656e647b636f6d6d656e747d0a7b7d205468697320697320657373656e7469616c6c792061206c6f63616c2076657273696f6e206f6620746865206369746564207468656f72656d2e20416674657220626173650a6368616e67652c207765206d617920617373756d652024522420697320636f6d706c65746520616e64207468617420246b2420697320616c67656272616963616c6c790a636c6f7365642e204c657420245c6d61746863616c7b437d3d5c6d61746862627b527d5f7b2b7d765f7b307d2b4e65665c6c65667428582f525c726967687429242e0a4c65742024755f7b307d5e7b5c7072696d657d24206265206120726174696f6e616c20706f696e74206f6620244e5e7b317d5c6c65667428582f525c726967687429240a73756666696369656e746c7920636c6f736520746f2024755f7b307d24207375636820746861742024755f7b307d5c696e20425c6c65667428755f7b307d5e7b5c7072696d657d2c5c657073696c6f6e5c726967687429240a69732061207375702d6e6f726d2062616c6c207769746820726174696f6e616c2076657274696365732024775f7b6a7d3d5c6c6566745b4b5f7b587d2b5c44656c74612b415f7b6a7d5c72696768745d2c5c206a3d312c2e2e2e2c72240a776869636820617265206b6c7420616e6420737563682074686174207468657265206578697374206269672c206c6f6720736d6f6f74682c206b6c742070616972730a244b5f7b585e7b5c7072696d657d7d2b5c44656c74615e7b5c7072696d657d2b415f7b6a7d5e7b5c7072696d657d24207769746820245c7068695f7b2a7d5c6c656674284b5f7b585e7b5c7072696d657d7d2b5c44656c74615e7b5c7072696d657d2b415f7b6a7d5e7b5c7072696d657d5c7269676874293d4b5f7b587d2b5c44656c74612b415f7b6a7d240a6f6e2024585e7b5c7072696d657d24202c20616e642073756368207468617420245c657073696c6f6e2420697320736d616c6c20656e6f75676820746861740a7468652024775f7b6a7d242070756c6c206261636b20746f2064697669736f727320686176696e67206c6f6720736d6f6f746820737570706f7274206f6e2024585e7b5c7072696d657d242e0a4c657420245c6d61746863616c7b427d242064656e6f74652074686520636f6e7665782068756c6c206f662024425c6c65667428755f7b307d5e7b5c7072696d657d2c5c657073696c6f6e5c726967687429242e0a466f7220245c657073696c6f6e242073756666696369656e746c7920736d616c6c2c207374657073206f662074686520244b5f7b585e7b5c7072696d657d7d2b5c44656c74615e7b5c7072696d657d240a6d696e696d616c206d6f64656c2070726f6772616d2077697468207363616c696e67206f662024415e7b5c7072696d657d242061726520616c736f2073746570730a6f662074686520244b5f7b587d2b5c44656c74612b415f7b6a7d5e7b5c7072696d657d24206d696e696d616c206d6f64656c2070726f6772616d2e205468657265666f72650a746865726520697320616e2069736f6d6f72706869736d206f662072696e6773200a5c5b0a525c6c65667428582c4b5f7b587d2b5c44656c74612b415f7b317d2c2e2e2e2c4b5f7b587d2b5c44656c74612b415f7b727d5c7269676874290a5c5d0a5c5b0a5c617070726f7820525c6c65667428585e7b5c7072696d657d2c4b5f7b585e7b5c7072696d657d7d2b5c44656c74615e7b5c7072696d657d2b415f7b317d5e7b5c7072696d657d2c2e2e2e2c4b5f7b585e7b5c7072696d657d7d2b5c44656c74615e7b5c7072696d657d2b415f7b727d5e7b5c7072696d657d5c7269676874290a5c5d0a20736f2074686174206279205468656f72656d205c7265667b47656e6572616c697a656446696e69746547656e65726174696f6e7d2c2074686573652072696e67730a6172652066696e6974656c792067656e6572617465642e204c657420245c7661727068693a5c73756d5c6d61746862627b527d5f7b2b7d5c6c656674284b5f7b587d2b5c44656c74612b415f7b6a7d5c7269676874295c746f204e5e7b317d5c6c65667428585c7269676874295f7b5c6d61746862627b527d7d240a746865206e61747572616c2070726f6a656374696f6e20736f2074686174200a5c5b0a5c7661727068695c6c656674285c73756d5c6d61746862627b527d5f7b2b7d5c6c656674284b5f7b587d2b5c44656c74612b415f7b6a7d5c7269676874295c7269676874293d5c6d61746862627b527d5f7b2b7d5c6d61746863616c7b427d0a5c5d0a2e205468656f72656d205c7265667b74686d332e357d20696d706c69657320746861742024537570705c205224206973206120726174696f6e616c20706f6c7968656472616c0a636f6e6520776869636820696e74657273656374732074686520696e746572696f72206f6620746865206e656620636f6e652e205468657265666f72652c2062790a5468656f72656d205c7265667b74686d332e357d2832292c206966202455242069732074686520706f7274696f6e206f6620245c7061727469616c204e65665c6c65667428582f525c726967687429240a636f6e7461696e656420696e2024425c6c65667428755f7b307d5e7b5c7072696d657d2c5c657073696c6f6e5c72696768742924202c207468656e20245c7661727068695e7b2d317d5c6c65667428555c7269676874295c73756273657420537570705c6c65667428525c726967687429242e0a4c65742024537570705c20523d5c6269676375705c6d61746863616c7b4c7d5f7b6b7d242062652074686520636f617273657374207375626469766973696f6e0a676976656e206279205468656f72656d205c7265667b74686d332e357d2833292e20466f7220736f6d6520246b242c20245c6d61746863616c7b4c7d5f7b6b7d5c6361705c7661727068695e7b2d317d5c6c65667428416d705c20585c7269676874295c6e65715c656d707479736574242c0a736f206279205468656f72656d205c7265667b54686d332e397d2c20245c6d61746863616c7b4c7d5f7b6b7d3d537570705c20525c6361705c7661727068695e7b2d317d5c6c656674284e65665c6c65667428585c7269676874295c726967687429242c0a616e64207468757320245524206973206c6f63616c6c7920706f6c7968656472616c2e2049662024755e7b5c7072696d657d5c696e2055242c20776974682064697669736f720a244424207468656e2074686572652065786973747320616e20616d706c6520245c6d61746862627b517d242d64697669736f722024415e7b5c7072696d657d240a7375636820746861742024445c73696d5f7b5c6d61746862627b517d7d4b5f7b587d2b5c44656c74612b415e7b5c7072696d657d2e242042792063686f6963650a6f6620245c657073696c6f6e242c2074686572652069732061206c6f6720736d6f6f74682064697669736f722024445e7b5c7072696d657d24206f6e2024585e7b5c7072696d657d240a7769746820245c7068695f7b2a7d445e7b5c7072696d657d3d44242c20616e6420736f20746861742024525c6c656674284b5f7b587d2b5c44656c74612b415e7b5c7072696d657d2c4b5f7b587d2b5c44656c74612b415e7b5c7072696d657d2b415e7b5c7072696d655c7072696d657d5c726967687429240a616e642024525c6c656674284b5f7b587d2b5c44656c74612b415e7b5c7072696d657d5c72696768742924206172652066696e6974656c792067656e6572617465640a666f7220616e7920616d706c652024415e7b5c7072696d655c7072696d657d24207375636820746861742024442b415e7b5c7072696d655c7072696d657d5c696e20425c6c65667428755f7b307d5e7b5c7072696d657d2c5c657073696c6f6e5c726967687429242e0a546875732c205468656f72656d205c7265667b74686d4162756e64616e63654e6566426967496d7069657353656d69616d706c65527d20676976657320746861740a24755e7b5c7072696d657d242069732073656d69616d706c652e205c656e647b70726f6f667d0a5c626567696e7b6c656d6d617d0a5c626567696e7b636f6d6d656e747d0a7365656d73206f6b0a5c656e647b636f6d6d656e747d0a7b7d205c636974655b4c656d6d6120352e315d7b434c7d5c6c6162656c7b6c656d3a436f7852696e6753616d654166746572436f6e7472616374696f6e7353757266616365737d4c65740a24582420616e642024592420626520245c6d61746862627b517d242d666163746f7269616c2070726f6a65637469766520736368656d6573206f662072656c61746976650a64696d656e73696f6e202432242c20736d6f6f7468206f76657220612044565220245224207769746820616c67656272616963616c6c7920636c6f73656420726573696475650a6669656c642e204c65742024663a585c746f2059242062652061206269726174696f6e616c20636f6e7472616374696f6e250a2c20616e64206c657420245c74696c64657b667d3a5c6d61746862627b4b7d5c6c65667428595c7269676874295c617070726f785c6d61746862627b4b7d5c6c65667428585c726967687429240a74686520696e64756365642069736f6d6f72706869736d206f6e2066756e6374696f6e206669656c64732e205468656e3a0a0a2831292024665f7b2a7d6469765f7b587d5c7661727068693d6469765f7b597d665c6c656674285c7661727068695c7269676874292420666f722065766572790a245c7661727068695c696e5c6d61746862627b4b7d5c6c65667428585c726967687429243b200a0a28322920666f722065766572792067656f6d65747269632076616c756174696f6e20245c47616d6d6124206f6e20245c6d61746862627b4b7d5c6c65667428585c726967687429242c0a616e6420666f7220657665727920245c7661727068695c696e5c6d61746862627b4b7d5c6c65667428585c726967687429242c207765206861766520246d756c745f7b5c47616d6d617d5c6c656674286469765f7b587d5c7661727068695c7269676874293d6d756c745f7b5c47616d6d617d5c6c656674286469765f7b597d5c74696c64657b667d5c6c656674285c7661727068695c7269676874295c726967687429243b0a0a283329250a7b7d2069662024662420697320616e2069736f6d6f72706869736d20696e20636f64696d656e73696f6e206f6e652c207468656e2024665f7b2a7d3a4469765f7b5c6d61746862627b527d7d5c6c65667428585c7269676874295c746f204469765f7b5c6d61746862627b527d7d5c6c65667428595c726967687429240a697320616e2069736f6d6f72706869736d2c20616e6420666f722065766572792024445c696e204469765f7b5c6d61746862627b527d7d5c6c65667428585c726967687429242c0a746865726520697320616e2069736f6d6f72706869736d2024485e7b307d5c6c65667428582c445c7269676874295c617070726f7820485e7b307d5c6c65667428592c665f7b2a7d445c726967687429242e205c656e647b6c656d6d617d0a5c626567696e7b70726f6f667d0a466f6c6c6f777320656173696c792066726f6d20746865206369746564205468656f72656d2e250a5c656e647b70726f6f667d0a5c626567696e7b6c656d6d617d0a5c636974655b352e325d7b434c7d5c6c6162656c7b6c656d3a434c5f50757368666f72776172645f4c696e6561727d250a7b7d204c65742024582420616e64202459242062652070726f706572206f662072656c61746976652064696d656e73696f6e202432242c206f7665722061204456520a245224207769746820706572666563742072657369647565206669656c6420246b24206f662063686172616374657269737469632024703e302420616e640a70657266656374206672616374696f6e206669656c6420244b2420616e642024663a585c746f2059242061206269726174696f6e616c206d61702077686963680a697320616e2069736f6d6f72706869736d20696e20636f64696d656e73696f6e206f6e652e204c657420245c6d61746863616c7b437d5c737562736574204469765f7b5c6d61746862627b527d7d5e7b6566667d5c6c65667428585c726967687429240a6265206120636f6e652c20616e642066697820612067656f6d65747269632076616c756174696f6e20245c47616d6d6124206f66202458242e205468656e207468650a6173796d70746f746963206f72646572206f662076616e697368696e6720245c7369676d615f7b5c47616d6d617d24206973206c696e656172206f6e20245c6d61746863616c7b437d240a696620616e64206f6e6c79206966206974206973206c696e656172206f6e2024665f7b2a7d5c6d61746863616c7b437d5c737562736574204469765f7b5c6d61746862627b527d7d5e7b6566667d5c6c65667428595c726967687429242e205c656e647b6c656d6d617d0a5c626567696e7b70726f6f667d0a417320696e20746865206369746564207468656f72656d2c20737562737469747574696e67204c656d6d61205c7265667b6c656d3a436f7852696e6753616d654166746572436f6e7472616374696f6e7353757266616365737d0a6173206e65636573736172792e205c656e647b70726f6f667d0a5c626567696e7b6c656d6d617d0a5c636974655b362e325d7b434c7d5c6c6162656c7b45787472656d616c5261797345786973747d250a5c626567696e7b636f6d6d656e747d0a446f2049206e65656420746f20657870616e642075706f6e20746869733f207468652069646561206973207468617420612073656d69616d706c652064697669736f720a697320626f7468206e656620616e642070756c6c6261636b6261636b206f6620616e20616d706c652c20736f2074616b696e6720244824207375636820746861740a244b5f7b587d2b5c44656c74612b482e523d30242c207468656e2069742773206e65662c2073656d69616d706c652c20616e642070756c6c6261636b206f6620616d706c650a28736f20245224206d75737420626520636f6e74726163746564290a5c656e647b636f6d6d656e747d0a4c657420245c6c65667428582c5c44656c74615c726967687429242062652061206c6f6720736d6f6f7468206b6c742070616972206f662072656c61746976650a64696d656e73696f6e20243224206f76657220612044565220245224207769746820706572666563742072657369647565206669656c6420246b24206f660a63686172616374657269737469632024703e302420616e642070657266656374206672616374696f6e206669656c6420244b242e20537570706f736520245c6c65667428582c5c44656c74615c726967687429240a6973206e6f74206e65662c20616e642024412420697320612062696720245c6d61746862627b517d242d64697669736f722073756368207468617420245c6c65667428582c5c44656c74612b415c726967687429240a6973206b6c742c20616e6420244b5f7b587d2b5c44656c74612b4124206973206e65662e204c657420245c6c616d6264612420626520746865206e6566207468726573686f6c642e0a5468656e20245c6c616d6264615c696e5c6d61746862627b517d5e7b2b7d242c20616e642074686572652069732024525c7375627365745c6f7665726c696e657b4e457d5c6c65667428585c726967687429240a7769746820245c6c656674284b5f7b587d2b5c44656c74612b5c6c616d62646120415c7269676874292e523d302420616e6420245c6c656674284b5f7b587d2b5c44656c74615c7269676874292e523c30242e205c656e647b6c656d6d617d0a5c626567696e7b70726f6f667d0a417320696e20746865206369746564207468656f72656d2c2062757420737562737469747574696e67205468656f72656d73205c7265667b54686d332e397d20616e640a5c7265667b47656e6572616c697a656446696e69746547656e65726174696f6e7d20666f7220746865697220636f72726573706f6e64696e672076657273696f6e732e200a5c656e647b70726f6f667d0a0a0a0a5c73656374696f6e7b4e656761746976697479204c656d6d61207d0a5c626567696e7b6c656d6d617d0a5c6c6162656c7b6c656d3a434c5f352e337d5c636974655b312e375d7b484b7d250a7b7d204c65742024663a585c746f20592420616e642024673a585c746f205a24206265206269726174696f6e616c20636f6e7472616374696f6e732077686572650a616c6c2073706163657320636f6e736964657265642061726520736368656d6573206f662072656c61746976652064696d656e73696f6e20243224206f7665720a612044565220776974682070657266656374250a0a7b7d2072657369647565206669656c642e20537570706f73652024665e7b2a7d5c6c65667428415c7269676874292b453d675e7b2a7d5c6c65667428425c7269676874292b46240a666f722024412420616d706c652c20244224206e65662c20244524202466242d657863657074696f6e616c2c20616e6420244624202467242d657863657074696f6e616c0a616c6c2064697669736f727320657874656e64696e6720746f20626f7468206669626572732e205468656e2024665c6369726320675e7b2d317d3a5a5c746f2059240a697320726567756c61722e205c656e647b6c656d6d617d0a5c626567696e7b70726f6f667d0a497420737566666963657320746f206170706c7920746865206e656761746976697479206c656d6d61202874686520757375616c2070726f6f6620686f6c647320632e662e0a5c636974655b332e33395d7b4b4d7d2920736f20746861742024453d462420616e6420746875732024665e7b2a7d5c6c65667428415c7269676874293d675e7b2a7d5c6c65667428425c726967687429242e250a7b7d2054686520726573756c74207468656e20666f6c6c6f77732066726f6d20746865207269676964697479206c656d6d6120250a7b7d20776869636820616c736f20686f6c647320756e646572207468652073616d652070726f6f66206173205c636974655b312e365d7b4b4d7d2e0a5c656e647b70726f6f667d0a5c626567696e7b6c656d6d617d0a5c6c6162656c7b6c656d3a434c5f362e347d5c636974655b362e345d7b434c7d250a7b7d204c657420245c6c65667428582c5c44656c74615c7269676874292420612070726f6a656374697665206b6c7420706169722c20616e642024663a585c746f2059240a6120636f6d706f73697465206f6620245c6c656674284b5f7b587d2b5c44656c74615c726967687429242d64697669736f7269616c20636f6e7472616374696f6e730a616e6420245c6c656674284b5f7b587d2b5c44656c74615c726967687429242d666c6970732e205468656e20666f72206576657279207265736f6c7574696f6e0a5c5b0a5c78796d61747269787b575c61725b725d5e7b707d5c61725b645d5f7b717d202620585c5c0a595c61725b75725d5f7b667d0a7d0a5c5d0a206f66202466242c200a5c5b0a705e7b2a7d5c6c656674284b5f7b587d2b5c44656c74615c7269676874293d715e7b2a7d5c6c656674284b5f7b597d2b665f7b2a7d5c44656c74615c7269676874292b450a5c5d0a20776974682024453e30242061202471242d657863657074696f6e616c2064697669736f722e205468657265666f7265202466242063616e6e6f742062650a616e2069736f6d6f72706869736d2e204279207468652061626f766520666f726d756c612c200a5c5b0a485e7b307d5c6c65667428582c4b5f7b587d2b5c44656c74615c7269676874295c617070726f7820485e7b307d5c6c65667428592c4b5f7b597d2b665f7b2a7d5c44656c74615c7269676874292e0a5c5d0a205c656e647b6c656d6d617d0a5c626567696e7b70726f6f667d0a466f6c6c6f777320656173696c792066726f6d205c636974655b332e33385d7b4b4d7d2e205c656e647b70726f6f667d0a5c626567696e7b6c656d6d617d0a5c6c6162656c7b434c352e347d5c636974655b4578632049492e342e325d7b4861727d250a7b7d204c6574202458242062652061207265647563656420736368656d652c2024592420612073657061726174656420736368656d652c20616e64206c6574202466240a616e64202467242062652074776f206d6f72706869736d732066726f6d2024582420746f202459242e20417373756d6520746861742024667c5f7b557d3d677c5f7b557d240a6f6e2061205a617269736b692064656e7365206f70656e207375627365742024555c7375627365742058242e205468656e2024663d67242e200a5c656e647b6c656d6d617d0a0a5c73656374696f6e7b466c6970737d0a5c626567696e7b646566696e6974696f6e7d0a5c6c6162656c7b6465663a466c69704465667d250a7b7d205c636974655b332e33335d7b4b4d7d204c6574202458242061206e6f6d616c20736368656d6520616e6420244424206120245c6d61746862627b517d242d64697669736f720a6f6e202458242073756368207468617420244b5f7b587d2b442420697320245c6d61746862627b517d242d436172746965722e204120245c6c656674284b5f7b587d2b445c726967687429245c7465787462667b2d666c697070696e670a636f6e7472616374696f6e7d20697320612070726f706572206269726174696f6e616c206d6f72706869736d2024663a585c746f20592420746f2061206e6f726d616c0a736368656d65202459242073756368207468617420244578635c6c65667428665c726967687429242068617320636f64696d656e73696f6e206174206c656173740a74776f20696e2024582420616e6420242d5c6c656674284b5f7b587d2b445c72696768742924206973202466242d616d706c652e2041206e6f726d616c20736368656d650a24585e7b2b7d2420746f676574686572207769746820612070726f706572206269726174696f6e616c206d6f72706869736d2024665e7b2b7d3a585e7b2b7d5c746f2059240a69732063616c6c6564206120245c6c656674284b2b445c726967687429242d5c7465787462667b666c6970207d6f662024662420696620250a7b7d200a0a28312920244b5f7b585e7b2b7d7d2b445e7b2b7d2420697320245c6d61746862627b517d242d436172746965722c2077686572652024445e7b2b7d242069730a746865206269726174696f6e616c207472616e73666f726d206f6620244424206f6e2024585e7b2b7d240a0a28322920244b5f7b585e7b2b7d7d2b445e7b2b7d242069732024665e7b2b7d242d616d706c652c20616e64200a0a283329202445785c6c65667428665e7b2b7d5c726967687429242068617320636f64696d656e73696f6e206174206c656173742074776f20696e2024585e7b2b7d242e200a0a54686520696e647563656420726174696f6e616c206d617020245c7068693a585c746f20585e7b2b7d2420697320736f6d6574696d65732063616c6c656420610a245c6c656674284b2b445c726967687429242d666c6970206279206162757365206f66206e6f746174696f6e2e200a5c656e647b646566696e6974696f6e7d0a5c626567696e7b7468656f72656d7d0a5c6c6162656c7b74686d3a466c69704578697374737d4c657420245c6c65667428582c5c44656c74615c7269676874292420626520612070726f6a6563746976650a245c6d61746862627b517d242d666163746f7269616c206b6c74206269672070616972206f662072656c61746976652064696d656e73696f6e20243224206f7665720a612044565220245224207769746820706572666563742072657369647565206669656c6420246b24206f662063686172616374657269737469632024703e30240a616e642070657266656374206672616374696f6e206669656c6420244b242e20537570706f736520746861742024663a585c746f205924206973206120244b2b5c44656c7461240a666c697070696e6720636f6e7472616374696f6e2e2049662024525c6c656674284b5f7b587d2b5c44656c74615c726967687429242069732066696e6974656c790a67656e6572617465642c207468656e2074686520245c6c656674284b2b5c44656c74615c726967687429242d666c6970206f6620246624206578697374732e205c656e647b7468656f72656d7d0a5c626567696e7b70726f6f667d0a466f6c6c6f777320656173696c7920617320696e205c636974655b362e325d7b4b4d7d2c205c636974655b362e335d7b434c7d2e205c656e647b70726f6f667d0a5c626567696e7b72656d61726b7d0a5c6c6162656c7b72656d3a466c6970497351466163746f7269616c7d4279205c636974655b312e325d7b4a4b577d2c2074686520666c6970206f66202466240a696e2074686520736974756174696f6e2061626f766520697320245c6d61746862627b517d2d24666163746f7269616c2e20250a7b7d200a5c656e647b72656d61726b7d0a0a5c73656374696f6e7b52756e6e696e6720746865204d696e696d616c204d6f64656c2050726f6772616d20666f722047656e6572616c20547970657d0a5c626567696e7b7468656f72656d7d0a5c6c6162656c7b4269675465726d696e616c4361736552756e6e696e674d4d507d204c657420245c6c65667428582c5c44656c74615c726967687429242062650a612070726f6a65637469766520245c6d61746862627b517d242d666163746f7269616c206b6c742070616972206f662072656c61746976652064696d656e73696f6e0a243224206f76657220612044565220245224207769746820706572666563742072657369647565206669656c6420246b24206f662063686172616374657269737469630a24703e302420616e642070657266656374206672616374696f6e206669656c6420244b242e20537570706f736520244b5f7b587d2b5c44656c7461242069730a62696720616e64206c6f6720736d6f6f7468206f766572202452242e205468656e20746865206d696e696d616c206d6f64656c2070726f6772616d20666f7220245c6c65667428582c5c44656c74615c726967687429240a63616e2062652072756e2c20726573756c74696e6720696e2061207465726d696e6174696e67207373657175656e6365206f6620666c69707320616e642064697669736f7269616c0a636f6e7472616374696f6e732e205c656e647b7468656f72656d7d0a5c626567696e7b70726f6f667d0a4966206e65636573736172792c20657874656e642024522420746f20626520636f6d706c657465207769746820616c67656272616963616c6c7920636c6f7365640a72657369647565206669656c6420246b242e204920626567696e2073696d696c617220746f205c636974655b362e325d7b434c7d2e204c6574202441242062650a61206269672064697669736f722073756368207468617420244b5f7b587d2b5c44656c74612b4124206973206e65662e204c657420245c616c7068615f7b317d240a62652074686520736d616c6c65737420706f736974697665207265616c206e756d6265722073756368207468617420244b5f7b587d2b5c44656c74612b5c616c7068615f7b317d41240a6973206e65662e20250a7b7d2044656e6f746520627920245c7661727068693a4469765f7b5c6d61746862627b527d7d5c6c65667428585c7269676874295c746f204e5e7b317d5c6c65667428585c7269676874295f7b5c6d61746862627b527d7d240a746865206e61747572616c2070726f6a656374696f6e2c20616e64206c657420245c7c5c63646f745c7c2420616e79206e6f726d206f6e20244e5e7b317d5c6c65667428585c7269676874295f7b5c6d61746862627b527d7d242e0a5069636b2066696e6974656c79206d616e792062696720245c6d61746862627b517d242d64697669736f72732024485e7b317d2c2e2e2e2c485e7b727d2420737563680a746861743a200a0a28312920245c7c5c7661727068695c6c656674285c44656c74612b5c616c7068615f7b317d415c7269676874292d5c7661727068695c6c65667428485e7b697d5c7269676874295c7c5c6c6c31240a666f7220616c6c20246924200a0a2832292077726974696e6720245c6d61746863616c7b437d3d5c73756d5f7b693d317d5e7b727d5c6d61746862627b527d5f7b2b7d5c6c656674284b5f7b587d2b485e7b697d5c7269676874295c737562736574204469765f7b5c6d61746862627b527d7d5c6c65667428585c726967687429242c0a7765206861766520244b5f7b587d2b5c44656c74612b5c616c7068615f7b317d415c696e20696e745c205c6d61746863616c7b437d2c2420616e64207468652064696d656e73696f6e0a6f662074686520636f6e6520245c7661727068695c6c656674285c6d61746863616c7b437d5c7269676874295c737562736574204e5e7b317d5c6c65667428585c7269676874295f7b5c6d61746862627b527d7d240a6973202464696d5c204e5e7b317d5c6c65667428585c7269676874295f7b5c6d61746862627b527d7d24200a0a28332920245c6c65667428582c485f7b697d5c72696768742924206973206b6c7420616e64206c6f6720736d6f6f746820666f7220616c6c2024692420776974680a24737570705c6c656674284b5f7b587d2b5c73756d20485f7b697d5c726967687429242073696d706c65206e6f726d616c2063726f7373696e67732e200a0a7b7d20496e2074686520666972737420737465702c2073696e63652024485f7b697d2420617265206c6f6720736d6f6f74682c207468656e206279205468656f72656d0a5c7265667b47656e6572616c697a656446696e69746547656e65726174696f6e7d2c207468652072696e67200a5c5b0a525c6c65667428582c4b5f7b587d2b5c44656c74612c4b5f7b587d2b485e7b317d2c2e2e2e2c4b5f7b587d2b485e7b727d5c7269676874290a5c5d0a2069732066696e6974656c792067656e6572617465642e2054687573206170706c79696e67205468656f72656d205c7265667b54686d332e397d2c2024537570705c20523d5c62696763757020435f7b6a7d240a697320726174696f6e616c20706f6c7968656472616c20616e642024435e7b6a7d3d537570705c20525c6361705c7661727068695e7b2d317d5c6c656674284e65665c6c65667428585c7269676874295c726967687429240a697320726174696f6e616c20706f6c7968656472616c2c20616e64207468657265206973206120726174696f6e616c20636f64696d656e73696f6e2024312420666163650a6f6620244e65665c6c65667428585c7269676874292e24205468757320245c616c7068615f7b317d5c696e5c6d61746862627b517d5f7b2b7d2c2420616e640a77652063616e2066696e6420616e2065787472656d616c2072617920245c6d6174686672616b7b527d5c7375627365745c6f7665726c696e657b4e457d5c6c65667428585c726967687429240a6475616c20746f207468697320666163652077686963682077696c6c207361746973667920245c6c656674284b5f7b587d2b5c44656c74612b5c616c7068615f7b317d415c7269676874292e5c6d6174686672616b7b527d3d30240a616e6420245c6c656674284b5f7b587d2b5c44656c74615c7269676874292e5c6d6174686672616b7b527d3c30242e204279205468656f72656d205c7265667b436f6e655468656f72656d4f6e527d2c0a74686973207261792063616e20626520636f6e7472616374656420756e6465722061206269726174696f6e616c20636f6e7472616374696f6e3a2024665e7b5c7072696d657d3a585c746f20585e7b5c7072696d657d242e200a0a49662024665e7b5c7072696d657d2420697320612064697669736f7269616c20636f6e7472616374696f6e2c2077726974652024665f7b317d3d665e7b5c7072696d657d240a616e642073657420245c44656c74615f7b327d3d665f7b312a7d5c44656c7461242c2024415f7b327d3d665f7b312a7d41242c20736f2024415f7b327d240a697320616761696e2062696720616e6420244b5f7b585f7b327d7d2b5c44656c74615f7b327d2b5c616c7068615f7b317d415f7b327d24206973206e65662e2042790a70726f70657274696573203120616e6420332061626f766520776520686176652066696e6974652067656e65726174696f6e206f662024525c6c65667428585f7b327d2c4b5f7b585f7b327d7d2b5c44656c74615f7b327d5c726967687429242c0a24525c6c65667428585f7b327d2c4b5f7b585f7b327d7d2b5c44656c74615f7b327d2c4b5f7b585f7b327d7d2b5c44656c74615f7b327d2b415f7b327d5c7269676874292c240a616e64200a5c5b0a525c6c65667428585f7b327d2c4b5f7b585f7b327d7d2b5c44656c74615f7b327d2c4b5f7b585f7b327d7d2b485f7b327d5e7b317d2c2e2e2e2c4b5f7b585f7b327d7d2b485f7b327d5e7b727d5c7269676874290a5c5d0a5c5b0a5c617070726f7820525c6c65667428582c4b5f7b587d2b5c44656c74612c4b5f7b587d2b485e7b317d2c2e2e2e2c4b5f7b587d2b485e7b727d5c7269676874290a5c5d0a20736f2074686520617267756d656e7420696e207468652070726576696f75732070617261677261706820676976657320616e6f746865722065787472656d616c0a72617920616e64207468652070726f636573732063616e2062652072657065617465642e200a0a49662c206f6e20746865206f746865722068616e642c2024665e7b5c7072696d657d24206973206120736d616c6c20636f6e7472616374696f6e2c207468656e0a6279205468656f72656d205c7265667b74686d3a466c69704578697374737d2c20616e64206170706c79696e67205468656f72656d205c7265667b636f723a42696746696e69746547656e65726174696f6e7d2c0a74686520666c6970206f662074686520636f6e7472616374696f6e206578697374732028632e662e20646566696e6974696f6e205c7265667b6465663a466c69704465667d292e0a57726974652024665f7b317d2420666f722074686520696e6475636564206d6f72706869736d20746f2074686520666c697020616e642073657420245c44656c74615f7b327d3d665f7b312a7d5c44656c7461242c0a24415f7b327d3d665f7b312a7d41242c20736f2024415f7b327d2420697320616761696e2062696720616e6420244b5f7b585f7b327d7d2b5c44656c74615f7b327d2b5c616c7068615f7b317d415f7b327d240a6973206e65662e204279204c656d6d61205c7265667b6c656d3a436f7852696e6753616d654166746572436f6e7472616374696f6e7353757266616365737d2c0a776520686176652066696e6974652067656e65726174696f6e206f660a5c5b0a525c6c65667428585f7b327d2c4b5f7b585f7b327d7d2b5c44656c74615f7b327d5c7269676874290a5c5d0a20616e640a5c5b0a525c6c65667428585f7b327d2c4b5f7b585f7b327d7d2b5c44656c74615f7b327d2c4b5f7b585f7b327d7d2b5c44656c74615f7b327d2b415f7b327d5c7269676874292e0a5c5d0a46696e616c6c792c2077652063616e206c65742024485f7b327d5e7b727d3d665f7b312a7d485e7b727d242c20736f2074686174206170706c79696e67204c656d6d610a5c7265667b6c656d3a436f7852696e6753616d654166746572436f6e7472616374696f6e7353757266616365737d20746f20616368696576652066696e6974650a67656e65726174696f6e206f66200a5c5b0a525c6c65667428585f7b327d2c4b5f7b585f7b327d7d2b5c44656c74615f7b327d2c4b5f7b585f7b327d7d2b485f7b327d5e7b317d2c2e2e2e2c4b5f7b585f7b327d7d2b485f7b327d5e7b727d5c7269676874292c0a5c5d0a77652063616e2073696d696c61726c7920726570656174207468652070726f636573732e200a0a4e6f7720737570706f736520746865726520697320616e20696e66696e6974652073657175656e6365206f6620666c697073207374617274696e6720617420737465700a246a242e20492077696c6c2073686f77206c6561647320746f206120636f6e74726164696374696f6e2e20492070726f6365656420616c6d6f737420766572626174696d0a617320696e205c636974655b362e355d7b434c7d2e20427920636f6e737472756374696f6e2c2024435e7b6a7d2420636f6e7461696e7320616e206f70656e0a6e65696768626f72686f6f64206f6620746865206e65662064697669736f7220244b5f7b585f7b6a7d7d2b5c44656c74615f7b6a7d2b5c616c7068615f7b6a7d415f7b6a7d242c0a736f2024435e7b6a7d2420636f6e7461696e7320616d706c652064697669736f727320696e2069747320696e746572696f722e20546875732074686520636f6e650a245c7661727068695c6c65667428537570705c20525f7b6a7d5c7269676874295c737562736574204e5e7b317d5c6c65667428585f7b6a7d5c726967687429240a616c736f206861732064696d656e73696f6e202464696d5c204e5e7b317d5c6c65667428585f7b6a7d5c7269676874295f7b5c6d61746862627b527d7d242e204c65740a24537570705c20525e7b6a7d3d5c6269676375705f7b6b7d435f7b6b7d5e7b6a7d242074686520636f6172736573742066696e69746520726174696f6e616c20706f6c7968656472616c0a7375626469766973696f6e2066726f6d205468656f72656d205c7265667b74686d332e357d2833292e20466f722024693e6a242c206c65742024435f7b6b7d5e7b697d5c737562736574204469765f7b5c6d61746862627b527d7d5c6c65667428585f7b697d5c726967687429240a64656e6f7465207468652070726f706572207472616e73666f726d206f662024435f7b6b7d5e7b6a7d2420616e642024435e7b697d5c737562736574204469765f7b5c6d61746862627b527d7d5c6c65667428585f7b697d5c726967687429242c0a7468652070726f706572207472616e73666f726d206f662024435e7b6a7d242e204279204c656d6d61205c7265667b6c656d3a434c5f50757368666f72776172645f4c696e6561727d2c0a666f722065766572792067656f6d65747269632076616c756174696f6e20245c47616d6d61242c20746865206173796d70746f746963206f726465722066756e6374696f6e0a245c7369676d615f7b5c47616d6d617d24206973206c696e656172206f6e20656163682024435f7b6b7d5e7b6a7d242e200a0a427920636f6e737472756374696f6e2069662024303c5c616c7068615c6c655c616c7068615f7b317d242c207468656e20244b5f7b585f7b6a7d7d2b5c44656c74615f7b6a7d2b5c616c70686120415f7b6a7d5c696e20496e745c20435e7b6a7d242c0a736f20250a7b7d20244b5f7b585f7b697d7d2b5c44656c74615f7b697d2b5c616c7068615f7b697d415f7b697d5c696e20696e745c20435e7b697d2420666f7220616c6c2024693e6a242e0a53696e636520244b5f7b585f7b697d7d2b5c44656c74615f7b697d2b5c616c7068615f7b697d415f7b697d24206973206e65662c207468656e20627920726571756972656d656e740a2834292061626f766520616e64204c656d6d61205c7265667b54686d332e367d2c20244b5f7b585f7b697d7d2b5c44656c74615f7b697d2b5c616c7068615f7b697d415f7b697d5c696e20537570705c20525f7b697d242e0a546875732c206279205468656f72656d205c7265667b54686d332e397d2c20666f722065616368202469242074686572652065786973747320616e20696e6465780a246b2420737563682074686174202074686520696d616765206f662024435f7b6b7d5e7b697d2420696e20244e5e7b317d5c6c65667428585f7b697d5c7269676874295f7b5c6d61746862627b527d7d240a6973206120737562736574206f66204e6566245c6c65667428585f7b697d5c726967687429242e205468657265666f72652c200a5c5b0a5c7661727068695c6c65667428435f7b6b7d5e7b317d5c7269676874295c7375627365745c6c65667428665f7b692d317d5c636972635c63646f74735c6369726320665f7b317d5c7269676874295e7b2a7d4e65665c6c65667428585f7b697d5c7269676874292e0a5c5d0a2053696e6365207468657265206172652066696e6974656c79206d616e7920636f6e65732024435f7b6b7d5e7b6a7d242c207468657265206172652074776f20696e64696365730a24702420616e64202471242073756368207468617420245c6c65667428665f7b702d317d5c636972635c63646f74735c6369726320665f7b317d5c7269676874295e7b2a7d4e65665c6c65667428585f7b707d5c726967687429240a616e6420245c6c65667428665f7b712d317d5c636972635c63646f74735c6369726320665f7b317d5c7269676874295e7b2a7d4e65665c6c65667428585f7b717d5c726967687429240a7368617265206120636f6d6d6f6e20696e746572696f7220706f696e742e20546875732c206279204c656d6d61205c7265667b6c656d3a434c5f352e337d2c207468650a6d61702024585f7b707d5c746f20585f7b717d242069732061206d6f72706869736d2e204279204c656d6d61205c7265667b434c352e347d2c2069742069730a7468657265666f726520616e2069736f6d6f72706869736d2e205468697320636f6e74726164696374732052656d61726b205c7265667b6c656d3a434c5f362e347d2e200a5c656e647b70726f6f667d0a0a5c73656374696f6e7b526564756374696f6e7320546f2047656e6572616c20436173657d0a5c626567696e7b6c656d6d617d0a5c636974655b322e382e335d7b484d58323031347d205c6c6162656c7b526564756374696f6e4c656d6d617d250a5c626567696e7b636f6d6d656e747d0a6f6b206279206861636f6e2c206275742070726f6261626c79206e65656420746f20636865636b206d6f7265206361726566756c6c7920666f72207468657369730a707572706f7365730a5c656e647b636f6d6d656e747d0a4c657420245c6c65667428582c5c44656c74615c726967687429242062652061206c6f6720736d6f6f74682070616972207768696368206973206120736368656d650a6f662064696d656e73696f6e206174206d6f7374202433242c20776974682074686520636f656666696369656e7473206f6620245c44656c7461242062656c6f6e67696e670a746f202428302c315d242c20616e642077697468202458242070726f6a6563746976652e20496620245c6c65667428582c5c44656c74615c726967687429240a6861732061207765616b206c6f672063616e6f6e6963616c206d6f64656c2c207468656e20746865726520697320612073657175656e636520245c70693a595c746f2058240a6f6620736d6f6f746820626c6f7720757073206f662074686520737472617461206f6620245c44656c746124207375636820746861742069662077652077726974650a244b5f7b597d2b5c47616d6d613d5c70695e7b2a7d5c6c656674284b5f7b587d2b5c44656c74615c7269676874292b45242c20776865726520245c47616d6d615c676530240a616e642024455c676530242068617665206e6f20636f6d6d6f6e20636f6d706f6e656e74732c20245c70695f7b2a7d5c47616d6d613d5c44656c74612420616e640a245c70695f7b2a7d453d302420616e64206966207765207772697465200a5c5b0a5c47616d6d615e7b5c7072696d657d3d5c47616d6d612d5c47616d6d615c7765646765204e5f7b5c7369676d617d5c6c65667428592c4b5f7b597d2b5c47616d6d615c7269676874292c0a5c5d0a207468656e20245c6d61746862627b427d5f7b2d7d5c6c65667428592c4b5f7b597d2b5c47616d6d615e7b5c7072696d657d5c7269676874292420636f6e7461696e730a6e6f20737472617461206f6620245c47616d6d615e7b5c7072696d657d2e2420496620245c44656c746124206973206120245c6d61746862627b517d242d64697669736f722c0a7468656e20245c47616d6d615e7b5c7072696d657d24206973206120245c6d61746862627b517d242d64697669736f722e205c656e647b6c656d6d617d0a5c626567696e7b70726f6f667d0a466f6c6c6f777320656173696c792066726f6d20746865206369746564207468656f72656d2e5c656e647b70726f6f667d0a5c626567696e7b6c656d6d617d0a5c636974655b352e335d7b484d58323031347d5c6c6162656c7b6c656d3a4e61737479496e657175616c697479526564756374696f6e7d250a4c65742024582f522420612070726f6a65637469766520736368656d65206f662072656c61746976652064696d656e73696f6e20243224206f7665722061204456520a245224207769746820616c67656272616963616c6c7920636c6f7365642072657369647565206669656c6420616e642070657266656374206672616374696f6e0a6669656c642e204c657420245c6c65667428582c5c44656c74615c726967687429242062652061206c6f6720736d6f6f746820646c74207061697220776974680a24582420245c6d61746862627b517d242d666163746f7269616c20616e642070726f6a65637469766520616e6420245c44656c746124206120245c6d61746862627b517d242d64697669736f722e0a496620245c50686924206973206120245c6d61746862627b5c6d61746862627b517d7d242d64697669736f7220737563682074686174200a5c5b0a305c6c655c44656c74612d5c5068695c6c65204e5f7b5c7369676d617d5c6c65667428582c4b5f7b587d2b5c44656c74615c7269676874292c0a5c5d0a207468656e207374657073206f662074686520244b5f7b587d2b5c506869242d6d696e696d616c206d6f64656c2070726f6772616d20617265207374657073206f660a74686520244b5f7b587d2b5c5068692b745c6c656674285c44656c74612d5c5068695c72696768742924206d696e696d616c206d6f64656c2070726f6772616d0a7768656e202474242069732073756666696369656e746c7920736d616c6c2e20467572746865726d6f72652c207465726d696e6174696f6e20666f7220245c6c65667428582c5c5068695c726967687429240a696d706c696573207465726d696e6174696f6e20666f7220245c6c65667428582c5c44656c74615c7269676874292e2420250a5c626567696e7b636f6d6d656e747d0a6e6565647320626967207465726d696e6174696f6e2066697273742e2e2e2c20736f206f6e636520796f752067657420626967207465726d696e6174696f6e20796f75720a676f6f642e2e2e200a5c656e647b636f6d6d656e747d0a5c656e647b6c656d6d617d0a5c626567696e7b70726f6f667d0a2853696d696c61722070726f6f6620746f20746865206369746564205468656f72656d292e204c65742024663a585c746f2059242074686520726573756c74206f660a72756e6e696e67206120245c6c656674284b5f7b587d2b5c5068695c72696768742924206d696e696d616c206d6f64656c2070726f6772616d20616e64206c65740a24595c746f205a242062652074686520616d706c65206d6f64656c206f6620244b5f7b587d2b5c506869242e204c657420245c44656c74615f7b747d3d745c44656c74612b5c6c65667428312d745c7269676874295c506869240a736f20746861742069662024303c745c6c6c30242c207468656e2024662420697320616c736f206120245c6c656674284b5f7b587d2b5c44656c74615f7b747d5c726967687429242d4d4d502e0a4c6574202443242067656e6572617465206120244b5f7b587d2b5c44656c74615f7b747d242d6e656761746976652065787472656d616c2072617920616e640a737570706f7365207468617420245c6c656674284b5f7b587d2b5c5068695c7269676874292e433e30242e204170706c79696e67205468656f72656d205c7265667b436f6e655468656f72656d7d0a6f6e20746865207370656369616c2066696265722c200a5c5b0a2d345c6c655c6c656674284b5f7b587d2b5c44656c74615c7269676874292e433c302e0a5c5d0a5468656e2c20666f6c6c6f77696e672074686520696e657175616c697469657320696e205c636974655b352e315d7b484d58323031347d2c20676976657320610a636f6e74726164696374696f6e2069662024303c743c5c667261637b317d7b357d2e2420546875732065766572792073746570206f662074686520244b5f7b587d2b5c44656c74615f7b747d240a77697468207363616c696e67206f6620616e20616d706c652064697669736f7220697320245c6c656674284b5f7b587d2b5c5068695c726967687429242d7472697669616c2c0a736f2061667465722066696e6974656c79206d616e792073746570732074686572652069732061206d6f64656c2024673a585c746f20572420636f6e7472616374696e670a74686520636f6d706f6e656e7473206f6620244e5f7b5c7369676d617d5c6c65667428582c4b5f7b587d2b5c44656c74615f7b747d5c726967687429242028746869730a686f6c64732077697468206e6f206368616e6765732066726f6d205c636974655b322e372e315d7b484d58323031347d292e20546875732c2061732024737570705c6c656674285c44656c74612d5c5068695c7269676874295c73756273657420737570705c204e5f7b5c7369676d617d5c6c65667428582c4b5f7b587d2b5c44656c74615c7269676874293d737570705c204e5f7b5c7369676d617d5c6c65667428582c4b5f7b587d2b5c44656c74615f7b747d5c726967687429242c0a7468656e2024675f7b2a7d5c6c656674284b5f7b597d2b5c5068695c72696768742924206973206e656620616e64202f206f722073656d69616d706c65207768656e657665720a24675f7b2a7d5c6c656674284b5f7b587d2b5c44656c74615c726967687429242069732c20616e64205c636974655b322e372e325d7b484d58323031347d202877686963680a686f6c6473207573696e67206f6e6c7920746865206c6f6720736d6f6f7468207265736f6c7574696f6e2920696d706c69657320746861742024672420697320610a6d696e696d616c206d6f64656c206f6620245c6c65667428582c5c44656c74615c726967687429242c20776869636820697320676f6f64207768656e20245c6c65667428582c5c5068695c726967687429240a686173206120676f6f64206d696e696d616c206d6f64656c2e20205c656e647b70726f6f667d0a5c626567696e7b6c656d6d617d0a5c636974655b322e335d7b474c7d250a5c626567696e7b636f6d6d656e747d0a676f6f64202d20696e20746865206c6f6720736d6f6f74682063617365202d206e6f74652049206861766520746869732061742074686520656e64206f66207468650a6879706f7468657369732e2e0a5c656e647b636f6d6d656e747d0a5c626567696e7b636f6d6d656e747d0a5c656e647b636f6d6d656e747d0a7b7d205c6c6162656c7b6c656d3a474d4d5f4946465f474d4d7d204c65742024582f5224206120736368656d652077686963682069732070726f6a6563746976650a6f662072656c61746976652064696d656e73696f6e20243224206f7665722065697468657220612044565220245224207769746820616c67656272616963616c6c790a636c6f7365642072657369647565206669656c6420616e642070657266656374206672616374696f6e206669656c64206f72206f7665722061206669656c642e204c65740a245c6c65667428582c5c44656c74615c726967687429242062652061206c6f6720736d6f6f7468206b6c74207061697220616e6420245c7661727068693a575c746f2058240a61206c6f67207265736f6c7574696f6e206f6620245c6c65667428582c5c44656c74615c7269676874292e242043686f6f736520245c44656c74615f7b577d240a736f207468617420244b5f7b577d2b5c44656c74615f7b577d3d5c7661727068695e7b2a7d5c6c656674284b5f7b587d2b5c44656c74615c7269676874292b45240a7769746820245c44656c74615f7b577d2420616e64202445242065666665637469766520245c6d61746862627b517d242d5765696c2064697669736f72730a77697468206e6f20636f6d6d6f6e20636f6d706f6e656e742e204c65742024463d5c756e6465727365747b465f7b697d5c205c7661727068692d657863657074696f6e616c5c207072696d655c2064697669736f727d7b5c73756d7d465f7b697d240a616e6420245c44656c74615f7b577d5e7b5c657073696c6f6e7d3d5c44656c74615f7b577d2b5c657073696c6f6e2046242c207468656e20245c6c65667428572c5c44656c74615f7b577d5e7b5c657073696c6f6e7d5c726967687429240a697320616e20245c657073696c6f6e242d6c6f6720736d6f6f7468206d6f64656c206f6620245c6c65667428582c5c44656c74615c726967687429242e205468656e0a666f722024303c5c657073696c6f6e5c6c6c31242c20612028676f6f6429206d696e696d616c206d6f64656c20245c7068693a5c6c65667428572c5c44656c74615f7b577d5e7b5c657073696c6f6e7d5c7269676874295c746f5c6c65667428575f7b6d696e7d2c5c44656c74615f7b575f7b6d696e7d7d5e7b5c657073696c6f6e7d5c726967687429240a697320616c736f20612028676f6f6429206d696e696d616c206d6f64656c20666f7220245c6c65667428582c5c44656c74615c726967687429242e205c656e647b6c656d6d617d0a5c626567696e7b70726f6f667d0a466f6c6c6f777320656173696c792066726f6d205c636974655b332e362e31302c20332e362e31315d7b4243484d7d2e20250a5c626567696e7b636f6d6d656e747d0a5c7465787462667b6e6f7465202d2074686573652073686f756c6420686f6c6420776974686f75742066697273742070726f76696e67204d4d5020666f72206269670a70616972732e207d0a5c656e647b636f6d6d656e747d0a0a5c656e647b70726f6f667d0a0a0a0a255c696e636c7564657b63686170357d202570736575646f656666656374697665204d4d50206f766572204456520a0a5c636861707465727b4d696e696d616c204d6f64656c7320666f722041726974686d65746963205468726565666f6c64204765726d737d5c6c6162656c7b63686170357d0a0a5c73656374696f6e7b4578697374656e6365206f66204d696e696d616c204d6f64656c732028666f72206765726d7329205370656369616c20436173657d0a5c626567696e7b6c656d6d617d0a5c636974655b332e315d7b484d58323031307d5c6c6162656c7b6c656d3a4d6f64756c69332e317d20250a4c657420245c6c65667428582c5c44656c74615c72696768742924206265206120245c6d61746862627b517d242d666163746f7269616c206b6c7420706169720a6f662072656c61746976652064696d656e73696f6e20243224206f76657220612044565220245224207769746820706572666563742072657369647565206669656c640a246b24206f662063686172616374657269737469632024703e302420616e642070657266656374206672616374696f6e206669656c6420244b242e20417373756d650a74686174200a5c5b0a5c6d61746862627b427d5f7b2d7d5c6c65667428585f7b6b7d2c4b5f7b585f7b6b7d7d2b5c44656c74615f7b6b7d5c7269676874290a5c5d0a20636f6e7461696e73206e6f206e6f6e2d63616e6f6e6963616c2063656e74726573206f6620245c6c65667428585f7b6b7d2c5c44656c74615f7b6b7d5c726967687429242e0a4c65742024663a585c746f20592420626520612073746570206f662074686520245c6c656674284b5f7b587d2b5c44656c74615c726967687429242d4d4d502e0a496620246624206973206269726174696f6e616c20616e64202456242069732061206e6f6e2d63616e6f6e6963616c2063656e747265206f6620245c6c65667428582c5c44656c74615c7269676874292c240a7468656e20245624206973206e6f7420636f6e7461696e656420696e2074686520696e64657465726d696e616379206c6f637573206f66202466242c2024565f7b307d240a6973206e6f7420636f6e7461696e656420696e2074686520696e64657465726d696e616379206c6f637573206f662024665f7b307d242c20616e642074686520696e64756365640a6d61707320245c7068693a565c746f20572420616e6420245c7068695f7b6b7d3a565f7b6b7d5c746f20575f7b6b7d2420617265206269726174696f6e616c2c0a77686572652024573d665c6c65667428565c7269676874292e24204c657420245c47616d6d613d665f7b2a7d5c44656c746124202e205468656e20245c6d61746862627b427d5f7b2d7d5c6c65667428595f7b307d2c4b5f7b595f7b307d7d2b5c47616d6d615f7b307d5c726967687429240a636f6e7461696e73206e6f206e6f6e2d63616e6f6e6963616c2063656e74726573206f6620245c6c65667428595f7b307d2c5c47616d6d615f7b307d5c726967687429240a28736f207765206d617920726570656174207468652070726f63657373292c20616e64206966202456242069732061206e6f6e2d6b6c742063656e747265206f720a24563d58242c207468656e20245c7068693a565c746f20572420616e6420245c7068695f7b307d3a565f7b307d5c746f20575f7b307d2420617265206269726174696f6e616c0a636f6e7472616374696f6e732e204966202466242069732061204d6f72692066696272652073706163652c207468656e2024665f7b307d24206973206e6f740a6269726174696f6e616c2e205c656e647b6c656d6d617d0a5c626567696e7b70726f6f667d0a28466f6c6c6f777320656173696c792066726f6d20746865206369746564205468656f72656d292e20537570706f736520246624206973206269726174696f6e616c2e0a4c6574202456242062652061206e6f6e2d63616e6f6e6963616c2063656e747265206f6620245c6c65667428582c5c44656c74615c7269676874292e24204c65740a24673a585c746f205a242062652074686520636f6e7472616374696f6e206f66207468652065787472656d616c20726179206173736f63696174656420746f202466240a28736f20746861742024663d672420756e6c65737320246624206973206120666c6970292e204c65742024513d675c6c65667428565c726967687429242c0a616e64206c657420245c7073693a565c746f20512c242062652074686520696e6475636564206d6f72706869736d2e20417320657665727920636f6d706f6e656e740a6f662024565f7b6b7d242069732061206e6f6e2d63616e6f6e6963616c2063656e747265206f6620245c6c65667428585f7b6b7d2c5c44656c74615f7b6b7d5c726967687429242c0a7468656e206279206879706f7468657369732c20636f6d706f6e656e7473206f662024565f7b6b7d2420617265206e6f7420636f6e7461696e656420696e20245c6d61746862627b427d5f7b2d7d5c6c65667428585f7b6b7d2c4b5f7b585f7b6b7d7d2b5c44656c74615f7b6b7d5c726967687429242c0a7468757320245c7073695f7b6b7d2420697320646566696e65642061742065616368207375636820636f6d706f6e656e742c2068656e6365206973206269726174696f6e616c2e0a42792075707065722d73656d69636f6e74696e75697479206f662074686520666962657273206f6620245c707369242c20245c70736924206973206269726174696f6e616c2c0a616e64207468757320245c7068693a565c746f20515c746f2057242c20616e6420245c7068695f7b6b7d242061726520626f7468206269726174696f6e616c2e200a0a4e6f7720737570706f7365202456242069732061206e6f6e2d6b6c742063656e747265206f722024563d58242c207468652061626f766520686f6c647320696e0a74686520666972737420636173652c206173206e6f6e2d6b6c742063656e7472657320617265206e6f6e2d63616e6f6e6963616c2e20436f6d706172696e67207468650a64697363726570616e63696573206f662074686520646966666572656e7473206f662061646a756e6374696f6e20666f7220245c44656c74615f7b6b7d2420616e640a245c47616d6d615f7b6b7d2420617320696e207468652063697465642070726f6f662073686f7773207468617420245c7068695f7b6b7d2c665f7b6b7d2c240a616e64207468757320245c7068692420617265206269726174696f6e616c20636f6e7472616374696f6e732e204f6e20746865206f746865722068616e642c2069660a2466242069732061204d6f72692066696272652073706163652c207468656e2c206173207468652064696d656e73696f6e206f662074686520666962657273206f660a24663a585c746f205924206172652075707065722d73656d69636f6e74696e756f75732c2024665f7b6b7d24206973206e6f74206269726174696f6e616c2e200a5c656e647b70726f6f667d0a5c626567696e7b7468656f72656d7d0a5c636974655b332e325d7b484d58323031347d205c6c6162656c7b4d6f64756c69332e327d250a5c626567696e7b636f6d6d656e747d0a676f6f640a5c656e647b636f6d6d656e747d0a4c657420245c6c65667428582c5c44656c74615c72696768742924206265206120245c6d61746862627b517d242d666163746f7269616c206b6c7420706169720a6f662072656c61746976652064696d656e73696f6e20243224206f76657220612044565220245224207769746820706572666563742072657369647565206669656c640a246b24206f662063686172616374657269737469632024703e302420616e642070657266656374206672616374696f6e206669656c6420244b242e20417373756d650a7468617420245c6d61746862627b427d5f7b2d7d5c6c65667428585f7b6b7d2c4b5f7b585f7b6b7d7d2b5c44656c74615f7b6b7d5c7269676874292420636f6e7461696e730a6e6f206e6f6e2d63616e6f6e6963616c2063656e74726573206f6620245c6c65667428585f7b6b7d2c5c44656c74615f7b6b7d5c7269676874292420616e642069730a6c6f6720736d6f6f7468204c65742024663a585c746f20592420626520612073746570206f662074686520245c6c656674284b5f7b587d2b5c44656c74615c726967687429242d4d4d502e0a5468656e20746865206d696e696d616c206d6f64656c2070726f6772616d2077697468207363616c696e67207465726d696e61746573207573696e67206f6e6c790a636f6e7472616374696f6e732e205c656e647b7468656f72656d7d0a5c626567696e7b70726f6f667d0a2853696d696c61722070726f6f6620746f20746865206369746564207468656f72656d292e204c65742024663a585c746f2059242074686520245c6c656674284b5f7b587d2b5c44656c74615c726967687429242d4d4d500a77697468207363616c696e67206f6620616e20616d706c652064697669736f72202441242e204c657420245c47616d6d613d665f7b2a7d5c44656c74612420616e640a24423d665f7b2a7d41242e20427920636f6e737472756374696f6e2c20244b5f7b597d2b74422b5c47616d6d6124206973206e656620666f7220736f6d652024743e30242e0a4279204c656d6d61205c7265667b6c656d3a4d6f64756c69332e317d2c2024663a585c746f2059242069732061206269726174696f6e616c20636f6e7472616374696f6e0a616e642024665f7b6b7d3a585f7b6b7d5c746f20595f7b6b7d242069732061206269726174696f6e616c20636f6e7472616374696f6e2066726f6d20245c6c65667428585f7b6b7d2c74415f7b6b7d2b5c44656c74615f7b6b7d5c726967687429242e0a496620244b5f7b587d2b5c44656c746124206973206e6f742070736575646f2d6566666563746976652c207468656e20666f722024743e30242c2074686520726573756c740a6f66202466242069732061204d6f72692066696265722073706163652c20616e64206279204c656d6d61205c7265667b6c656d3a4d6f64756c69332e317d2c0a24595f7b6b7d2420697320636f766572656420627920244b5f7b595f7b6b7d7d2b74425f7b6b7d2b5c47616d6d615f7b6b7d242d6e65676174697665206375727665732c0a636f6e74726164696374696e67206269676e657373206f6620244b5f7b585f7b6b7d7d2b74415f7b6b7d2b5c44656c74615f7b6b7d242e205468757320244b5f7b587d2b5c44656c7461240a69732070736575646f2d6566666563746976652c20616e6420676976656e20616e7920245c657073696c6f6e3e30242c207765206d61792072756e20746865204d4d500a756e74696c2024743c5c657073696c6f6e242e204e6f7720776520636f6e636c756465206279205468656f72656d205c7265667b46696e6974656e6573734f664d6f64656c7353757266616365737d2e0a4c657474696e6720245c657073696c6f6e242062652074686520636f6e7374616e7420676976656e20696e2074686174207468656f72656d2c20746865206d696e696d616c0a6d6f64656c7320666f7220245c6c65667428585f7b6b7d2c74415f7b6b7d2b5c44656c74615f7b6b7d5c726967687429242061726520616c6c2069736f6d6f72706869630a24745c696e5c6c6566745b302c5c657073696c6f6e5c72696768745d242e20546875732c206f6e63652024743c5c657073696c6f6e242c20616e79206164646974696f6e616c0a7374657020696e20746865206d696e696d616c206d6f64656c2070726f6772616d2077697468207363616c696e67206d75737420626520616e2069736f6d6f72706869736d0a6f6e20746865207370656369616c2066696265722c20616e64207468757320616e2069736f6d6f72706869736d2e20546875732074686572652065786973747320610a6d696e696d616c206d6f64656c20245c6c65667428592c5c47616d6d615c7269676874292420666f7220245c6c65667428582c5c44656c74615c7269676874292e240a5c656e647b70726f6f667d0a0a5c73656374696f6e7b4578697374656e6365206f66204d696e696d616c204d6f64656c732028666f72206765726d73292047656e6572616c20436173657d0a5c626567696e7b7468656f72656d7d0a5c6c6162656c7b4d696e696d616c4d6f64656c734f6e4456527d0a4c657420245c6c65667428582c5c44656c74615c726967687429242062652061206b6c742070616972206f662072656c61746976652064696d656e73696f6e2024322c240a70726f706572206f76657220612044565220245224207769746820706572666563742072657369647565206669656c6420246b24206f662063686172616374657269737469630a24703e302420616e642070657266656374206672616374696f6e206669656c6420244b242e20417373756d65207468617420244b5f7b587d2b5c44656c7461240a697320245c6d61746862627b517d242d436172746965722c2070736575646f2d6566666563746976652c20616e64206c6f6720736d6f6f7468206f766572202452242e0a5468656e20746865206d696e696d616c206d6f64656c206f6620245c6c65667428582c5c44656c74615c72696768742924206578697374732e205c656e647b7468656f72656d7d0a5c626567696e7b70726f6f667d0a4920616761696e20737461727420627920726570656174696e672074686520726564756374696f6e206f66205c636974655b362e315d7b484d58323031347d2e0a4966206e65636573736172792c20657874656e642024522420746f20626520636f6d706c657465207769746820616c67656272616963616c6c7920636c6f7365640a72657369647565206669656c6420246b242c20736f2074686520737472617461206f6620245c44656c7461242068617665206972726564756369626c65206669626572730a6f766572202452242e204c65742024665f7b307d3a595f7b307d5c746f20585f7b307d2420626520746865206269726174696f6e616c206d6f72706869736d0a6f66204c656d6d61205c7265667b526564756374696f6e4c656d6d617d2e20556e64657220746865206c6f6720736d6f6f7468206879706f7468657369732c20616e640a73696e63652074686520737472617461206f6620245c44656c7461242068617665206972726564756369626c65206669626572732c20616e642024665f7b307d240a626c6f777320757020737472617461206f6620245c44656c74615f7b307d242c207765206d617920657874656e642024665f7b307d2420746f2061206269726174696f6e616c0a6d6f72706869736d2024663a595c746f20582f5224207768696368206973206120636f6d706f736974696f6e206f6620736d6f6f746820626c6f7720757073206f660a737472617461206f6620245c44656c7461242e205772697465200a5c5b0a4b5f7b597d2b5c47616d6d613d665e7b2a7d5c6c656674284b5f7b587d2b5c44656c74615c7269676874292b450a5c5d0a207769746820245c47616d6d615c6765302420616e642024455c6765302c242024665f7b2a7d5c47616d6d613d5c44656c7461242c20616e642024665f7b2a7d453d30242e0a5468656e20245c6c65667428592c5c47616d6d615c72696768742924206973206c6f6720736d6f6f746820616e642074686520666962726573206f6620636f6d706f6e656e74730a6f6620245c47616d6d612420617265206972726564756369626c652e204279204c656d6d61205c7265667b6c656d3a474d4d5f4946465f474d4d7d2c20245c6c65667428582c5c44656c74615c726967687429240a6861732061206d696e696d616c206d6f64656c20696620245c6c65667428592c5c47616d6d615f7b5c657073696c6f6e7d5c7269676874292420686173206120676f6f640a6d696e696d616c206d6f64656c2c20776865726520245c6c65667428592c5c47616d6d615f7b5c657073696c6f6e7d5c7269676874293d5c6c65667428592c5c47616d6d612b5c657073696c6f6e20465c726967687429240a69732074686520245c657073696c6f6e242d6c6f6720736d6f6f7468206d6f64656c206f6620245c6c65667428582c5c44656c74615c7269676874292420776974680a244624207468652073756d206f66202466242d657863657074696f6e616c2064697669736f727320616e642024303c5c657073696c6f6e5c6c6c31242e200a0a5265706c61636520245c6c65667428582c5c44656c74615c7269676874292420627920245c6c65667428592c5c47616d6d615f7b5c657073696c6f6e7d5c726967687429240a616e642073657420245c54686574615f7b6b7d3d5c44656c74615f7b6b7d2d5c44656c74615f7b6b7d5c7765646765204e5f7b5c7369676d617d5c6c65667428585f7b6b7d2c4b5f7b585f7b6b7d7d2b5c44656c74615f7b6b7d5c726967687429240a736f207468617420245c6d61746862627b427d5f7b2d7d5c6c65667428585f7b6b7d2c4b5f7b585f7b6b7d7d2b5c54686574615f7b6b7d5c7269676874292420636f6e7461696e730a6e6f20737472617461206f6620245c54686574615f7b6b7d242e204c65742024305c6c655c54686574615c6c655c44656c7461242062652074686520756e697175650a64697669736f722073756368207468617420245c54686574615f7b6b7d3d5c54686574617c5f7b585f7b6b7d7d242e204c6574202448242072656c61746976656c790a616d706c652073756368207468617420245c6c65667428582c5c54686574612b485c72696768742924206973206c6f6720736d6f6f7468206f766572202452242c0a616e6420244b5f7b587d2b5c54686574612b4824206973206269672e205468657265206973206120636f6d6d75746174697665206469616772616d3a20250a255c626567696e7b636f6d6d656e747d0a5c5b0a5c78796d61747269787b5c70695f7b2a7d5c6d61746863616c7b4f7d5f7b587d5c6c656674286d5c6c656674284b5f7b587d2b5c54686574615c7269676874292b485c7269676874295c61725b725d5c61725b645d2026205c70695f7b2a7d5c6d61746863616c7b4f7d5f7b587d5c6c656674286d5c6c656674284b5f7b587d2b5c44656c74615c7269676874292b485c7269676874295c61725b645d5c5c0a485e7b307d5c6c65667428585f7b6b7d2c5c6d61746863616c7b4f7d5f7b585f7b6b7d7d5c6c656674286d5c6c656674284b5f7b585f7b6b7d7d2b5c54686574615f7b6b7d5c7269676874292b485f7b6b7d5c7269676874295c7269676874295c61725b725d202620485e7b307d5c6c65667428585f7b6b7d2c5c6d61746863616c7b4f7d5f7b585f7b6b7d7d5c6c656674286d5c6c656674284b5f7b585f7b6b7d7d2b5c44656c74615f7b6b7d5c7269676874292b485f7b6b7d5c7269676874295c7269676874290a7d0a5c5d0a255c656e647b636f6d6d656e747d0a7b7d200a0a0a77697468207375726a65637469766520636f6c756d6e73206279205468656f72656d205c7265667b44494f507d20616e64205c636974655b352e332e32302862295d7b4c69757d2c0a616e6420776974682074686520626f74746f6d20726f7720616e2069736f6d6f72706869736d2e204170706c79696e67204e616b6179616d612773206c656d6d610a676976657320616e2069736f6d6f72706869736d206f6e2074686520746f7020726f772c20736f207468617420245c54686574615c67655c44656c74612d5c44656c74615c7765646765204e5f7b5c7369676d617d5c6c65667428582c4b5f7b587d2b5c44656c74615c7269676874292e240a416761696e206170706c79696e67205468656f72656d205c7265667b44494f507d2c20676976657320245c54686574613d5c44656c74612d5c44656c74615c7765646765204e5f7b5c7369676d617d5c6c65667428582c4b5f7b587d2b5c44656c74615c7269676874292e240a5468757320245c44656c74612d5c54686574615c6c65204e5f7b5c7369676d617d5c6c65667428582c4b5f7b587d2b5c44656c74615c726967687429242c20736f0a6279204c656d6d61205c7265667b6c656d3a4e61737479496e657175616c697479526564756374696f6e7d2c20697420737566666963657320746f2066696e640a61206d696e696d616c206d6f64656c20666f7220245c6c65667428582c5c54686574615c7269676874292e24205265706c6163696e6720245c6c65667428582c5c44656c74615c726967687429240a627920245c6c65667428582c5c54686574615c726967687429242c20697420737566666963657320746f20617373756d65207468617420245c6d61746862627b427d5f7b2d7d5c6c65667428585f7b6b7d2c4b5f7b585f7b6b7d7d2b5c44656c74615f7b6b7d5c726967687429240a636f6e7461696e73206e6f20737472617461206f6620245c44656c74615f7b307d242e204c657474696e672024412420626520616e20616d706c652064697669736f722c0a77652072756e20746865206d696e696d616c206d6f64656c2070726f6772616d2077697468207363616c696e67206f66202441242e204e6f772074686520617373756d7074696f6e730a6f66205468656f72656d205c7265667b4d6f64756c69332e327d206170706c792c20736f207765206b6e6f77207468617420245c6c65667428582c5c54686574615c726967687429240a6861732061206d696e696d616c206d6f64656c2e205c656e647b70726f6f667d0a0a0a255c696e636c7564657b63686170367d2025457874656e64696e672074686520726573756c747320746f20446564656b696e6420446f6d61696e730a0a0a5c636861707465727b476c6f62616c697a6174696f6e7d5c6c6162656c7b63686170367d0a255c6669786368617074657268656164696e6720252055736520746869732069662073656374696f6e20666f6c6c6f7773206368617074657220696d6d6564696174656c790a0a20496e2074686520666f6c6c6f77696e672073656374696f6e732c204920617474656d707420746f20676c6f62616c697a652074686520726573756c74732061626f766520746f20776f726b206f766572206120446564656b696e6420446f6d61696e2e20546869732067656e6572616c697a6174696f6e2073686f756c64206265206578706563746564206261736564206f6e207468652073746174656d656e747320616368696576656420696e205c636974657b4b6177313939342c4b6177313939387d0a0a5c73656374696f6e7b4d696e696d616c204d6f64656c7320666f722041726974686d65746963205468726565666f6c64737d0a496e20746869732073656374696f6e2c204920736b65746368207468652070726f6f66206f662074686520676c6f62616c697a6174696f6e206f66207468656f72656d205c7265667b4d696e696d616c4d6f64656c734f6e4456527d0a5c626567696e7b6c656d6d617d0a4c657420245c6c65667428582c5c44656c74615c72696768742924206265206120626967206c6f6720736d6f6f7468206b6c742070616972206f662072656c61746976650a64696d656e73696f6e20243224206f766572206120446564656b696e6420446f6d61696e202441242e20417373756d65207468617420244b5f7b587d2b5c44656c7461240a69732070736575646f2d65666665637469766520616e6420245c6d61746862627b517d242d436172746965722e205468656e20666f722065766572792024615c696e2041240a5c5b0a4e5f7b5c7369676d617d5c6c65667428582c4b5f7b587d2b5c44656c74615c7269676874297c585f7b617d3d4e5f7b5c7369676d617d5c6c65667428585f7b617d2c4b5f7b585f7b617d7d2b5c44656c74615f7b617d5c7269676874292e0a5c5d0a205c656e647b6c656d6d617d0a5c626567696e7b70726f6f667d0a417320696e205c636974655b322e332e315d7b484d58323031347d2c20697420737566666963657320746f207069636b20616e20616d706c652024412420616e640a73686f7720746861742074686572652065786973747320616e20246d5f7b307d242073756368207468617420666f7220616c6c20246d2420776520686176650a5c5b0a665f7b2a7d5c6d61746863616c7b4f7d5f7b587d5c6c656674286d6d5f7b307d5c6c656674284b5f7b587d2b5c44656c74615c7269676874292b415c7269676874295c74776f6865616472696768746172726f7720485e7b307d5c6c65667428585f7b617d2c5c6d61746863616c7b4f7d5f7b585f7b617d7d5c6c656674286d6d5f7b307d5c6c656674284b5f7b587d2b5c44656c74615c7269676874292b415c7269676874295c7269676874290a5c5d0a20666f7220246d5c676730242e20417320696e205c636974655b352e385d7b4b6177313939347d2c207765206d617920617373756d6520746861740a20244124206973206120636f6d706c6574652064697363726574652076616c756174696f6e2072696e672077686f73652072657369647565206669656c642069730a616c67656272616963616c6c7920636c6f7365642e204170706c79696e67205c636974655b562e332e32305d7b4c69757d2c20616e6420746865206173796d70746f7469630a6465666f726d6174696f6e20696e76617269616e6365206f6620706c75726967656e6572612070726f76656420696e2073656374696f6e205c7265667b44494f507d2c2069740a686f6c64732074686174200a5c5b0a485e7b307d5c6c65667428585f7b617d2c5c6d61746863616c7b4f7d5f7b585f7b617d7d5c6c656674286d6d5f7b307d5c6c656674284b5f7b587d2b5c44656c74615c7269676874292b415c7269676874295c7269676874290a5c5d0a5c5b0a5c617070726f7820485e7b307d5c6c65667428582c5c6d61746863616c7b4f7d5f7b587d5c6c656674286d6d5f7b307d5c6c656674284b5f7b587d2b5c44656c74615c7269676874292b415c7269676874295c7269676874295c6f74696d6573206b5c6c65667428615c7269676874290a5c5d0a207769746820246b5c6c65667428615c7269676874295c617070726f7820412f5c6d6174686672616b7b6d7d242c20616e6420736f20746865206c656d6d6120666f6c6c6f77732e200a5c656e647b70726f6f667d0a4e6f7720617373756d652074686174202428582c5c44656c746129242069732067656e6572616c20747970652e204279207468652061626f7665204c656d6d612c20616674657220626c6f77696e6720757020746f2061206c6f672d736d6f6f7468207465726d696e616c2066616d696c790a28617320696e205c7265667b44494f507d29207468652064697669736f7220245c54686574612420636f6e73747275637465640a746865726520686173207468652073616d65206461746120616c6f6e672074686520666962657273202873656c6620696e74657273656374696f6e0a616e6420696e74657273656374696f6e207769746820244b5f7b585f7b617d7d24292073696e6365206279206c6f672d736d6f6f74686e657373200a5c5b0a5c54686574615f7b617d3d5c44656c74615f7b617d2d5c44656c74615f7b617d5c7765646765204e5f7b5c7369676d617d5c6c656674284b5f7b585f7b617d7d2b5c44656c74615f7b617d5c7269676874290a5c5d0a5c5b0a3d5c44656c74617c5f7b585f7b617d7d2d5c44656c74617c5f7b585f7b617d7d5c7765646765204e5f7b5c7369676d617d5c6c656674284b5f7b587d2b5c44656c74615c7269676874297c5f7b585f7b617d7d0a5c5d0a5c5b0a3d5c6c6566745b5c44656c74612d5c44656c74615c7765646765204e5f7b5c7369676d617d5c6c656674284b5f7b587d2b5c44656c74615c7269676874295c72696768745d5f7b585f7b617d7d2e0a5c5d0a0a20204166746572206c6f63616c697a696e6720617420616e7920706f696e742024615c696e2041242c2074686520736974756174696f6e206f66205468656f72656d205c7265667b4269675465726d696e616c4361736552756e6e696e674d4d507d206170706c6965732e20496e20706172746963756c61722077652068617665206f6e2024415f7b2861297d2420616c6c20746865206e65636573736172792066696e6974652067656e65726174696f6e7320616e64207465726d696e6174696f6e206f6620746865206d696e696d616c206d6f64656c2070726f6772616d2e2041732074686520706963617264206e756d62657220697320626f756e646564206f766572202441242c20616e642073696e63652074686520636f6e7374616e7420676976656e2062792054616e616b6127732076616e697368696e67205468656f72656d205c7265667b74686d3a4566666563746976654b565653757266616365737d206f6e6c7920646570656e6473206f6e20746865206e656620616e64206269672064697669736f727320757365642c2077652063616e2066696e6420616e202472242073756368207468617420666f7220616c6c2073756368202461242076616e697368696e67206f66200a5c5b0a485e31205c6c65667428206d284b5f7b585f7b2861297d5e677d2b5c44656c746120295c7269676874290a5c5d0a686f6c64732c2077686572652024585f7b2861297d5e67242069732074686520676f6f64206d696e696d616c206d6f64656c206f6620245824206c6f63616c697a6564206174202461242e200a4166746572206120626173652d6368616e67652066726f6d2024415f7b2861297d2420746f206120636f6d706c65746520445652207769746820616c67656272616963616c6c7920636c6f7365642072657369647565206669656c642c2074686520636f6d70757461626c6520626173652d706f696e742066726565207468656f72656d205c7265667b4250465468656f72656d7d2e204170706c79696e67207468652070726f6f66206f66205c636974655b322e375d7b435a7d2028616761696e207573696e67205468656f72656d205c7265667b74686d3a4566666563746976654b565653757266616365737d20666f722076616e697368696e67292c207468657265206973207468757320612064656772656520626f756e64206f76657220616c6c206f662024412420666f72207468652066696e6974652067656e65726174696f6e73206f662074686520666f6c6c6f77696e672072696e67733a0a5c5b0a525c6c656674284b5f7b587d2b5c44656c7461205c726967687429202f410a5c5d0a5c5b0a525c6c656674284b5f7b587d2b5c44656c74615f7b317d2c4b5f7b587d2b5c44656c74615f7b327d2c2e2e2e2c4b5f7b587d2b5c44656c74615f7b6e7d5c7269676874292f410a5c5d0a20776865726520245c44656c74615f7b697d2420616e6420245c44656c746124206172652073756368207468617420244b5f7b587d2b5c44656c74612c4b5f7b587d2b5c44656c74615f7b697d240a617265206269672c206c6f6720736d6f6f7468206b6c7420616e6420244b5f7b587d2b5c73756d5c44656c74615f7b697d2420686173206c6f672d736d6f6f74680a737570706f727420616e6420245c44656c74615f7b697d24206172652073756666696369656e746c7920636c6f736520746f20245c44656c74612420666f720a736f6d65206e6f726d206f6e20244e5e7b317d5c6c65667428582f415c726967687429242e200a0a5c73756273656374696f6e7b52656d61696e646572206f662050726f6f667d0a4170706c79696e6720436f686f6d6f6c6f677920616e642042617365204368616e6765205c636974655b4949492e31322e31315d7b4861727d20616e64205468656f72656d205c7265667b44494f507d2c2077652063616e207468657265666f72652066696e642067656e657261746f727320666f72207468652061626f76652072696e677320676c6f62616c697a656420746f207468652077686f6c652066616d696c792e20546875732074686520666f6c6c6f77696e6720686f6c6473207573696e670a7468652073616d652070726f6f66202862757420737562737469747574696e67207468652061626f76652066696e6974652067656e65726174696f6e73292061730a696e205468656f72656d205c7265667b4d696e696d616c4d6f64656c734f6e4456527d3a0a5c626567696e7b7468656f72656d7d0a4c657420245c6c65667428582c5c44656c74615c7269676874292420626520612070726f6a65637469766520245c6d61746862627b517d242d666163746f7269616c0a6b6c742070616972206f662072656c61746976652064696d656e73696f6e20243224206f766572206120646564656b696e6420646f6d61696e202441242e20537570706f73650a244b5f7b587d2b5c44656c7461242069732062696720616e64206c6f6720736d6f6f7468206f766572202452242e205468656e20746865206d696e696d616c0a6d6f64656c2070726f6772616d20666f7220245c6c65667428582c5c44656c74615c726967687429242063616e2062652072756e2c20726573756c74696e6720696e0a61207465726d696e6174696e672073657175656e6365206f6620666c69707320616e642064697669736f7269616c20636f6e7472616374696f6e732e200a5c656e647b7468656f72656d7d0a0a5468656e205468656f72656d205c7265667b4d61696e5468656f72656d7d20666f6c6c6f777320616674657220616761696e206170706c79696e672074686520746563686e6971756573206f66205c636974657b484d58323031347d20617320696e207468652070726f6f66206f66205468656f72656d205c7265667b4d696e696d616c4d6f64656c734f6e4456527d2e200a0a5c73756273656374696f6e7b416c7465726e617469766520476c6f62616c697a6174696f6e20417267756d656e747d0a497420697320706f737369626c7920746f20616c7465726e61746976656c7920676c6f62616c697a6520617320666f6c6c6f77733a20746865206c6f67206d696e696d616c206d6f64656c206f66202428582c205c44656c74612924206c6f63616c697a6564206174206120706f696e742024615c696e20412420697320616c736f20746865206c6f672063616e6f6e6963616c206d6f64656c20666f72202428582c205c44656c7461202b205c657073696c6f6e204829242077686572652024482420697320736f6d6520616d706c652064697669736f7220616e642024303c5c657073696c6f6e205c6c6c2031242e2054686973206d65616e732074686174200a5c5b0a4b5f58202b205c44656c7461202b205c657073696c6f6e2048203d20665e2a2028485e5c7072696d6520290a5c5d0a666f7220736f6d6520616d706c652024485e5c7072696d65242e2054686973206c6f672063616e6f6e6963616c206d6f64656c20697320676976656e206279200a5c5b0a2050726f6a5c2052205c6c656674284b5f58202b205c44656c7461202b205c657073696c6f6e20485c7269676874290a5c5d0a73696e6365207468652072696e67202452284b5f58202b205c44656c7461202b5c657073696c6f6e204829242069732066696e6974656c792067656e65726174656420696e20736f6d652064656772656520246d5f3124206279205468656f72656d205c7265667b636f723a42696746696e69746547656e65726174696f6e7d2e2042792073656374696f6e205c7265667b47656e6572616c697a656446696e69746547656e65726174696f6e7d2c207468652067656e657261746f7273206f6620746869732072696e6720657874656e6420616e642067656e6572617465206f7665722061206e65696768626f72686f6f64206f662024615c696e2041242e205468657265666f72652c20627920756e697175656e657373206f66206c6f672d63616e6f6e6963616c206d6f64656c732028632e662e205c636974655b332e35325d7b4b4d7d292c206173207765206b6e6f77206279205468656f72656d205c7265667b4d696e696d616c4d6f64656c734f6e4456527d207468617420746865206d696e696d616c206d6f64656c2065786973747320617420656163682073756368206e656172627920706f696e742c207468656e20776520686176652061637475616c6c7920666f756e6420746865206d696e696d616c206d6f64656c20696e2065766572792073756368206e65696768626f72686f6f642e20436f766572696e672024412420776974682073756368206f70656e20736574732c20616e64206e6f74696e6720627920756e697175656e657373207468617420746865206d696e696d616c206d6f64656c73206d75737420676c7565206f6e2074686520696e74657273656374696f6e732c20776520636f6e636c7564652e200a0a0a0a0a0a5c6e756d6265726f66617070656e64696365733d322020202520536574203020666f72206e6f6e652c20656c7365206e756d626572206f6620617070656e64696365732e0a5c617070656e64697820202020202020090909092520436861707465727320616e642073656374696f6e7320617265206e6f7720617070656e646978207374796c650a5c696e636c7564657b617070417d0a5c696e636c7564657b617070427d0a250a25205468652063686f696365206f66206269626c696f677261706879207374796c652069732061206d616a6f72206465636973696f6e2c206a6f696e746c79206d6164650a2520627920796f752c20796f7572207468657369732061647669736f7220616e64207468652074686573697320656469746f722e20436f6d6d6f6e2063686f69636573206172650a2520227369616d222c202261636d222c2022616d73706c61696e222c2022706c61696e222c20226368696361676f222e0a250a0a25556e636f6d6d656e7420616e64207573652064657369726564206269626c696f677261706879207374796c650a5c6269626c696f6772617068797374796c657b616c7068617d0a5c6269626c696f6772617068797b4d79546865736973526566737d0a5c656e647b646f63756d656e747d0a diff --git a/source-code/RingCT/Test.cpp b/source-code/RingCT/Test.cpp new file mode 100644 index 0000000..9122143 --- /dev/null +++ b/source-code/RingCT/Test.cpp @@ -0,0 +1,209 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include "crypto-ops.h" +#include "crypto.h" +#include "keccak.h" + +#define DBG + +#include "rctTypes.h" +#include "rctOps.h" +#include "rctSigs.h" + +#define BYTES 64 +using namespace crypto; +using namespace std; +using namespace rct; + + +int main(int argc, char *argv[]) { + DP("Running tests for ASNL, MG sigs, and Ring CT"); + + + + + //Schnorr NonLinkable true one and false one + DP("Schnorr non-linkable tests"); + //x, P1 = PaperWallet.skpkGen() + key x, P1; + skpkGen(x, P1); + + key P2 = pkGen(); + key P3 = pkGen(); + + //L1, s1, s2 = ASNL.GenSchnorrNonLinkable(x, P1, P2, 0) + key L1, s1, s2; + GenSchnorrNonLinkable(L1, s1, s2, x, P1, P2, 0); + + DP("This one should verify!"); + DP(VerSchnorrNonLinkable(P1, P2, L1, s1, s2)); + DP(""); + DP("This one should NOT verify!"); + DP(VerSchnorrNonLinkable(P1, P3, L1, s1, s2)); + + + //Tests for ASNL + //#ASNL true one, false one, C != sum Ci, and one out of the range.. + + DP("\n\n ASNL tests"); + int N = 64; + key64 xv; + key64 P1v; + key64 P2v; + bits indi; + + int j = 0; + for (j = 0 ; j < N ; j++) { + indi[j] = (int)randXmrAmount(1); + xv[j] = skGen(); + if ( indi[j] == 0 ) { + P1v[j] = scalarmultBase(xv[j]); + P2v[j] = pkGen(); + } else { + P2v[j] = scalarmultBase(xv[j]); + P1v[j] = pkGen(); + } + } + + asnlSig L1s2s = GenASNL(xv, P1v, P2v, indi); + //#true one + DP("This one should verify!"); + + DP(VerASNL(P1v, P2v, L1s2s)); + //#false one + indi[3] = (indi[3] + 1) % 2; + DP(""); + DP("This one should NOT verify!"); + L1s2s = GenASNL(xv, P1v, P2v, indi); + DP(VerASNL(P1v, P2v, L1s2s)); + + DP("\n\nMG sig tests"); + + //Tests for MG Sigs + //#MG sig: true one + N = 3;// #cols + int R = 3;// #rows + keyV xtmp = skvGen(R); + keyM xm = keyMInit(R, N);// = [[None]*N] #just used to generate test public keys + keyV sk = skvGen(R); + keyM P = keyMInit(R, N);// = keyM[[None]*N] #stores the public keys; + DP("MG Sig: this one should verify!"); + int ind = 2; + int i = 0; + for (j = 0 ; j < R ; j++) { + for (i = 0 ; i < N ; i++) + { + xm[i][j] = skGen(); + P[i][j] = scalarmultBase(xm[i][j]); + } + } + for (j = 0 ; j < R ; j++) { + sk[j] = xm[ind][j]; + } + mgSig IIccss = MLSAG_Gen(P, sk, ind); + DP("Sig verified?"); + DP(MLSAG_Ver(P, IIccss) ); + + //#MG sig: false one + DP("MG Sig: this one should NOT verify!"); + N = 3;// #cols + R = 3;// #rows + xtmp = skvGen(R); + keyM xx(N, xtmp);// = [[None]*N] #just used to generate test public keys + sk = skvGen(R); + //P (N, xtmp);// = keyM[[None]*N] #stores the public keys; + + ind = 2; + for (j = 0 ; j < R ; j++) { + for (i = 0 ; i < N ; i++) + { + xx[i][j] = skGen(); + P[i][j] = scalarmultBase(xx[i][j]); + } + sk[j] = xx[ind][j]; + } + sk[2] = skGen();//asume we don't know one of the private keys.. + IIccss = MLSAG_Gen(P, sk, ind); + DP("Sig verified?"); + DP(MLSAG_Ver(P, IIccss) ); + + + + //Ring CT Stuff + //ct range proofs + DP("\n\n Ring CT tests"); + DP("Everything below should verify!"); + ctkeyV sc, pc; + ctkey sctmp, pctmp; + //add fake input 5000 + tie(sctmp, pctmp) = ctskpkGen(6000); + sc.push_back(sctmp); + pc.push_back(pctmp); + + + tie(sctmp, pctmp) = ctskpkGen(7000); + sc.push_back(sctmp); + pc.push_back(pctmp); + vectoramounts; + + + //add output 500 + amounts.push_back(500); + keyV destinations; + key Sk, Pk; + skpkGen(Sk, Pk); + destinations.push_back(Pk); + + + //add output for 12500 + amounts.push_back(12500); + skpkGen(Sk, Pk); + destinations.push_back(Pk); + + //compute rct data with mixin 500 + DP("computing ring ct sig with mixin 500"); + rctSig s = genRct(sc, pc, destinations, amounts, 500); + + //verify rct data + DP("test sig verifies?"); + DP(verRct(s)); + + //decode received amount + DP("decode amounts working?"); + DP(decodeRct(s, Sk, 1)); + + + + + + + DP("\nRing CT with failing MG sig part should not verify!"); + DP("Since sum of inputs != outputs"); + + amounts[1] = 12501; + skpkGen(Sk, Pk); + destinations[1] = Pk; + + + //compute rct data with mixin 500 + s = genRct(sc, pc, destinations, amounts, 500); + + //verify rct data + DP("test sig verifies?"); + DP(verRct(s)); + + //decode received amount + DP("decode amounts working?"); + DP(decodeRct(s, Sk, 1)); + + + + + return 0; +} diff --git a/source-code/RingCT/crypto-ops-data.c b/source-code/RingCT/crypto-ops-data.c new file mode 100644 index 0000000..0f64b2a --- /dev/null +++ b/source-code/RingCT/crypto-ops-data.c @@ -0,0 +1,842 @@ +#include + +#include "crypto-ops.h" + +/* sqrt(x) is such an integer y that 0 <= y <= p - 1, y % 2 = 0, and y^2 = x (mod p). */ +/* d = -121665 / 121666 */ +const fe fe_d = {-10913610, 13857413, -15372611, 6949391, 114729, -8787816, -6275908, -3247719, -18696448, -12055116}; /* d */ +const fe fe_sqrtm1 = {-32595792, -7943725, 9377950, 3500415, 12389472, -272473, -25146209, -2005654, 326686, 11406482}; /* sqrt(-1) */ +const fe fe_d2 = {-21827239, -5839606, -30745221, 13898782, 229458, 15978800, -12551817, -6495438, 29715968, 9444199}; /* 2 * d */ + +/* base[i][j] = (j+1)*256^i*B */ +const ge_precomp ge_base[32][8] = { + { + {{25967493, -14356035, 29566456, 3660896, -12694345, 4014787, 27544626, -11754271, -6079156, 2047605}, + {-12545711, 934262, -2722910, 3049990, -727428, 9406986, 12720692, 5043384, 19500929, -15469378}, + {-8738181, 4489570, 9688441, -14785194, 10184609, -12363380, 29287919, 11864899, -24514362, -4438546}}, + {{-12815894, -12976347, -21581243, 11784320, -25355658, -2750717, -11717903, -3814571, -358445, -10211303}, + {-21703237, 6903825, 27185491, 6451973, -29577724, -9554005, -15616551, 11189268, -26829678, -5319081}, + {26966642, 11152617, 32442495, 15396054, 14353839, -12752335, -3128826, -9541118, -15472047, -4166697}}, + {{15636291, -9688557, 24204773, -7912398, 616977, -16685262, 27787600, -14772189, 28944400, -1550024}, + {16568933, 4717097, -11556148, -1102322, 15682896, -11807043, 16354577, -11775962, 7689662, 11199574}, + {30464156, -5976125, -11779434, -15670865, 23220365, 15915852, 7512774, 10017326, -17749093, -9920357}}, + {{-17036878, 13921892, 10945806, -6033431, 27105052, -16084379, -28926210, 15006023, 3284568, -6276540}, + {23599295, -8306047, -11193664, -7687416, 13236774, 10506355, 7464579, 9656445, 13059162, 10374397}, + {7798556, 16710257, 3033922, 2874086, 28997861, 2835604, 32406664, -3839045, -641708, -101325}}, + {{10861363, 11473154, 27284546, 1981175, -30064349, 12577861, 32867885, 14515107, -15438304, 10819380}, + {4708026, 6336745, 20377586, 9066809, -11272109, 6594696, -25653668, 12483688, -12668491, 5581306}, + {19563160, 16186464, -29386857, 4097519, 10237984, -4348115, 28542350, 13850243, -23678021, -15815942}}, + {{-15371964, -12862754, 32573250, 4720197, -26436522, 5875511, -19188627, -15224819, -9818940, -12085777}, + {-8549212, 109983, 15149363, 2178705, 22900618, 4543417, 3044240, -15689887, 1762328, 14866737}, + {-18199695, -15951423, -10473290, 1707278, -17185920, 3916101, -28236412, 3959421, 27914454, 4383652}}, + {{5153746, 9909285, 1723747, -2777874, 30523605, 5516873, 19480852, 5230134, -23952439, -15175766}, + {-30269007, -3463509, 7665486, 10083793, 28475525, 1649722, 20654025, 16520125, 30598449, 7715701}, + {28881845, 14381568, 9657904, 3680757, -20181635, 7843316, -31400660, 1370708, 29794553, -1409300}}, + {{14499471, -2729599, -33191113, -4254652, 28494862, 14271267, 30290735, 10876454, -33154098, 2381726}, + {-7195431, -2655363, -14730155, 462251, -27724326, 3941372, -6236617, 3696005, -32300832, 15351955}, + {27431194, 8222322, 16448760, -3907995, -18707002, 11938355, -32961401, -2970515, 29551813, 10109425}} + }, { + {{-13657040, -13155431, -31283750, 11777098, 21447386, 6519384, -2378284, -1627556, 10092783, -4764171}, + {27939166, 14210322, 4677035, 16277044, -22964462, -12398139, -32508754, 12005538, -17810127, 12803510}, + {17228999, -15661624, -1233527, 300140, -1224870, -11714777, 30364213, -9038194, 18016357, 4397660}}, + {{-10958843, -7690207, 4776341, -14954238, 27850028, -15602212, -26619106, 14544525, -17477504, 982639}, + {29253598, 15796703, -2863982, -9908884, 10057023, 3163536, 7332899, -4120128, -21047696, 9934963}, + {5793303, 16271923, -24131614, -10116404, 29188560, 1206517, -14747930, 4559895, -30123922, -10897950}}, + {{-27643952, -11493006, 16282657, -11036493, 28414021, -15012264, 24191034, 4541697, -13338309, 5500568}, + {12650548, -1497113, 9052871, 11355358, -17680037, -8400164, -17430592, 12264343, 10874051, 13524335}, + {25556948, -3045990, 714651, 2510400, 23394682, -10415330, 33119038, 5080568, -22528059, 5376628}}, + {{-26088264, -4011052, -17013699, -3537628, -6726793, 1920897, -22321305, -9447443, 4535768, 1569007}, + {-2255422, 14606630, -21692440, -8039818, 28430649, 8775819, -30494562, 3044290, 31848280, 12543772}, + {-22028579, 2943893, -31857513, 6777306, 13784462, -4292203, -27377195, -2062731, 7718482, 14474653}}, + {{2385315, 2454213, -22631320, 46603, -4437935, -15680415, 656965, -7236665, 24316168, -5253567}, + {13741529, 10911568, -33233417, -8603737, -20177830, -1033297, 33040651, -13424532, -20729456, 8321686}, + {21060490, -2212744, 15712757, -4336099, 1639040, 10656336, 23845965, -11874838, -9984458, 608372}}, + {{-13672732, -15087586, -10889693, -7557059, -6036909, 11305547, 1123968, -6780577, 27229399, 23887}, + {-23244140, -294205, -11744728, 14712571, -29465699, -2029617, 12797024, -6440308, -1633405, 16678954}, + {-29500620, 4770662, -16054387, 14001338, 7830047, 9564805, -1508144, -4795045, -17169265, 4904953}}, + {{24059557, 14617003, 19037157, -15039908, 19766093, -14906429, 5169211, 16191880, 2128236, -4326833}, + {-16981152, 4124966, -8540610, -10653797, 30336522, -14105247, -29806336, 916033, -6882542, -2986532}, + {-22630907, 12419372, -7134229, -7473371, -16478904, 16739175, 285431, 2763829, 15736322, 4143876}}, + {{2379352, 11839345, -4110402, -5988665, 11274298, 794957, 212801, -14594663, 23527084, -16458268}, + {33431127, -11130478, -17838966, -15626900, 8909499, 8376530, -32625340, 4087881, -15188911, -14416214}, + {1767683, 7197987, -13205226, -2022635, -13091350, 448826, 5799055, 4357868, -4774191, -16323038}} + }, { + {{6721966, 13833823, -23523388, -1551314, 26354293, -11863321, 23365147, -3949732, 7390890, 2759800}, + {4409041, 2052381, 23373853, 10530217, 7676779, -12885954, 21302353, -4264057, 1244380, -12919645}, + {-4421239, 7169619, 4982368, -2957590, 30256825, -2777540, 14086413, 9208236, 15886429, 16489664}}, + {{1996075, 10375649, 14346367, 13311202, -6874135, -16438411, -13693198, 398369, -30606455, -712933}, + {-25307465, 9795880, -2777414, 14878809, -33531835, 14780363, 13348553, 12076947, -30836462, 5113182}, + {-17770784, 11797796, 31950843, 13929123, -25888302, 12288344, -30341101, -7336386, 13847711, 5387222}}, + {{-18582163, -3416217, 17824843, -2340966, 22744343, -10442611, 8763061, 3617786, -19600662, 10370991}, + {20246567, -14369378, 22358229, -543712, 18507283, -10413996, 14554437, -8746092, 32232924, 16763880}, + {9648505, 10094563, 26416693, 14745928, -30374318, -6472621, 11094161, 15689506, 3140038, -16510092}}, + {{-16160072, 5472695, 31895588, 4744994, 8823515, 10365685, -27224800, 9448613, -28774454, 366295}, + {19153450, 11523972, -11096490, -6503142, -24647631, 5420647, 28344573, 8041113, 719605, 11671788}, + {8678025, 2694440, -6808014, 2517372, 4964326, 11152271, -15432916, -15266516, 27000813, -10195553}}, + {{-15157904, 7134312, 8639287, -2814877, -7235688, 10421742, 564065, 5336097, 6750977, -14521026}, + {11836410, -3979488, 26297894, 16080799, 23455045, 15735944, 1695823, -8819122, 8169720, 16220347}, + {-18115838, 8653647, 17578566, -6092619, -8025777, -16012763, -11144307, -2627664, -5990708, -14166033}}, + {{-23308498, -10968312, 15213228, -10081214, -30853605, -11050004, 27884329, 2847284, 2655861, 1738395}, + {-27537433, -14253021, -25336301, -8002780, -9370762, 8129821, 21651608, -3239336, -19087449, -11005278}, + {1533110, 3437855, 23735889, 459276, 29970501, 11335377, 26030092, 5821408, 10478196, 8544890}}, + {{32173121, -16129311, 24896207, 3921497, 22579056, -3410854, 19270449, 12217473, 17789017, -3395995}, + {-30552961, -2228401, -15578829, -10147201, 13243889, 517024, 15479401, -3853233, 30460520, 1052596}, + {-11614875, 13323618, 32618793, 8175907, -15230173, 12596687, 27491595, -4612359, 3179268, -9478891}}, + {{31947069, -14366651, -4640583, -15339921, -15125977, -6039709, -14756777, -16411740, 19072640, -9511060}, + {11685058, 11822410, 3158003, -13952594, 33402194, -4165066, 5977896, -5215017, 473099, 5040608}, + {-20290863, 8198642, -27410132, 11602123, 1290375, -2799760, 28326862, 1721092, -19558642, -3131606}} + }, { + {{7881532, 10687937, 7578723, 7738378, -18951012, -2553952, 21820786, 8076149, -27868496, 11538389}, + {-19935666, 3899861, 18283497, -6801568, -15728660, -11249211, 8754525, 7446702, -5676054, 5797016}, + {-11295600, -3793569, -15782110, -7964573, 12708869, -8456199, 2014099, -9050574, -2369172, -5877341}}, + {{-22472376, -11568741, -27682020, 1146375, 18956691, 16640559, 1192730, -3714199, 15123619, 10811505}, + {14352098, -3419715, -18942044, 10822655, 32750596, 4699007, -70363, 15776356, -28886779, -11974553}, + {-28241164, -8072475, -4978962, -5315317, 29416931, 1847569, -20654173, -16484855, 4714547, -9600655}}, + {{15200332, 8368572, 19679101, 15970074, -31872674, 1959451, 24611599, -4543832, -11745876, 12340220}, + {12876937, -10480056, 33134381, 6590940, -6307776, 14872440, 9613953, 8241152, 15370987, 9608631}, + {-4143277, -12014408, 8446281, -391603, 4407738, 13629032, -7724868, 15866074, -28210621, -8814099}}, + {{26660628, -15677655, 8393734, 358047, -7401291, 992988, -23904233, 858697, 20571223, 8420556}, + {14620715, 13067227, -15447274, 8264467, 14106269, 15080814, 33531827, 12516406, -21574435, -12476749}, + {236881, 10476226, 57258, -14677024, 6472998, 2466984, 17258519, 7256740, 8791136, 15069930}}, + {{1276410, -9371918, 22949635, -16322807, -23493039, -5702186, 14711875, 4874229, -30663140, -2331391}, + {5855666, 4990204, -13711848, 7294284, -7804282, 1924647, -1423175, -7912378, -33069337, 9234253}, + {20590503, -9018988, 31529744, -7352666, -2706834, 10650548, 31559055, -11609587, 18979186, 13396066}}, + {{24474287, 4968103, 22267082, 4407354, 24063882, -8325180, -18816887, 13594782, 33514650, 7021958}, + {-11566906, -6565505, -21365085, 15928892, -26158305, 4315421, -25948728, -3916677, -21480480, 12868082}, + {-28635013, 13504661, 19988037, -2132761, 21078225, 6443208, -21446107, 2244500, -12455797, -8089383}}, + {{-30595528, 13793479, -5852820, 319136, -25723172, -6263899, 33086546, 8957937, -15233648, 5540521}, + {-11630176, -11503902, -8119500, -7643073, 2620056, 1022908, -23710744, -1568984, -16128528, -14962807}, + {23152971, 775386, 27395463, 14006635, -9701118, 4649512, 1689819, 892185, -11513277, -15205948}}, + {{9770129, 9586738, 26496094, 4324120, 1556511, -3550024, 27453819, 4763127, -19179614, 5867134}, + {-32765025, 1927590, 31726409, -4753295, 23962434, -16019500, 27846559, 5931263, -29749703, -16108455}, + {27461885, -2977536, 22380810, 1815854, -23033753, -3031938, 7283490, -15148073, -19526700, 7734629}} + }, { + {{-8010264, -9590817, -11120403, 6196038, 29344158, -13430885, 7585295, -3176626, 18549497, 15302069}, + {-32658337, -6171222, -7672793, -11051681, 6258878, 13504381, 10458790, -6418461, -8872242, 8424746}, + {24687205, 8613276, -30667046, -3233545, 1863892, -1830544, 19206234, 7134917, -11284482, -828919}}, + {{11334899, -9218022, 8025293, 12707519, 17523892, -10476071, 10243738, -14685461, -5066034, 16498837}, + {8911542, 6887158, -9584260, -6958590, 11145641, -9543680, 17303925, -14124238, 6536641, 10543906}, + {-28946384, 15479763, -17466835, 568876, -1497683, 11223454, -2669190, -16625574, -27235709, 8876771}}, + {{-25742899, -12566864, -15649966, -846607, -33026686, -796288, -33481822, 15824474, -604426, -9039817}, + {10330056, 70051, 7957388, -9002667, 9764902, 15609756, 27698697, -4890037, 1657394, 3084098}, + {10477963, -7470260, 12119566, -13250805, 29016247, -5365589, 31280319, 14396151, -30233575, 15272409}}, + {{-12288309, 3169463, 28813183, 16658753, 25116432, -5630466, -25173957, -12636138, -25014757, 1950504}, + {-26180358, 9489187, 11053416, -14746161, -31053720, 5825630, -8384306, -8767532, 15341279, 8373727}, + {28685821, 7759505, -14378516, -12002860, -31971820, 4079242, 298136, -10232602, -2878207, 15190420}}, + {{-32932876, 13806336, -14337485, -15794431, -24004620, 10940928, 8669718, 2742393, -26033313, -6875003}, + {-1580388, -11729417, -25979658, -11445023, -17411874, -10912854, 9291594, -16247779, -12154742, 6048605}, + {-30305315, 14843444, 1539301, 11864366, 20201677, 1900163, 13934231, 5128323, 11213262, 9168384}}, + {{-26280513, 11007847, 19408960, -940758, -18592965, -4328580, -5088060, -11105150, 20470157, -16398701}, + {-23136053, 9282192, 14855179, -15390078, -7362815, -14408560, -22783952, 14461608, 14042978, 5230683}, + {29969567, -2741594, -16711867, -8552442, 9175486, -2468974, 21556951, 3506042, -5933891, -12449708}}, + {{-3144746, 8744661, 19704003, 4581278, -20430686, 6830683, -21284170, 8971513, -28539189, 15326563}, + {-19464629, 10110288, -17262528, -3503892, -23500387, 1355669, -15523050, 15300988, -20514118, 9168260}, + {-5353335, 4488613, -23803248, 16314347, 7780487, -15638939, -28948358, 9601605, 33087103, -9011387}}, + {{-19443170, -15512900, -20797467, -12445323, -29824447, 10229461, -27444329, -15000531, -5996870, 15664672}, + {23294591, -16632613, -22650781, -8470978, 27844204, 11461195, 13099750, -2460356, 18151676, 13417686}, + {-24722913, -4176517, -31150679, 5988919, -26858785, 6685065, 1661597, -12551441, 15271676, -15452665}} + }, { + {{11433042, -13228665, 8239631, -5279517, -1985436, -725718, -18698764, 2167544, -6921301, -13440182}, + {-31436171, 15575146, 30436815, 12192228, -22463353, 9395379, -9917708, -8638997, 12215110, 12028277}, + {14098400, 6555944, 23007258, 5757252, -15427832, -12950502, 30123440, 4617780, -16900089, -655628}}, + {{-4026201, -15240835, 11893168, 13718664, -14809462, 1847385, -15819999, 10154009, 23973261, -12684474}, + {-26531820, -3695990, -1908898, 2534301, -31870557, -16550355, 18341390, -11419951, 32013174, -10103539}, + {-25479301, 10876443, -11771086, -14625140, -12369567, 1838104, 21911214, 6354752, 4425632, -837822}}, + {{-10433389, -14612966, 22229858, -3091047, -13191166, 776729, -17415375, -12020462, 4725005, 14044970}, + {19268650, -7304421, 1555349, 8692754, -21474059, -9910664, 6347390, -1411784, -19522291, -16109756}, + {-24864089, 12986008, -10898878, -5558584, -11312371, -148526, 19541418, 8180106, 9282262, 10282508}}, + {{-26205082, 4428547, -8661196, -13194263, 4098402, -14165257, 15522535, 8372215, 5542595, -10702683}, + {-10562541, 14895633, 26814552, -16673850, -17480754, -2489360, -2781891, 6993761, -18093885, 10114655}, + {-20107055, -929418, 31422704, 10427861, -7110749, 6150669, -29091755, -11529146, 25953725, -106158}}, + {{-4234397, -8039292, -9119125, 3046000, 2101609, -12607294, 19390020, 6094296, -3315279, 12831125}, + {-15998678, 7578152, 5310217, 14408357, -33548620, -224739, 31575954, 6326196, 7381791, -2421839}, + {-20902779, 3296811, 24736065, -16328389, 18374254, 7318640, 6295303, 8082724, -15362489, 12339664}}, + {{27724736, 2291157, 6088201, -14184798, 1792727, 5857634, 13848414, 15768922, 25091167, 14856294}, + {-18866652, 8331043, 24373479, 8541013, -701998, -9269457, 12927300, -12695493, -22182473, -9012899}, + {-11423429, -5421590, 11632845, 3405020, 30536730, -11674039, -27260765, 13866390, 30146206, 9142070}}, + {{3924129, -15307516, -13817122, -10054960, 12291820, -668366, -27702774, 9326384, -8237858, 4171294}, + {-15921940, 16037937, 6713787, 16606682, -21612135, 2790944, 26396185, 3731949, 345228, -5462949}, + {-21327538, 13448259, 25284571, 1143661, 20614966, -8849387, 2031539, -12391231, -16253183, -13582083}}, + {{31016211, -16722429, 26371392, -14451233, -5027349, 14854137, 17477601, 3842657, 28012650, -16405420}, + {-5075835, 9368966, -8562079, -4600902, -15249953, 6970560, -9189873, 16292057, -8867157, 3507940}, + {29439664, 3537914, 23333589, 6997794, -17555561, -11018068, -15209202, -15051267, -9164929, 6580396}} + }, { + {{-12185861, -7679788, 16438269, 10826160, -8696817, -6235611, 17860444, -9273846, -2095802, 9304567}, + {20714564, -4336911, 29088195, 7406487, 11426967, -5095705, 14792667, -14608617, 5289421, -477127}, + {-16665533, -10650790, -6160345, -13305760, 9192020, -1802462, 17271490, 12349094, 26939669, -3752294}}, + {{-12889898, 9373458, 31595848, 16374215, 21471720, 13221525, -27283495, -12348559, -3698806, 117887}, + {22263325, -6560050, 3984570, -11174646, -15114008, -566785, 28311253, 5358056, -23319780, 541964}, + {16259219, 3261970, 2309254, -15534474, -16885711, -4581916, 24134070, -16705829, -13337066, -13552195}}, + {{9378160, -13140186, -22845982, -12745264, 28198281, -7244098, -2399684, -717351, 690426, 14876244}, + {24977353, -314384, -8223969, -13465086, 28432343, -1176353, -13068804, -12297348, -22380984, 6618999}, + {-1538174, 11685646, 12944378, 13682314, -24389511, -14413193, 8044829, -13817328, 32239829, -5652762}}, + {{-18603066, 4762990, -926250, 8885304, -28412480, -3187315, 9781647, -10350059, 32779359, 5095274}, + {-33008130, -5214506, -32264887, -3685216, 9460461, -9327423, -24601656, 14506724, 21639561, -2630236}, + {-16400943, -13112215, 25239338, 15531969, 3987758, -4499318, -1289502, -6863535, 17874574, 558605}}, + {{-13600129, 10240081, 9171883, 16131053, -20869254, 9599700, 33499487, 5080151, 2085892, 5119761}, + {-22205145, -2519528, -16381601, 414691, -25019550, 2170430, 30634760, -8363614, -31999993, -5759884}, + {-6845704, 15791202, 8550074, -1312654, 29928809, -12092256, 27534430, -7192145, -22351378, 12961482}}, + {{-24492060, -9570771, 10368194, 11582341, -23397293, -2245287, 16533930, 8206996, -30194652, -5159638}, + {-11121496, -3382234, 2307366, 6362031, -135455, 8868177, -16835630, 7031275, 7589640, 8945490}, + {-32152748, 8917967, 6661220, -11677616, -1192060, -15793393, 7251489, -11182180, 24099109, -14456170}}, + {{5019558, -7907470, 4244127, -14714356, -26933272, 6453165, -19118182, -13289025, -6231896, -10280736}, + {10853594, 10721687, 26480089, 5861829, -22995819, 1972175, -1866647, -10557898, -3363451, -6441124}, + {-17002408, 5906790, 221599, -6563147, 7828208, -13248918, 24362661, -2008168, -13866408, 7421392}}, + {{8139927, -6546497, 32257646, -5890546, 30375719, 1886181, -21175108, 15441252, 28826358, -4123029}, + {6267086, 9695052, 7709135, -16603597, -32869068, -1886135, 14795160, -7840124, 13746021, -1742048}, + {28584902, 7787108, -6732942, -15050729, 22846041, -7571236, -3181936, -363524, 4771362, -8419958}} + }, { + {{24949256, 6376279, -27466481, -8174608, -18646154, -9930606, 33543569, -12141695, 3569627, 11342593}, + {26514989, 4740088, 27912651, 3697550, 19331575, -11472339, 6809886, 4608608, 7325975, -14801071}, + {-11618399, -14554430, -24321212, 7655128, -1369274, 5214312, -27400540, 10258390, -17646694, -8186692}}, + {{11431204, 15823007, 26570245, 14329124, 18029990, 4796082, -31446179, 15580664, 9280358, -3973687}, + {-160783, -10326257, -22855316, -4304997, -20861367, -13621002, -32810901, -11181622, -15545091, 4387441}, + {-20799378, 12194512, 3937617, -5805892, -27154820, 9340370, -24513992, 8548137, 20617071, -7482001}}, + {{-938825, -3930586, -8714311, 16124718, 24603125, -6225393, -13775352, -11875822, 24345683, 10325460}, + {-19855277, -1568885, -22202708, 8714034, 14007766, 6928528, 16318175, -1010689, 4766743, 3552007}, + {-21751364, -16730916, 1351763, -803421, -4009670, 3950935, 3217514, 14481909, 10988822, -3994762}}, + {{15564307, -14311570, 3101243, 5684148, 30446780, -8051356, 12677127, -6505343, -8295852, 13296005}, + {-9442290, 6624296, -30298964, -11913677, -4670981, -2057379, 31521204, 9614054, -30000824, 12074674}, + {4771191, -135239, 14290749, -13089852, 27992298, 14998318, -1413936, -1556716, 29832613, -16391035}}, + {{7064884, -7541174, -19161962, -5067537, -18891269, -2912736, 25825242, 5293297, -27122660, 13101590}, + {-2298563, 2439670, -7466610, 1719965, -27267541, -16328445, 32512469, -5317593, -30356070, -4190957}, + {-30006540, 10162316, -33180176, 3981723, -16482138, -13070044, 14413974, 9515896, 19568978, 9628812}}, + {{33053803, 199357, 15894591, 1583059, 27380243, -4580435, -17838894, -6106839, -6291786, 3437740}, + {-18978877, 3884493, 19469877, 12726490, 15913552, 13614290, -22961733, 70104, 7463304, 4176122}, + {-27124001, 10659917, 11482427, -16070381, 12771467, -6635117, -32719404, -5322751, 24216882, 5944158}}, + {{8894125, 7450974, -2664149, -9765752, -28080517, -12389115, 19345746, 14680796, 11632993, 5847885}, + {26942781, -2315317, 9129564, -4906607, 26024105, 11769399, -11518837, 6367194, -9727230, 4782140}, + {19916461, -4828410, -22910704, -11414391, 25606324, -5972441, 33253853, 8220911, 6358847, -1873857}}, + {{801428, -2081702, 16569428, 11065167, 29875704, 96627, 7908388, -4480480, -13538503, 1387155}, + {19646058, 5720633, -11416706, 12814209, 11607948, 12749789, 14147075, 15156355, -21866831, 11835260}, + {19299512, 1155910, 28703737, 14890794, 2925026, 7269399, 26121523, 15467869, -26560550, 5052483}} + }, { + {{-3017432, 10058206, 1980837, 3964243, 22160966, 12322533, -6431123, -12618185, 12228557, -7003677}, + {32944382, 14922211, -22844894, 5188528, 21913450, -8719943, 4001465, 13238564, -6114803, 8653815}, + {22865569, -4652735, 27603668, -12545395, 14348958, 8234005, 24808405, 5719875, 28483275, 2841751}}, + {{-16420968, -1113305, -327719, -12107856, 21886282, -15552774, -1887966, -315658, 19932058, -12739203}, + {-11656086, 10087521, -8864888, -5536143, -19278573, -3055912, 3999228, 13239134, -4777469, -13910208}, + {1382174, -11694719, 17266790, 9194690, -13324356, 9720081, 20403944, 11284705, -14013818, 3093230}}, + {{16650921, -11037932, -1064178, 1570629, -8329746, 7352753, -302424, 16271225, -24049421, -6691850}, + {-21911077, -5927941, -4611316, -5560156, -31744103, -10785293, 24123614, 15193618, -21652117, -16739389}, + {-9935934, -4289447, -25279823, 4372842, 2087473, 10399484, 31870908, 14690798, 17361620, 11864968}}, + {{-11307610, 6210372, 13206574, 5806320, -29017692, -13967200, -12331205, -7486601, -25578460, -16240689}, + {14668462, -12270235, 26039039, 15305210, 25515617, 4542480, 10453892, 6577524, 9145645, -6443880}, + {5974874, 3053895, -9433049, -10385191, -31865124, 3225009, -7972642, 3936128, -5652273, -3050304}}, + {{30625386, -4729400, -25555961, -12792866, -20484575, 7695099, 17097188, -16303496, -27999779, 1803632}, + {-3553091, 9865099, -5228566, 4272701, -5673832, -16689700, 14911344, 12196514, -21405489, 7047412}, + {20093277, 9920966, -11138194, -5343857, 13161587, 12044805, -32856851, 4124601, -32343828, -10257566}}, + {{-20788824, 14084654, -13531713, 7842147, 19119038, -13822605, 4752377, -8714640, -21679658, 2288038}, + {-26819236, -3283715, 29965059, 3039786, -14473765, 2540457, 29457502, 14625692, -24819617, 12570232}, + {-1063558, -11551823, 16920318, 12494842, 1278292, -5869109, -21159943, -3498680, -11974704, 4724943}}, + {{17960970, -11775534, -4140968, -9702530, -8876562, -1410617, -12907383, -8659932, -29576300, 1903856}, + {23134274, -14279132, -10681997, -1611936, 20684485, 15770816, -12989750, 3190296, 26955097, 14109738}, + {15308788, 5320727, -30113809, -14318877, 22902008, 7767164, 29425325, -11277562, 31960942, 11934971}}, + {{-27395711, 8435796, 4109644, 12222639, -24627868, 14818669, 20638173, 4875028, 10491392, 1379718}, + {-13159415, 9197841, 3875503, -8936108, -1383712, -5879801, 33518459, 16176658, 21432314, 12180697}, + {-11787308, 11500838, 13787581, -13832590, -22430679, 10140205, 1465425, 12689540, -10301319, -13872883}} + }, { + {{5414091, -15386041, -21007664, 9643570, 12834970, 1186149, -2622916, -1342231, 26128231, 6032912}, + {-26337395, -13766162, 32496025, -13653919, 17847801, -12669156, 3604025, 8316894, -25875034, -10437358}, + {3296484, 6223048, 24680646, -12246460, -23052020, 5903205, -8862297, -4639164, 12376617, 3188849}}, + {{29190488, -14659046, 27549113, -1183516, 3520066, -10697301, 32049515, -7309113, -16109234, -9852307}, + {-14744486, -9309156, 735818, -598978, -20407687, -5057904, 25246078, -15795669, 18640741, -960977}, + {-6928835, -16430795, 10361374, 5642961, 4910474, 12345252, -31638386, -494430, 10530747, 1053335}}, + {{-29265967, -14186805, -13538216, -12117373, -19457059, -10655384, -31462369, -2948985, 24018831, 15026644}, + {-22592535, -3145277, -2289276, 5953843, -13440189, 9425631, 25310643, 13003497, -2314791, -15145616}, + {-27419985, -603321, -8043984, -1669117, -26092265, 13987819, -27297622, 187899, -23166419, -2531735}}, + {{-21744398, -13810475, 1844840, 5021428, -10434399, -15911473, 9716667, 16266922, -5070217, 726099}, + {29370922, -6053998, 7334071, -15342259, 9385287, 2247707, -13661962, -4839461, 30007388, -15823341}, + {-936379, 16086691, 23751945, -543318, -1167538, -5189036, 9137109, 730663, 9835848, 4555336}}, + {{-23376435, 1410446, -22253753, -12899614, 30867635, 15826977, 17693930, 544696, -11985298, 12422646}, + {31117226, -12215734, -13502838, 6561947, -9876867, -12757670, -5118685, -4096706, 29120153, 13924425}, + {-17400879, -14233209, 19675799, -2734756, -11006962, -5858820, -9383939, -11317700, 7240931, -237388}}, + {{-31361739, -11346780, -15007447, -5856218, -22453340, -12152771, 1222336, 4389483, 3293637, -15551743}, + {-16684801, -14444245, 11038544, 11054958, -13801175, -3338533, -24319580, 7733547, 12796905, -6335822}, + {-8759414, -10817836, -25418864, 10783769, -30615557, -9746811, -28253339, 3647836, 3222231, -11160462}}, + {{18606113, 1693100, -25448386, -15170272, 4112353, 10045021, 23603893, -2048234, -7550776, 2484985}, + {9255317, -3131197, -12156162, -1004256, 13098013, -9214866, 16377220, -2102812, -19802075, -3034702}, + {-22729289, 7496160, -5742199, 11329249, 19991973, -3347502, -31718148, 9936966, -30097688, -10618797}}, + {{21878590, -5001297, 4338336, 13643897, -3036865, 13160960, 19708896, 5415497, -7360503, -4109293}, + {27736861, 10103576, 12500508, 8502413, -3413016, -9633558, 10436918, -1550276, -23659143, -8132100}, + {19492550, -12104365, -29681976, -852630, -3208171, 12403437, 30066266, 8367329, 13243957, 8709688}} + }, { + {{12015105, 2801261, 28198131, 10151021, 24818120, -4743133, -11194191, -5645734, 5150968, 7274186}, + {2831366, -12492146, 1478975, 6122054, 23825128, -12733586, 31097299, 6083058, 31021603, -9793610}, + {-2529932, -2229646, 445613, 10720828, -13849527, -11505937, -23507731, 16354465, 15067285, -14147707}}, + {{7840942, 14037873, -33364863, 15934016, -728213, -3642706, 21403988, 1057586, -19379462, -12403220}, + {915865, -16469274, 15608285, -8789130, -24357026, 6060030, -17371319, 8410997, -7220461, 16527025}, + {32922597, -556987, 20336074, -16184568, 10903705, -5384487, 16957574, 52992, 23834301, 6588044}}, + {{32752030, 11232950, 3381995, -8714866, 22652988, -10744103, 17159699, 16689107, -20314580, -1305992}, + {-4689649, 9166776, -25710296, -10847306, 11576752, 12733943, 7924251, -2752281, 1976123, -7249027}, + {21251222, 16309901, -2983015, -6783122, 30810597, 12967303, 156041, -3371252, 12331345, -8237197}}, + {{8651614, -4477032, -16085636, -4996994, 13002507, 2950805, 29054427, -5106970, 10008136, -4667901}, + {31486080, 15114593, -14261250, 12951354, 14369431, -7387845, 16347321, -13662089, 8684155, -10532952}, + {19443825, 11385320, 24468943, -9659068, -23919258, 2187569, -26263207, -6086921, 31316348, 14219878}}, + {{-28594490, 1193785, 32245219, 11392485, 31092169, 15722801, 27146014, 6992409, 29126555, 9207390}, + {32382935, 1110093, 18477781, 11028262, -27411763, -7548111, -4980517, 10843782, -7957600, -14435730}, + {2814918, 7836403, 27519878, -7868156, -20894015, -11553689, -21494559, 8550130, 28346258, 1994730}}, + {{-19578299, 8085545, -14000519, -3948622, 2785838, -16231307, -19516951, 7174894, 22628102, 8115180}, + {-30405132, 955511, -11133838, -15078069, -32447087, -13278079, -25651578, 3317160, -9943017, 930272}, + {-15303681, -6833769, 28856490, 1357446, 23421993, 1057177, 24091212, -1388970, -22765376, -10650715}}, + {{-22751231, -5303997, -12907607, -12768866, -15811511, -7797053, -14839018, -16554220, -1867018, 8398970}, + {-31969310, 2106403, -4736360, 1362501, 12813763, 16200670, 22981545, -6291273, 18009408, -15772772}, + {-17220923, -9545221, -27784654, 14166835, 29815394, 7444469, 29551787, -3727419, 19288549, 1325865}}, + {{15100157, -15835752, -23923978, -1005098, -26450192, 15509408, 12376730, -3479146, 33166107, -8042750}, + {20909231, 13023121, -9209752, 16251778, -5778415, -8094914, 12412151, 10018715, 2213263, -13878373}, + {32529814, -11074689, 30361439, -16689753, -9135940, 1513226, 22922121, 6382134, -5766928, 8371348}} + }, { + {{9923462, 11271500, 12616794, 3544722, -29998368, -1721626, 12891687, -8193132, -26442943, 10486144}, + {-22597207, -7012665, 8587003, -8257861, 4084309, -12970062, 361726, 2610596, -23921530, -11455195}, + {5408411, -1136691, -4969122, 10561668, 24145918, 14240566, 31319731, -4235541, 19985175, -3436086}}, + {{-13994457, 16616821, 14549246, 3341099, 32155958, 13648976, -17577068, 8849297, 65030, 8370684}, + {-8320926, -12049626, 31204563, 5839400, -20627288, -1057277, -19442942, 6922164, 12743482, -9800518}, + {-2361371, 12678785, 28815050, 4759974, -23893047, 4884717, 23783145, 11038569, 18800704, 255233}}, + {{-5269658, -1773886, 13957886, 7990715, 23132995, 728773, 13393847, 9066957, 19258688, -14753793}, + {-2936654, -10827535, -10432089, 14516793, -3640786, 4372541, -31934921, 2209390, -1524053, 2055794}, + {580882, 16705327, 5468415, -2683018, -30926419, -14696000, -7203346, -8994389, -30021019, 7394435}}, + {{23838809, 1822728, -15738443, 15242727, 8318092, -3733104, -21672180, -3492205, -4821741, 14799921}, + {13345610, 9759151, 3371034, -16137791, 16353039, 8577942, 31129804, 13496856, -9056018, 7402518}, + {2286874, -4435931, -20042458, -2008336, -13696227, 5038122, 11006906, -15760352, 8205061, 1607563}}, + {{14414086, -8002132, 3331830, -3208217, 22249151, -5594188, 18364661, -2906958, 30019587, -9029278}, + {-27688051, 1585953, -10775053, 931069, -29120221, -11002319, -14410829, 12029093, 9944378, 8024}, + {4368715, -3709630, 29874200, -15022983, -20230386, -11410704, -16114594, -999085, -8142388, 5640030}}, + {{10299610, 13746483, 11661824, 16234854, 7630238, 5998374, 9809887, -16694564, 15219798, -14327783}, + {27425505, -5719081, 3055006, 10660664, 23458024, 595578, -15398605, -1173195, -18342183, 9742717}, + {6744077, 2427284, 26042789, 2720740, -847906, 1118974, 32324614, 7406442, 12420155, 1994844}}, + {{14012521, -5024720, -18384453, -9578469, -26485342, -3936439, -13033478, -10909803, 24319929, -6446333}, + {16412690, -4507367, 10772641, 15929391, -17068788, -4658621, 10555945, -10484049, -30102368, -4739048}, + {22397382, -7767684, -9293161, -12792868, 17166287, -9755136, -27333065, 6199366, 21880021, -12250760}}, + {{-4283307, 5368523, -31117018, 8163389, -30323063, 3209128, 16557151, 8890729, 8840445, 4957760}, + {-15447727, 709327, -6919446, -10870178, -29777922, 6522332, -21720181, 12130072, -14796503, 5005757}, + {-2114751, -14308128, 23019042, 15765735, -25269683, 6002752, 10183197, -13239326, -16395286, -2176112}} + }, { + {{-19025756, 1632005, 13466291, -7995100, -23640451, 16573537, -32013908, -3057104, 22208662, 2000468}, + {3065073, -1412761, -25598674, -361432, -17683065, -5703415, -8164212, 11248527, -3691214, -7414184}, + {10379208, -6045554, 8877319, 1473647, -29291284, -12507580, 16690915, 2553332, -3132688, 16400289}}, + {{15716668, 1254266, -18472690, 7446274, -8448918, 6344164, -22097271, -7285580, 26894937, 9132066}, + {24158887, 12938817, 11085297, -8177598, -28063478, -4457083, -30576463, 64452, -6817084, -2692882}, + {13488534, 7794716, 22236231, 5989356, 25426474, -12578208, 2350710, -3418511, -4688006, 2364226}}, + {{16335052, 9132434, 25640582, 6678888, 1725628, 8517937, -11807024, -11697457, 15445875, -7798101}, + {29004207, -7867081, 28661402, -640412, -12794003, -7943086, 31863255, -4135540, -278050, -15759279}, + {-6122061, -14866665, -28614905, 14569919, -10857999, -3591829, 10343412, -6976290, -29828287, -10815811}}, + {{27081650, 3463984, 14099042, -4517604, 1616303, -6205604, 29542636, 15372179, 17293797, 960709}, + {20263915, 11434237, -5765435, 11236810, 13505955, -10857102, -16111345, 6493122, -19384511, 7639714}, + {-2830798, -14839232, 25403038, -8215196, -8317012, -16173699, 18006287, -16043750, 29994677, -15808121}}, + {{9769828, 5202651, -24157398, -13631392, -28051003, -11561624, -24613141, -13860782, -31184575, 709464}, + {12286395, 13076066, -21775189, -1176622, -25003198, 4057652, -32018128, -8890874, 16102007, 13205847}, + {13733362, 5599946, 10557076, 3195751, -5557991, 8536970, -25540170, 8525972, 10151379, 10394400}}, + {{4024660, -16137551, 22436262, 12276534, -9099015, -2686099, 19698229, 11743039, -33302334, 8934414}, + {-15879800, -4525240, -8580747, -2934061, 14634845, -698278, -9449077, 3137094, -11536886, 11721158}, + {17555939, -5013938, 8268606, 2331751, -22738815, 9761013, 9319229, 8835153, -9205489, -1280045}}, + {{-461409, -7830014, 20614118, 16688288, -7514766, -4807119, 22300304, 505429, 6108462, -6183415}, + {-5070281, 12367917, -30663534, 3234473, 32617080, -8422642, 29880583, -13483331, -26898490, -7867459}, + {-31975283, 5726539, 26934134, 10237677, -3173717, -605053, 24199304, 3795095, 7592688, -14992079}}, + {{21594432, -14964228, 17466408, -4077222, 32537084, 2739898, 6407723, 12018833, -28256052, 4298412}, + {-20650503, -11961496, -27236275, 570498, 3767144, -1717540, 13891942, -1569194, 13717174, 10805743}, + {-14676630, -15644296, 15287174, 11927123, 24177847, -8175568, -796431, 14860609, -26938930, -5863836}} + }, { + {{12962541, 5311799, -10060768, 11658280, 18855286, -7954201, 13286263, -12808704, -4381056, 9882022}, + {18512079, 11319350, -20123124, 15090309, 18818594, 5271736, -22727904, 3666879, -23967430, -3299429}, + {-6789020, -3146043, 16192429, 13241070, 15898607, -14206114, -10084880, -6661110, -2403099, 5276065}}, + {{30169808, -5317648, 26306206, -11750859, 27814964, 7069267, 7152851, 3684982, 1449224, 13082861}, + {10342826, 3098505, 2119311, 193222, 25702612, 12233820, 23697382, 15056736, -21016438, -8202000}, + {-33150110, 3261608, 22745853, 7948688, 19370557, -15177665, -26171976, 6482814, -10300080, -11060101}}, + {{32869458, -5408545, 25609743, 15678670, -10687769, -15471071, 26112421, 2521008, -22664288, 6904815}, + {29506923, 4457497, 3377935, -9796444, -30510046, 12935080, 1561737, 3841096, -29003639, -6657642}, + {10340844, -6630377, -18656632, -2278430, 12621151, -13339055, 30878497, -11824370, -25584551, 5181966}}, + {{25940115, -12658025, 17324188, -10307374, -8671468, 15029094, 24396252, -16450922, -2322852, -12388574}, + {-21765684, 9916823, -1300409, 4079498, -1028346, 11909559, 1782390, 12641087, 20603771, -6561742}, + {-18882287, -11673380, 24849422, 11501709, 13161720, -4768874, 1925523, 11914390, 4662781, 7820689}}, + {{12241050, -425982, 8132691, 9393934, 32846760, -1599620, 29749456, 12172924, 16136752, 15264020}, + {-10349955, -14680563, -8211979, 2330220, -17662549, -14545780, 10658213, 6671822, 19012087, 3772772}, + {3753511, -3421066, 10617074, 2028709, 14841030, -6721664, 28718732, -15762884, 20527771, 12988982}}, + {{-14822485, -5797269, -3707987, 12689773, -898983, -10914866, -24183046, -10564943, 3299665, -12424953}, + {-16777703, -15253301, -9642417, 4978983, 3308785, 8755439, 6943197, 6461331, -25583147, 8991218}, + {-17226263, 1816362, -1673288, -6086439, 31783888, -8175991, -32948145, 7417950, -30242287, 1507265}}, + {{29692663, 6829891, -10498800, 4334896, 20945975, -11906496, -28887608, 8209391, 14606362, -10647073}, + {-3481570, 8707081, 32188102, 5672294, 22096700, 1711240, -33020695, 9761487, 4170404, -2085325}, + {-11587470, 14855945, -4127778, -1531857, -26649089, 15084046, 22186522, 16002000, -14276837, -8400798}}, + {{-4811456, 13761029, -31703877, -2483919, -3312471, 7869047, -7113572, -9620092, 13240845, 10965870}, + {-7742563, -8256762, -14768334, -13656260, -23232383, 12387166, 4498947, 14147411, 29514390, 4302863}, + {-13413405, -12407859, 20757302, -13801832, 14785143, 8976368, -5061276, -2144373, 17846988, -13971927}} + }, { + {{-2244452, -754728, -4597030, -1066309, -6247172, 1455299, -21647728, -9214789, -5222701, 12650267}, + {-9906797, -16070310, 21134160, 12198166, -27064575, 708126, 387813, 13770293, -19134326, 10958663}, + {22470984, 12369526, 23446014, -5441109, -21520802, -9698723, -11772496, -11574455, -25083830, 4271862}}, + {{-25169565, -10053642, -19909332, 15361595, -5984358, 2159192, 75375, -4278529, -32526221, 8469673}, + {15854970, 4148314, -8893890, 7259002, 11666551, 13824734, -30531198, 2697372, 24154791, -9460943}, + {15446137, -15806644, 29759747, 14019369, 30811221, -9610191, -31582008, 12840104, 24913809, 9815020}}, + {{-4709286, -5614269, -31841498, -12288893, -14443537, 10799414, -9103676, 13438769, 18735128, 9466238}, + {11933045, 9281483, 5081055, -5183824, -2628162, -4905629, -7727821, -10896103, -22728655, 16199064}, + {14576810, 379472, -26786533, -8317236, -29426508, -10812974, -102766, 1876699, 30801119, 2164795}}, + {{15995086, 3199873, 13672555, 13712240, -19378835, -4647646, -13081610, -15496269, -13492807, 1268052}, + {-10290614, -3659039, -3286592, 10948818, 23037027, 3794475, -3470338, -12600221, -17055369, 3565904}, + {29210088, -9419337, -5919792, -4952785, 10834811, -13327726, -16512102, -10820713, -27162222, -14030531}}, + {{-13161890, 15508588, 16663704, -8156150, -28349942, 9019123, -29183421, -3769423, 2244111, -14001979}, + {-5152875, -3800936, -9306475, -6071583, 16243069, 14684434, -25673088, -16180800, 13491506, 4641841}, + {10813417, 643330, -19188515, -728916, 30292062, -16600078, 27548447, -7721242, 14476989, -12767431}}, + {{10292079, 9984945, 6481436, 8279905, -7251514, 7032743, 27282937, -1644259, -27912810, 12651324}, + {-31185513, -813383, 22271204, 11835308, 10201545, 15351028, 17099662, 3988035, 21721536, -3148940}, + {10202177, -6545839, -31373232, -9574638, -32150642, -8119683, -12906320, 3852694, 13216206, 14842320}}, + {{-15815640, -10601066, -6538952, -7258995, -6984659, -6581778, -31500847, 13765824, -27434397, 9900184}, + {14465505, -13833331, -32133984, -14738873, -27443187, 12990492, 33046193, 15796406, -7051866, -8040114}, + {30924417, -8279620, 6359016, -12816335, 16508377, 9071735, -25488601, 15413635, 9524356, -7018878}}, + {{12274201, -13175547, 32627641, -1785326, 6736625, 13267305, 5237659, -5109483, 15663516, 4035784}, + {-2951309, 8903985, 17349946, 601635, -16432815, -4612556, -13732739, -15889334, -22258478, 4659091}, + {-16916263, -4952973, -30393711, -15158821, 20774812, 15897498, 5736189, 15026997, -2178256, -13455585}} + }, { + {{-8858980, -2219056, 28571666, -10155518, -474467, -10105698, -3801496, 278095, 23440562, -290208}, + {10226241, -5928702, 15139956, 120818, -14867693, 5218603, 32937275, 11551483, -16571960, -7442864}, + {17932739, -12437276, -24039557, 10749060, 11316803, 7535897, 22503767, 5561594, -3646624, 3898661}}, + {{7749907, -969567, -16339731, -16464, -25018111, 15122143, -1573531, 7152530, 21831162, 1245233}, + {26958459, -14658026, 4314586, 8346991, -5677764, 11960072, -32589295, -620035, -30402091, -16716212}, + {-12165896, 9166947, 33491384, 13673479, 29787085, 13096535, 6280834, 14587357, -22338025, 13987525}}, + {{-24349909, 7778775, 21116000, 15572597, -4833266, -5357778, -4300898, -5124639, -7469781, -2858068}, + {9681908, -6737123, -31951644, 13591838, -6883821, 386950, 31622781, 6439245, -14581012, 4091397}, + {-8426427, 1470727, -28109679, -1596990, 3978627, -5123623, -19622683, 12092163, 29077877, -14741988}}, + {{5269168, -6859726, -13230211, -8020715, 25932563, 1763552, -5606110, -5505881, -20017847, 2357889}, + {32264008, -15407652, -5387735, -1160093, -2091322, -3946900, 23104804, -12869908, 5727338, 189038}, + {14609123, -8954470, -6000566, -16622781, -14577387, -7743898, -26745169, 10942115, -25888931, -14884697}}, + {{20513500, 5557931, -15604613, 7829531, 26413943, -2019404, -21378968, 7471781, 13913677, -5137875}, + {-25574376, 11967826, 29233242, 12948236, -6754465, 4713227, -8940970, 14059180, 12878652, 8511905}, + {-25656801, 3393631, -2955415, -7075526, -2250709, 9366908, -30223418, 6812974, 5568676, -3127656}}, + {{11630004, 12144454, 2116339, 13606037, 27378885, 15676917, -17408753, -13504373, -14395196, 8070818}, + {27117696, -10007378, -31282771, -5570088, 1127282, 12772488, -29845906, 10483306, -11552749, -1028714}, + {10637467, -5688064, 5674781, 1072708, -26343588, -6982302, -1683975, 9177853, -27493162, 15431203}}, + {{20525145, 10892566, -12742472, 12779443, -29493034, 16150075, -28240519, 14943142, -15056790, -7935931}, + {-30024462, 5626926, -551567, -9981087, 753598, 11981191, 25244767, -3239766, -3356550, 9594024}, + {-23752644, 2636870, -5163910, -10103818, 585134, 7877383, 11345683, -6492290, 13352335, -10977084}}, + {{-1931799, -5407458, 3304649, -12884869, 17015806, -4877091, -29783850, -7752482, -13215537, -319204}, + {20239939, 6607058, 6203985, 3483793, -18386976, -779229, -20723742, 15077870, -22750759, 14523817}, + {27406042, -6041657, 27423596, -4497394, 4996214, 10002360, -28842031, -4545494, -30172742, -4805667}} + }, { + {{11374242, 12660715, 17861383, -12540833, 10935568, 1099227, -13886076, -9091740, -27727044, 11358504}, + {-12730809, 10311867, 1510375, 10778093, -2119455, -9145702, 32676003, 11149336, -26123651, 4985768}, + {-19096303, 341147, -6197485, -239033, 15756973, -8796662, -983043, 13794114, -19414307, -15621255}}, + {{6490081, 11940286, 25495923, -7726360, 8668373, -8751316, 3367603, 6970005, -1691065, -9004790}, + {1656497, 13457317, 15370807, 6364910, 13605745, 8362338, -19174622, -5475723, -16796596, -5031438}, + {-22273315, -13524424, -64685, -4334223, -18605636, -10921968, -20571065, -7007978, -99853, -10237333}}, + {{17747465, 10039260, 19368299, -4050591, -20630635, -16041286, 31992683, -15857976, -29260363, -5511971}, + {31932027, -4986141, -19612382, 16366580, 22023614, 88450, 11371999, -3744247, 4882242, -10626905}, + {29796507, 37186, 19818052, 10115756, -11829032, 3352736, 18551198, 3272828, -5190932, -4162409}}, + {{12501286, 4044383, -8612957, -13392385, -32430052, 5136599, -19230378, -3529697, 330070, -3659409}, + {6384877, 2899513, 17807477, 7663917, -2358888, 12363165, 25366522, -8573892, -271295, 12071499}, + {-8365515, -4042521, 25133448, -4517355, -6211027, 2265927, -32769618, 1936675, -5159697, 3829363}}, + {{28425966, -5835433, -577090, -4697198, -14217555, 6870930, 7921550, -6567787, 26333140, 14267664}, + {-11067219, 11871231, 27385719, -10559544, -4585914, -11189312, 10004786, -8709488, -21761224, 8930324}, + {-21197785, -16396035, 25654216, -1725397, 12282012, 11008919, 1541940, 4757911, -26491501, -16408940}}, + {{13537262, -7759490, -20604840, 10961927, -5922820, -13218065, -13156584, 6217254, -15943699, 13814990}, + {-17422573, 15157790, 18705543, 29619, 24409717, -260476, 27361681, 9257833, -1956526, -1776914}, + {-25045300, -10191966, 15366585, 15166509, -13105086, 8423556, -29171540, 12361135, -18685978, 4578290}}, + {{24579768, 3711570, 1342322, -11180126, -27005135, 14124956, -22544529, 14074919, 21964432, 8235257}, + {-6528613, -2411497, 9442966, -5925588, 12025640, -1487420, -2981514, -1669206, 13006806, 2355433}, + {-16304899, -13605259, -6632427, -5142349, 16974359, -10911083, 27202044, 1719366, 1141648, -12796236}}, + {{-12863944, -13219986, -8318266, -11018091, -6810145, -4843894, 13475066, -3133972, 32674895, 13715045}, + {11423335, -5468059, 32344216, 8962751, 24989809, 9241752, -13265253, 16086212, -28740881, -15642093}, + {-1409668, 12530728, -6368726, 10847387, 19531186, -14132160, -11709148, 7791794, -27245943, 4383347}} + }, { + {{-28970898, 5271447, -1266009, -9736989, -12455236, 16732599, -4862407, -4906449, 27193557, 6245191}, + {-15193956, 5362278, -1783893, 2695834, 4960227, 12840725, 23061898, 3260492, 22510453, 8577507}, + {-12632451, 11257346, -32692994, 13548177, -721004, 10879011, 31168030, 13952092, -29571492, -3635906}}, + {{3877321, -9572739, 32416692, 5405324, -11004407, -13656635, 3759769, 11935320, 5611860, 8164018}, + {-16275802, 14667797, 15906460, 12155291, -22111149, -9039718, 32003002, -8832289, 5773085, -8422109}, + {-23788118, -8254300, 1950875, 8937633, 18686727, 16459170, -905725, 12376320, 31632953, 190926}}, + {{-24593607, -16138885, -8423991, 13378746, 14162407, 6901328, -8288749, 4508564, -25341555, -3627528}, + {8884438, -5884009, 6023974, 10104341, -6881569, -4941533, 18722941, -14786005, -1672488, 827625}, + {-32720583, -16289296, -32503547, 7101210, 13354605, 2659080, -1800575, -14108036, -24878478, 1541286}}, + {{2901347, -1117687, 3880376, -10059388, -17620940, -3612781, -21802117, -3567481, 20456845, -1885033}, + {27019610, 12299467, -13658288, -1603234, -12861660, -4861471, -19540150, -5016058, 29439641, 15138866}, + {21536104, -6626420, -32447818, -10690208, -22408077, 5175814, -5420040, -16361163, 7779328, 109896}}, + {{30279744, 14648750, -8044871, 6425558, 13639621, -743509, 28698390, 12180118, 23177719, -554075}, + {26572847, 3405927, -31701700, 12890905, -19265668, 5335866, -6493768, 2378492, 4439158, -13279347}, + {-22716706, 3489070, -9225266, -332753, 18875722, -1140095, 14819434, -12731527, -17717757, -5461437}}, + {{-5056483, 16566551, 15953661, 3767752, -10436499, 15627060, -820954, 2177225, 8550082, -15114165}, + {-18473302, 16596775, -381660, 15663611, 22860960, 15585581, -27844109, -3582739, -23260460, -8428588}, + {-32480551, 15707275, -8205912, -5652081, 29464558, 2713815, -22725137, 15860482, -21902570, 1494193}}, + {{-19562091, -14087393, -25583872, -9299552, 13127842, 759709, 21923482, 16529112, 8742704, 12967017}, + {-28464899, 1553205, 32536856, -10473729, -24691605, -406174, -8914625, -2933896, -29903758, 15553883}, + {21877909, 3230008, 9881174, 10539357, -4797115, 2841332, 11543572, 14513274, 19375923, -12647961}}, + {{8832269, -14495485, 13253511, 5137575, 5037871, 4078777, 24880818, -6222716, 2862653, 9455043}, + {29306751, 5123106, 20245049, -14149889, 9592566, 8447059, -2077124, -2990080, 15511449, 4789663}, + {-20679756, 7004547, 8824831, -9434977, -4045704, -3750736, -5754762, 108893, 23513200, 16652362}} + }, { + {{-33256173, 4144782, -4476029, -6579123, 10770039, -7155542, -6650416, -12936300, -18319198, 10212860}, + {2756081, 8598110, 7383731, -6859892, 22312759, -1105012, 21179801, 2600940, -9988298, -12506466}, + {-24645692, 13317462, -30449259, -15653928, 21365574, -10869657, 11344424, 864440, -2499677, -16710063}}, + {{-26432803, 6148329, -17184412, -14474154, 18782929, -275997, -22561534, 211300, 2719757, 4940997}, + {-1323882, 3911313, -6948744, 14759765, -30027150, 7851207, 21690126, 8518463, 26699843, 5276295}, + {-13149873, -6429067, 9396249, 365013, 24703301, -10488939, 1321586, 149635, -15452774, 7159369}}, + {{9987780, -3404759, 17507962, 9505530, 9731535, -2165514, 22356009, 8312176, 22477218, -8403385}, + {18155857, -16504990, 19744716, 9006923, 15154154, -10538976, 24256460, -4864995, -22548173, 9334109}, + {2986088, -4911893, 10776628, -3473844, 10620590, -7083203, -21413845, 14253545, -22587149, 536906}}, + {{4377756, 8115836, 24567078, 15495314, 11625074, 13064599, 7390551, 10589625, 10838060, -15420424}, + {-19342404, 867880, 9277171, -3218459, -14431572, -1986443, 19295826, -15796950, 6378260, 699185}, + {7895026, 4057113, -7081772, -13077756, -17886831, -323126, -716039, 15693155, -5045064, -13373962}}, + {{-7737563, -5869402, -14566319, -7406919, 11385654, 13201616, 31730678, -10962840, -3918636, -9669325}, + {10188286, -15770834, -7336361, 13427543, 22223443, 14896287, 30743455, 7116568, -21786507, 5427593}, + {696102, 13206899, 27047647, -10632082, 15285305, -9853179, 10798490, -4578720, 19236243, 12477404}}, + {{-11229439, 11243796, -17054270, -8040865, -788228, -8167967, -3897669, 11180504, -23169516, 7733644}, + {17800790, -14036179, -27000429, -11766671, 23887827, 3149671, 23466177, -10538171, 10322027, 15313801}, + {26246234, 11968874, 32263343, -5468728, 6830755, -13323031, -15794704, -101982, -24449242, 10890804}}, + {{-31365647, 10271363, -12660625, -6267268, 16690207, -13062544, -14982212, 16484931, 25180797, -5334884}, + {-586574, 10376444, -32586414, -11286356, 19801893, 10997610, 2276632, 9482883, 316878, 13820577}, + {-9882808, -4510367, -2115506, 16457136, -11100081, 11674996, 30756178, -7515054, 30696930, -3712849}}, + {{32988917, -9603412, 12499366, 7910787, -10617257, -11931514, -7342816, -9985397, -32349517, 7392473}, + {-8855661, 15927861, 9866406, -3649411, -2396914, -16655781, -30409476, -9134995, 25112947, -2926644}, + {-2504044, -436966, 25621774, -5678772, 15085042, -5479877, -24884878, -13526194, 5537438, -13914319}} + }, { + {{-11225584, 2320285, -9584280, 10149187, -33444663, 5808648, -14876251, -1729667, 31234590, 6090599}, + {-9633316, 116426, 26083934, 2897444, -6364437, -2688086, 609721, 15878753, -6970405, -9034768}, + {-27757857, 247744, -15194774, -9002551, 23288161, -10011936, -23869595, 6503646, 20650474, 1804084}}, + {{-27589786, 15456424, 8972517, 8469608, 15640622, 4439847, 3121995, -10329713, 27842616, -202328}, + {-15306973, 2839644, 22530074, 10026331, 4602058, 5048462, 28248656, 5031932, -11375082, 12714369}, + {20807691, -7270825, 29286141, 11421711, -27876523, -13868230, -21227475, 1035546, -19733229, 12796920}}, + {{12076899, -14301286, -8785001, -11848922, -25012791, 16400684, -17591495, -12899438, 3480665, -15182815}, + {-32361549, 5457597, 28548107, 7833186, 7303070, -11953545, -24363064, -15921875, -33374054, 2771025}, + {-21389266, 421932, 26597266, 6860826, 22486084, -6737172, -17137485, -4210226, -24552282, 15673397}}, + {{-20184622, 2338216, 19788685, -9620956, -4001265, -8740893, -20271184, 4733254, 3727144, -12934448}, + {6120119, 814863, -11794402, -622716, 6812205, -15747771, 2019594, 7975683, 31123697, -10958981}, + {30069250, -11435332, 30434654, 2958439, 18399564, -976289, 12296869, 9204260, -16432438, 9648165}}, + {{32705432, -1550977, 30705658, 7451065, -11805606, 9631813, 3305266, 5248604, -26008332, -11377501}, + {17219865, 2375039, -31570947, -5575615, -19459679, 9219903, 294711, 15298639, 2662509, -16297073}, + {-1172927, -7558695, -4366770, -4287744, -21346413, -8434326, 32087529, -1222777, 32247248, -14389861}}, + {{14312628, 1221556, 17395390, -8700143, -4945741, -8684635, -28197744, -9637817, -16027623, -13378845}, + {-1428825, -9678990, -9235681, 6549687, -7383069, -468664, 23046502, 9803137, 17597934, 2346211}, + {18510800, 15337574, 26171504, 981392, -22241552, 7827556, -23491134, -11323352, 3059833, -11782870}}, + {{10141598, 6082907, 17829293, -1947643, 9830092, 13613136, -25556636, -5544586, -33502212, 3592096}, + {33114168, -15889352, -26525686, -13343397, 33076705, 8716171, 1151462, 1521897, -982665, -6837803}, + {-32939165, -4255815, 23947181, -324178, -33072974, -12305637, -16637686, 3891704, 26353178, 693168}}, + {{30374239, 1595580, -16884039, 13186931, 4600344, 406904, 9585294, -400668, 31375464, 14369965}, + {-14370654, -7772529, 1510301, 6434173, -18784789, -6262728, 32732230, -13108839, 17901441, 16011505}, + {18171223, -11934626, -12500402, 15197122, -11038147, -15230035, -19172240, -16046376, 8764035, 12309598}} + }, { + {{5975908, -5243188, -19459362, -9681747, -11541277, 14015782, -23665757, 1228319, 17544096, -10593782}, + {5811932, -1715293, 3442887, -2269310, -18367348, -8359541, -18044043, -15410127, -5565381, 12348900}, + {-31399660, 11407555, 25755363, 6891399, -3256938, 14872274, -24849353, 8141295, -10632534, -585479}}, + {{-12675304, 694026, -5076145, 13300344, 14015258, -14451394, -9698672, -11329050, 30944593, 1130208}, + {8247766, -6710942, -26562381, -7709309, -14401939, -14648910, 4652152, 2488540, 23550156, -271232}, + {17294316, -3788438, 7026748, 15626851, 22990044, 113481, 2267737, -5908146, -408818, -137719}}, + {{16091085, -16253926, 18599252, 7340678, 2137637, -1221657, -3364161, 14550936, 3260525, -7166271}, + {-4910104, -13332887, 18550887, 10864893, -16459325, -7291596, -23028869, -13204905, -12748722, 2701326}, + {-8574695, 16099415, 4629974, -16340524, -20786213, -6005432, -10018363, 9276971, 11329923, 1862132}}, + {{14763076, -15903608, -30918270, 3689867, 3511892, 10313526, -21951088, 12219231, -9037963, -940300}, + {8894987, -3446094, 6150753, 3013931, 301220, 15693451, -31981216, -2909717, -15438168, 11595570}, + {15214962, 3537601, -26238722, -14058872, 4418657, -15230761, 13947276, 10730794, -13489462, -4363670}}, + {{-2538306, 7682793, 32759013, 263109, -29984731, -7955452, -22332124, -10188635, 977108, 699994}, + {-12466472, 4195084, -9211532, 550904, -15565337, 12917920, 19118110, -439841, -30534533, -14337913}, + {31788461, -14507657, 4799989, 7372237, 8808585, -14747943, 9408237, -10051775, 12493932, -5409317}}, + {{-25680606, 5260744, -19235809, -6284470, -3695942, 16566087, 27218280, 2607121, 29375955, 6024730}, + {842132, -2794693, -4763381, -8722815, 26332018, -12405641, 11831880, 6985184, -9940361, 2854096}, + {-4847262, -7969331, 2516242, -5847713, 9695691, -7221186, 16512645, 960770, 12121869, 16648078}}, + {{-15218652, 14667096, -13336229, 2013717, 30598287, -464137, -31504922, -7882064, 20237806, 2838411}, + {-19288047, 4453152, 15298546, -16178388, 22115043, -15972604, 12544294, -13470457, 1068881, -12499905}, + {-9558883, -16518835, 33238498, 13506958, 30505848, -1114596, -8486907, -2630053, 12521378, 4845654}}, + {{-28198521, 10744108, -2958380, 10199664, 7759311, -13088600, 3409348, -873400, -6482306, -12885870}, + {-23561822, 6230156, -20382013, 10655314, -24040585, -11621172, 10477734, -1240216, -3113227, 13974498}, + {12966261, 15550616, -32038948, -1615346, 21025980, -629444, 5642325, 7188737, 18895762, 12629579}} + }, { + {{14741879, -14946887, 22177208, -11721237, 1279741, 8058600, 11758140, 789443, 32195181, 3895677}, + {10758205, 15755439, -4509950, 9243698, -4879422, 6879879, -2204575, -3566119, -8982069, 4429647}, + {-2453894, 15725973, -20436342, -10410672, -5803908, -11040220, -7135870, -11642895, 18047436, -15281743}}, + {{-25173001, -11307165, 29759956, 11776784, -22262383, -15820455, 10993114, -12850837, -17620701, -9408468}, + {21987233, 700364, -24505048, 14972008, -7774265, -5718395, 32155026, 2581431, -29958985, 8773375}, + {-25568350, 454463, -13211935, 16126715, 25240068, 8594567, 20656846, 12017935, -7874389, -13920155}}, + {{6028182, 6263078, -31011806, -11301710, -818919, 2461772, -31841174, -5468042, -1721788, -2776725}, + {-12278994, 16624277, 987579, -5922598, 32908203, 1248608, 7719845, -4166698, 28408820, 6816612}, + {-10358094, -8237829, 19549651, -12169222, 22082623, 16147817, 20613181, 13982702, -10339570, 5067943}}, + {{-30505967, -3821767, 12074681, 13582412, -19877972, 2443951, -19719286, 12746132, 5331210, -10105944}, + {30528811, 3601899, -1957090, 4619785, -27361822, -15436388, 24180793, -12570394, 27679908, -1648928}, + {9402404, -13957065, 32834043, 10838634, -26580150, -13237195, 26653274, -8685565, 22611444, -12715406}}, + {{22190590, 1118029, 22736441, 15130463, -30460692, -5991321, 19189625, -4648942, 4854859, 6622139}, + {-8310738, -2953450, -8262579, -3388049, -10401731, -271929, 13424426, -3567227, 26404409, 13001963}, + {-31241838, -15415700, -2994250, 8939346, 11562230, -12840670, -26064365, -11621720, -15405155, 11020693}}, + {{1866042, -7949489, -7898649, -10301010, 12483315, 13477547, 3175636, -12424163, 28761762, 1406734}, + {-448555, -1777666, 13018551, 3194501, -9580420, -11161737, 24760585, -4347088, 25577411, -13378680}, + {-24290378, 4759345, -690653, -1852816, 2066747, 10693769, -29595790, 9884936, -9368926, 4745410}}, + {{-9141284, 6049714, -19531061, -4341411, -31260798, 9944276, -15462008, -11311852, 10931924, -11931931}, + {-16561513, 14112680, -8012645, 4817318, -8040464, -11414606, -22853429, 10856641, -20470770, 13434654}, + {22759489, -10073434, -16766264, -1871422, 13637442, -10168091, 1765144, -12654326, 28445307, -5364710}}, + {{29875063, 12493613, 2795536, -3786330, 1710620, 15181182, -10195717, -8788675, 9074234, 1167180}, + {-26205683, 11014233, -9842651, -2635485, -26908120, 7532294, -18716888, -9535498, 3843903, 9367684}, + {-10969595, -6403711, 9591134, 9582310, 11349256, 108879, 16235123, 8601684, -139197, 4242895}} + }, { + {{22092954, -13191123, -2042793, -11968512, 32186753, -11517388, -6574341, 2470660, -27417366, 16625501}, + {-11057722, 3042016, 13770083, -9257922, 584236, -544855, -7770857, 2602725, -27351616, 14247413}, + {6314175, -10264892, -32772502, 15957557, -10157730, 168750, -8618807, 14290061, 27108877, -1180880}}, + {{-8586597, -7170966, 13241782, 10960156, -32991015, -13794596, 33547976, -11058889, -27148451, 981874}, + {22833440, 9293594, -32649448, -13618667, -9136966, 14756819, -22928859, -13970780, -10479804, -16197962}, + {-7768587, 3326786, -28111797, 10783824, 19178761, 14905060, 22680049, 13906969, -15933690, 3797899}}, + {{21721356, -4212746, -12206123, 9310182, -3882239, -13653110, 23740224, -2709232, 20491983, -8042152}, + {9209270, -15135055, -13256557, -6167798, -731016, 15289673, 25947805, 15286587, 30997318, -6703063}, + {7392032, 16618386, 23946583, -8039892, -13265164, -1533858, -14197445, -2321576, 17649998, -250080}}, + {{-9301088, -14193827, 30609526, -3049543, -25175069, -1283752, -15241566, -9525724, -2233253, 7662146}, + {-17558673, 1763594, -33114336, 15908610, -30040870, -12174295, 7335080, -8472199, -3174674, 3440183}, + {-19889700, -5977008, -24111293, -9688870, 10799743, -16571957, 40450, -4431835, 4862400, 1133}}, + {{-32856209, -7873957, -5422389, 14860950, -16319031, 7956142, 7258061, 311861, -30594991, -7379421}, + {-3773428, -1565936, 28985340, 7499440, 24445838, 9325937, 29727763, 16527196, 18278453, 15405622}, + {-4381906, 8508652, -19898366, -3674424, -5984453, 15149970, -13313598, 843523, -21875062, 13626197}}, + {{2281448, -13487055, -10915418, -2609910, 1879358, 16164207, -10783882, 3953792, 13340839, 15928663}, + {31727126, -7179855, -18437503, -8283652, 2875793, -16390330, -25269894, -7014826, -23452306, 5964753}, + {4100420, -5959452, -17179337, 6017714, -18705837, 12227141, -26684835, 11344144, 2538215, -7570755}}, + {{-9433605, 6123113, 11159803, -2156608, 30016280, 14966241, -20474983, 1485421, -629256, -15958862}, + {-26804558, 4260919, 11851389, 9658551, -32017107, 16367492, -20205425, -13191288, 11659922, -11115118}, + {26180396, 10015009, -30844224, -8581293, 5418197, 9480663, 2231568, -10170080, 33100372, -1306171}}, + {{15121113, -5201871, -10389905, 15427821, -27509937, -15992507, 21670947, 4486675, -5931810, -14466380}, + {16166486, -9483733, -11104130, 6023908, -31926798, -1364923, 2340060, -16254968, -10735770, -10039824}, + {28042865, -3557089, -12126526, 12259706, -3717498, -6945899, 6766453, -8689599, 18036436, 5803270}} + }, { + {{-817581, 6763912, 11803561, 1585585, 10958447, -2671165, 23855391, 4598332, -6159431, -14117438}, + {-31031306, -14256194, 17332029, -2383520, 31312682, -5967183, 696309, 50292, -20095739, 11763584}, + {-594563, -2514283, -32234153, 12643980, 12650761, 14811489, 665117, -12613632, -19773211, -10713562}}, + {{30464590, -11262872, -4127476, -12734478, 19835327, -7105613, -24396175, 2075773, -17020157, 992471}, + {18357185, -6994433, 7766382, 16342475, -29324918, 411174, 14578841, 8080033, -11574335, -10601610}, + {19598397, 10334610, 12555054, 2555664, 18821899, -10339780, 21873263, 16014234, 26224780, 16452269}}, + {{-30223925, 5145196, 5944548, 16385966, 3976735, 2009897, -11377804, -7618186, -20533829, 3698650}, + {14187449, 3448569, -10636236, -10810935, -22663880, -3433596, 7268410, -10890444, 27394301, 12015369}, + {19695761, 16087646, 28032085, 12999827, 6817792, 11427614, 20244189, -1312777, -13259127, -3402461}}, + {{30860103, 12735208, -1888245, -4699734, -16974906, 2256940, -8166013, 12298312, -8550524, -10393462}, + {-5719826, -11245325, -1910649, 15569035, 26642876, -7587760, -5789354, -15118654, -4976164, 12651793}, + {-2848395, 9953421, 11531313, -5282879, 26895123, -12697089, -13118820, -16517902, 9768698, -2533218}}, + {{-24719459, 1894651, -287698, -4704085, 15348719, -8156530, 32767513, 12765450, 4940095, 10678226}, + {18860224, 15980149, -18987240, -1562570, -26233012, -11071856, -7843882, 13944024, -24372348, 16582019}, + {-15504260, 4970268, -29893044, 4175593, -20993212, -2199756, -11704054, 15444560, -11003761, 7989037}}, + {{31490452, 5568061, -2412803, 2182383, -32336847, 4531686, -32078269, 6200206, -19686113, -14800171}, + {-17308668, -15879940, -31522777, -2831, -32887382, 16375549, 8680158, -16371713, 28550068, -6857132}, + {-28126887, -5688091, 16837845, -1820458, -6850681, 12700016, -30039981, 4364038, 1155602, 5988841}}, + {{21890435, -13272907, -12624011, 12154349, -7831873, 15300496, 23148983, -4470481, 24618407, 8283181}, + {-33136107, -10512751, 9975416, 6841041, -31559793, 16356536, 3070187, -7025928, 1466169, 10740210}, + {-1509399, -15488185, -13503385, -10655916, 32799044, 909394, -13938903, -5779719, -32164649, -15327040}}, + {{3960823, -14267803, -28026090, -15918051, -19404858, 13146868, 15567327, 951507, -3260321, -573935}, + {24740841, 5052253, -30094131, 8961361, 25877428, 6165135, -24368180, 14397372, -7380369, -6144105}, + {-28888365, 3510803, -28103278, -1158478, -11238128, -10631454, -15441463, -14453128, -1625486, -6494814}} + }, { + {{793299, -9230478, 8836302, -6235707, -27360908, -2369593, 33152843, -4885251, -9906200, -621852}, + {5666233, 525582, 20782575, -8038419, -24538499, 14657740, 16099374, 1468826, -6171428, -15186581}, + {-4859255, -3779343, -2917758, -6748019, 7778750, 11688288, -30404353, -9871238, -1558923, -9863646}}, + {{10896332, -7719704, 824275, 472601, -19460308, 3009587, 25248958, 14783338, -30581476, -15757844}, + {10566929, 12612572, -31944212, 11118703, -12633376, 12362879, 21752402, 8822496, 24003793, 14264025}, + {27713862, -7355973, -11008240, 9227530, 27050101, 2504721, 23886875, -13117525, 13958495, -5732453}}, + {{-23481610, 4867226, -27247128, 3900521, 29838369, -8212291, -31889399, -10041781, 7340521, -15410068}, + {4646514, -8011124, -22766023, -11532654, 23184553, 8566613, 31366726, -1381061, -15066784, -10375192}, + {-17270517, 12723032, -16993061, 14878794, 21619651, -6197576, 27584817, 3093888, -8843694, 3849921}}, + {{-9064912, 2103172, 25561640, -15125738, -5239824, 9582958, 32477045, -9017955, 5002294, -15550259}, + {-12057553, -11177906, 21115585, -13365155, 8808712, -12030708, 16489530, 13378448, -25845716, 12741426}, + {-5946367, 10645103, -30911586, 15390284, -3286982, -7118677, 24306472, 15852464, 28834118, -7646072}}, + {{-17335748, -9107057, -24531279, 9434953, -8472084, -583362, -13090771, 455841, 20461858, 5491305}, + {13669248, -16095482, -12481974, -10203039, -14569770, -11893198, -24995986, 11293807, -28588204, -9421832}, + {28497928, 6272777, -33022994, 14470570, 8906179, -1225630, 18504674, -14165166, 29867745, -8795943}}, + {{-16207023, 13517196, -27799630, -13697798, 24009064, -6373891, -6367600, -13175392, 22853429, -4012011}, + {24191378, 16712145, -13931797, 15217831, 14542237, 1646131, 18603514, -11037887, 12876623, -2112447}, + {17902668, 4518229, -411702, -2829247, 26878217, 5258055, -12860753, 608397, 16031844, 3723494}}, + {{-28632773, 12763728, -20446446, 7577504, 33001348, -13017745, 17558842, -7872890, 23896954, -4314245}, + {-20005381, -12011952, 31520464, 605201, 2543521, 5991821, -2945064, 7229064, -9919646, -8826859}, + {28816045, 298879, -28165016, -15920938, 19000928, -1665890, -12680833, -2949325, -18051778, -2082915}}, + {{16000882, -344896, 3493092, -11447198, -29504595, -13159789, 12577740, 16041268, -19715240, 7847707}, + {10151868, 10572098, 27312476, 7922682, 14825339, 4723128, -32855931, -6519018, -10020567, 3852848}, + {-11430470, 15697596, -21121557, -4420647, 5386314, 15063598, 16514493, -15932110, 29330899, -15076224}} + }, { + {{-25499735, -4378794, -15222908, -6901211, 16615731, 2051784, 3303702, 15490, -27548796, 12314391}, + {15683520, -6003043, 18109120, -9980648, 15337968, -5997823, -16717435, 15921866, 16103996, -3731215}, + {-23169824, -10781249, 13588192, -1628807, -3798557, -1074929, -19273607, 5402699, -29815713, -9841101}}, + {{23190676, 2384583, -32714340, 3462154, -29903655, -1529132, -11266856, 8911517, -25205859, 2739713}, + {21374101, -3554250, -33524649, 9874411, 15377179, 11831242, -33529904, 6134907, 4931255, 11987849}, + {-7732, -2978858, -16223486, 7277597, 105524, -322051, -31480539, 13861388, -30076310, 10117930}}, + {{-29501170, -10744872, -26163768, 13051539, -25625564, 5089643, -6325503, 6704079, 12890019, 15728940}, + {-21972360, -11771379, -951059, -4418840, 14704840, 2695116, 903376, -10428139, 12885167, 8311031}, + {-17516482, 5352194, 10384213, -13811658, 7506451, 13453191, 26423267, 4384730, 1888765, -5435404}}, + {{-25817338, -3107312, -13494599, -3182506, 30896459, -13921729, -32251644, -12707869, -19464434, -3340243}, + {-23607977, -2665774, -526091, 4651136, 5765089, 4618330, 6092245, 14845197, 17151279, -9854116}, + {-24830458, -12733720, -15165978, 10367250, -29530908, -265356, 22825805, -7087279, -16866484, 16176525}}, + {{-23583256, 6564961, 20063689, 3798228, -4740178, 7359225, 2006182, -10363426, -28746253, -10197509}, + {-10626600, -4486402, -13320562, -5125317, 3432136, -6393229, 23632037, -1940610, 32808310, 1099883}, + {15030977, 5768825, -27451236, -2887299, -6427378, -15361371, -15277896, -6809350, 2051441, -15225865}}, + {{-3362323, -7239372, 7517890, 9824992, 23555850, 295369, 5148398, -14154188, -22686354, 16633660}, + {4577086, -16752288, 13249841, -15304328, 19958763, -14537274, 18559670, -10759549, 8402478, -9864273}, + {-28406330, -1051581, -26790155, -907698, -17212414, -11030789, 9453451, -14980072, 17983010, 9967138}}, + {{-25762494, 6524722, 26585488, 9969270, 24709298, 1220360, -1677990, 7806337, 17507396, 3651560}, + {-10420457, -4118111, 14584639, 15971087, -15768321, 8861010, 26556809, -5574557, -18553322, -11357135}, + {2839101, 14284142, 4029895, 3472686, 14402957, 12689363, -26642121, 8459447, -5605463, -7621941}}, + {{-4839289, -3535444, 9744961, 2871048, 25113978, 3187018, -25110813, -849066, 17258084, -7977739}, + {18164541, -10595176, -17154882, -1542417, 19237078, -9745295, 23357533, -15217008, 26908270, 12150756}, + {-30264870, -7647865, 5112249, -7036672, -1499807, -6974257, 43168, -5537701, -32302074, 16215819}} + }, { + {{-6898905, 9824394, -12304779, -4401089, -31397141, -6276835, 32574489, 12532905, -7503072, -8675347}, + {-27343522, -16515468, -27151524, -10722951, 946346, 16291093, 254968, 7168080, 21676107, -1943028}, + {21260961, -8424752, -16831886, -11920822, -23677961, 3968121, -3651949, -6215466, -3556191, -7913075}}, + {{16544754, 13250366, -16804428, 15546242, -4583003, 12757258, -2462308, -8680336, -18907032, -9662799}, + {-2415239, -15577728, 18312303, 4964443, -15272530, -12653564, 26820651, 16690659, 25459437, -4564609}, + {-25144690, 11425020, 28423002, -11020557, -6144921, -15826224, 9142795, -2391602, -6432418, -1644817}}, + {{-23104652, 6253476, 16964147, -3768872, -25113972, -12296437, -27457225, -16344658, 6335692, 7249989}, + {-30333227, 13979675, 7503222, -12368314, -11956721, -4621693, -30272269, 2682242, 25993170, -12478523}, + {4364628, 5930691, 32304656, -10044554, -8054781, 15091131, 22857016, -10598955, 31820368, 15075278}}, + {{31879134, -8918693, 17258761, 90626, -8041836, -4917709, 24162788, -9650886, -17970238, 12833045}, + {19073683, 14851414, -24403169, -11860168, 7625278, 11091125, -19619190, 2074449, -9413939, 14905377}, + {24483667, -11935567, -2518866, -11547418, -1553130, 15355506, -25282080, 9253129, 27628530, -7555480}}, + {{17597607, 8340603, 19355617, 552187, 26198470, -3176583, 4593324, -9157582, -14110875, 15297016}, + {510886, 14337390, -31785257, 16638632, 6328095, 2713355, -20217417, -11864220, 8683221, 2921426}, + {18606791, 11874196, 27155355, -5281482, -24031742, 6265446, -25178240, -1278924, 4674690, 13890525}}, + {{13609624, 13069022, -27372361, -13055908, 24360586, 9592974, 14977157, 9835105, 4389687, 288396}, + {9922506, -519394, 13613107, 5883594, -18758345, -434263, -12304062, 8317628, 23388070, 16052080}, + {12720016, 11937594, -31970060, -5028689, 26900120, 8561328, -20155687, -11632979, -14754271, -10812892}}, + {{15961858, 14150409, 26716931, -665832, -22794328, 13603569, 11829573, 7467844, -28822128, 929275}, + {11038231, -11582396, -27310482, -7316562, -10498527, -16307831, -23479533, -9371869, -21393143, 2465074}, + {20017163, -4323226, 27915242, 1529148, 12396362, 15675764, 13817261, -9658066, 2463391, -4622140}}, + {{-16358878, -12663911, -12065183, 4996454, -1256422, 1073572, 9583558, 12851107, 4003896, 12673717}, + {-1731589, -15155870, -3262930, 16143082, 19294135, 13385325, 14741514, -9103726, 7903886, 2348101}, + {24536016, -16515207, 12715592, -3862155, 1511293, 10047386, -3842346, -7129159, -28377538, 10048127}} + }, { + {{-12622226, -6204820, 30718825, 2591312, -10617028, 12192840, 18873298, -7297090, -32297756, 15221632}, + {-26478122, -11103864, 11546244, -1852483, 9180880, 7656409, -21343950, 2095755, 29769758, 6593415}, + {-31994208, -2907461, 4176912, 3264766, 12538965, -868111, 26312345, -6118678, 30958054, 8292160}}, + {{31429822, -13959116, 29173532, 15632448, 12174511, -2760094, 32808831, 3977186, 26143136, -3148876}, + {22648901, 1402143, -22799984, 13746059, 7936347, 365344, -8668633, -1674433, -3758243, -2304625}, + {-15491917, 8012313, -2514730, -12702462, -23965846, -10254029, -1612713, -1535569, -16664475, 8194478}}, + {{27338066, -7507420, -7414224, 10140405, -19026427, -6589889, 27277191, 8855376, 28572286, 3005164}, + {26287124, 4821776, 25476601, -4145903, -3764513, -15788984, -18008582, 1182479, -26094821, -13079595}, + {-7171154, 3178080, 23970071, 6201893, -17195577, -4489192, -21876275, -13982627, 32208683, -1198248}}, + {{-16657702, 2817643, -10286362, 14811298, 6024667, 13349505, -27315504, -10497842, -27672585, -11539858}, + {15941029, -9405932, -21367050, 8062055, 31876073, -238629, -15278393, -1444429, 15397331, -4130193}, + {8934485, -13485467, -23286397, -13423241, -32446090, 14047986, 31170398, -1441021, -27505566, 15087184}}, + {{-18357243, -2156491, 24524913, -16677868, 15520427, -6360776, -15502406, 11461896, 16788528, -5868942}, + {-1947386, 16013773, 21750665, 3714552, -17401782, -16055433, -3770287, -10323320, 31322514, -11615635}, + {21426655, -5650218, -13648287, -5347537, -28812189, -4920970, -18275391, -14621414, 13040862, -12112948}}, + {{11293895, 12478086, -27136401, 15083750, -29307421, 14748872, 14555558, -13417103, 1613711, 4896935}, + {-25894883, 15323294, -8489791, -8057900, 25967126, -13425460, 2825960, -4897045, -23971776, -11267415}, + {-15924766, -5229880, -17443532, 6410664, 3622847, 10243618, 20615400, 12405433, -23753030, -8436416}}, + {{-7091295, 12556208, -20191352, 9025187, -17072479, 4333801, 4378436, 2432030, 23097949, -566018}, + {4565804, -16025654, 20084412, -7842817, 1724999, 189254, 24767264, 10103221, -18512313, 2424778}, + {366633, -11976806, 8173090, -6890119, 30788634, 5745705, -7168678, 1344109, -3642553, 12412659}}, + {{-24001791, 7690286, 14929416, -168257, -32210835, -13412986, 24162697, -15326504, -3141501, 11179385}, + {18289522, -14724954, 8056945, 16430056, -21729724, 7842514, -6001441, -1486897, -18684645, -11443503}, + {476239, 6601091, -6152790, -9723375, 17503545, -4863900, 27672959, 13403813, 11052904, 5219329}} + }, { + {{20678546, -8375738, -32671898, 8849123, -5009758, 14574752, 31186971, -3973730, 9014762, -8579056}, + {-13644050, -10350239, -15962508, 5075808, -1514661, -11534600, -33102500, 9160280, 8473550, -3256838}, + {24900749, 14435722, 17209120, -15292541, -22592275, 9878983, -7689309, -16335821, -24568481, 11788948}}, + {{-3118155, -11395194, -13802089, 14797441, 9652448, -6845904, -20037437, 10410733, -24568470, -1458691}, + {-15659161, 16736706, -22467150, 10215878, -9097177, 7563911, 11871841, -12505194, -18513325, 8464118}, + {-23400612, 8348507, -14585951, -861714, -3950205, -6373419, 14325289, 8628612, 33313881, -8370517}}, + {{-20186973, -4967935, 22367356, 5271547, -1097117, -4788838, -24805667, -10236854, -8940735, -5818269}, + {-6948785, -1795212, -32625683, -16021179, 32635414, -7374245, 15989197, -12838188, 28358192, -4253904}, + {-23561781, -2799059, -32351682, -1661963, -9147719, 10429267, -16637684, 4072016, -5351664, 5596589}}, + {{-28236598, -3390048, 12312896, 6213178, 3117142, 16078565, 29266239, 2557221, 1768301, 15373193}, + {-7243358, -3246960, -4593467, -7553353, -127927, -912245, -1090902, -4504991, -24660491, 3442910}, + {-30210571, 5124043, 14181784, 8197961, 18964734, -11939093, 22597931, 7176455, -18585478, 13365930}}, + {{-7877390, -1499958, 8324673, 4690079, 6261860, 890446, 24538107, -8570186, -9689599, -3031667}, + {25008904, -10771599, -4305031, -9638010, 16265036, 15721635, 683793, -11823784, 15723479, -15163481}, + {-9660625, 12374379, -27006999, -7026148, -7724114, -12314514, 11879682, 5400171, 519526, -1235876}}, + {{22258397, -16332233, -7869817, 14613016, -22520255, -2950923, -20353881, 7315967, 16648397, 7605640}, + {-8081308, -8464597, -8223311, 9719710, 19259459, -15348212, 23994942, -5281555, -9468848, 4763278}, + {-21699244, 9220969, -15730624, 1084137, -25476107, -2852390, 31088447, -7764523, -11356529, 728112}}, + {{26047220, -11751471, -6900323, -16521798, 24092068, 9158119, -4273545, -12555558, -29365436, -5498272}, + {17510331, -322857, 5854289, 8403524, 17133918, -3112612, -28111007, 12327945, 10750447, 10014012}, + {-10312768, 3936952, 9156313, -8897683, 16498692, -994647, -27481051, -666732, 3424691, 7540221}}, + {{30322361, -6964110, 11361005, -4143317, 7433304, 4989748, -7071422, -16317219, -9244265, 15258046}, + {13054562, -2779497, 19155474, 469045, -12482797, 4566042, 5631406, 2711395, 1062915, -5136345}, + {-19240248, -11254599, -29509029, -7499965, -5835763, 13005411, -6066489, 12194497, 32960380, 1459310}} + }, { + {{19852034, 7027924, 23669353, 10020366, 8586503, -6657907, 394197, -6101885, 18638003, -11174937}, + {31395534, 15098109, 26581030, 8030562, -16527914, -5007134, 9012486, -7584354, -6643087, -5442636}, + {-9192165, -2347377, -1997099, 4529534, 25766844, 607986, -13222, 9677543, -32294889, -6456008}}, + {{-2444496, -149937, 29348902, 8186665, 1873760, 12489863, -30934579, -7839692, -7852844, -8138429}, + {-15236356, -15433509, 7766470, 746860, 26346930, -10221762, -27333451, 10754588, -9431476, 5203576}, + {31834314, 14135496, -770007, 5159118, 20917671, -16768096, -7467973, -7337524, 31809243, 7347066}}, + {{-9606723, -11874240, 20414459, 13033986, 13716524, -11691881, 19797970, -12211255, 15192876, -2087490}, + {-12663563, -2181719, 1168162, -3804809, 26747877, -14138091, 10609330, 12694420, 33473243, -13382104}, + {33184999, 11180355, 15832085, -11385430, -1633671, 225884, 15089336, -11023903, -6135662, 14480053}}, + {{31308717, -5619998, 31030840, -1897099, 15674547, -6582883, 5496208, 13685227, 27595050, 8737275}, + {-20318852, -15150239, 10933843, -16178022, 8335352, -7546022, -31008351, -12610604, 26498114, 66511}, + {22644454, -8761729, -16671776, 4884562, -3105614, -13559366, 30540766, -4286747, -13327787, -7515095}}, + {{-28017847, 9834845, 18617207, -2681312, -3401956, -13307506, 8205540, 13585437, -17127465, 15115439}, + {23711543, -672915, 31206561, -8362711, 6164647, -9709987, -33535882, -1426096, 8236921, 16492939}, + {-23910559, -13515526, -26299483, -4503841, 25005590, -7687270, 19574902, 10071562, 6708380, -6222424}}, + {{2101391, -4930054, 19702731, 2367575, -15427167, 1047675, 5301017, 9328700, 29955601, -11678310}, + {3096359, 9271816, -21620864, -15521844, -14847996, -7592937, -25892142, -12635595, -9917575, 6216608}, + {-32615849, 338663, -25195611, 2510422, -29213566, -13820213, 24822830, -6146567, -26767480, 7525079}}, + {{-23066649, -13985623, 16133487, -7896178, -3389565, 778788, -910336, -2782495, -19386633, 11994101}, + {21691500, -13624626, -641331, -14367021, 3285881, -3483596, -25064666, 9718258, -7477437, 13381418}, + {18445390, -4202236, 14979846, 11622458, -1727110, -3582980, 23111648, -6375247, 28535282, 15779576}}, + {{30098053, 3089662, -9234387, 16662135, -21306940, 11308411, -14068454, 12021730, 9955285, -16303356}, + {9734894, -14576830, -7473633, -9138735, 2060392, 11313496, -18426029, 9924399, 20194861, 13380996}, + {-26378102, -7965207, -22167821, 15789297, -18055342, -6168792, -1984914, 15707771, 26342023, 10146099}} + }, { + {{-26016874, -219943, 21339191, -41388, 19745256, -2878700, -29637280, 2227040, 21612326, -545728}, + {-13077387, 1184228, 23562814, -5970442, -20351244, -6348714, 25764461, 12243797, -20856566, 11649658}, + {-10031494, 11262626, 27384172, 2271902, 26947504, -15997771, 39944, 6114064, 33514190, 2333242}}, + {{-21433588, -12421821, 8119782, 7219913, -21830522, -9016134, -6679750, -12670638, 24350578, -13450001}, + {-4116307, -11271533, -23886186, 4843615, -30088339, 690623, -31536088, -10406836, 8317860, 12352766}, + {18200138, -14475911, -33087759, -2696619, -23702521, -9102511, -23552096, -2287550, 20712163, 6719373}}, + {{26656208, 6075253, -7858556, 1886072, -28344043, 4262326, 11117530, -3763210, 26224235, -3297458}, + {-17168938, -14854097, -3395676, -16369877, -19954045, 14050420, 21728352, 9493610, 18620611, -16428628}, + {-13323321, 13325349, 11432106, 5964811, 18609221, 6062965, -5269471, -9725556, -30701573, -16479657}}, + {{-23860538, -11233159, 26961357, 1640861, -32413112, -16737940, 12248509, -5240639, 13735342, 1934062}, + {25089769, 6742589, 17081145, -13406266, 21909293, -16067981, -15136294, -3765346, -21277997, 5473616}, + {31883677, -7961101, 1083432, -11572403, 22828471, 13290673, -7125085, 12469656, 29111212, -5451014}}, + {{24244947, -15050407, -26262976, 2791540, -14997599, 16666678, 24367466, 6388839, -10295587, 452383}, + {-25640782, -3417841, 5217916, 16224624, 19987036, -4082269, -24236251, -5915248, 15766062, 8407814}, + {-20406999, 13990231, 15495425, 16395525, 5377168, 15166495, -8917023, -4388953, -8067909, 2276718}}, + {{30157918, 12924066, -17712050, 9245753, 19895028, 3368142, -23827587, 5096219, 22740376, -7303417}, + {2041139, -14256350, 7783687, 13876377, -25946985, -13352459, 24051124, 13742383, -15637599, 13295222}, + {33338237, -8505733, 12532113, 7977527, 9106186, -1715251, -17720195, -4612972, -4451357, -14669444}}, + {{-20045281, 5454097, -14346548, 6447146, 28862071, 1883651, -2469266, -4141880, 7770569, 9620597}, + {23208068, 7979712, 33071466, 8149229, 1758231, -10834995, 30945528, -1694323, -33502340, -14767970}, + {1439958, -16270480, -1079989, -793782, 4625402, 10647766, -5043801, 1220118, 30494170, -11440799}}, + {{-5037580, -13028295, -2970559, -3061767, 15640974, -6701666, -26739026, 926050, -1684339, -13333647}, + {13908495, -3549272, 30919928, -6273825, -21521863, 7989039, 9021034, 9078865, 3353509, 4033511}, + {-29663431, -15113610, 32259991, -344482, 24295849, -12912123, 23161163, 8839127, 27485041, 7356032}} + }, { + {{9661027, 705443, 11980065, -5370154, -1628543, 14661173, -6346142, 2625015, 28431036, -16771834}, + {-23839233, -8311415, -25945511, 7480958, -17681669, -8354183, -22545972, 14150565, 15970762, 4099461}, + {29262576, 16756590, 26350592, -8793563, 8529671, -11208050, 13617293, -9937143, 11465739, 8317062}}, + {{-25493081, -6962928, 32500200, -9419051, -23038724, -2302222, 14898637, 3848455, 20969334, -5157516}, + {-20384450, -14347713, -18336405, 13884722, -33039454, 2842114, -21610826, -3649888, 11177095, 14989547}, + {-24496721, -11716016, 16959896, 2278463, 12066309, 10137771, 13515641, 2581286, -28487508, 9930240}}, + {{-17751622, -2097826, 16544300, -13009300, -15914807, -14949081, 18345767, -13403753, 16291481, -5314038}, + {-33229194, 2553288, 32678213, 9875984, 8534129, 6889387, -9676774, 6957617, 4368891, 9788741}, + {16660756, 7281060, -10830758, 12911820, 20108584, -8101676, -21722536, -8613148, 16250552, -11111103}}, + {{-19765507, 2390526, -16551031, 14161980, 1905286, 6414907, 4689584, 10604807, -30190403, 4782747}, + {-1354539, 14736941, -7367442, -13292886, 7710542, -14155590, -9981571, 4383045, 22546403, 437323}, + {31665577, -12180464, -16186830, 1491339, -18368625, 3294682, 27343084, 2786261, -30633590, -14097016}}, + {{-14467279, -683715, -33374107, 7448552, 19294360, 14334329, -19690631, 2355319, -19284671, -6114373}, + {15121312, -15796162, 6377020, -6031361, -10798111, -12957845, 18952177, 15496498, -29380133, 11754228}, + {-2637277, -13483075, 8488727, -14303896, 12728761, -1622493, 7141596, 11724556, 22761615, -10134141}}, + {{16918416, 11729663, -18083579, 3022987, -31015732, -13339659, -28741185, -12227393, 32851222, 11717399}, + {11166634, 7338049, -6722523, 4531520, -29468672, -7302055, 31474879, 3483633, -1193175, -4030831}, + {-185635, 9921305, 31456609, -13536438, -12013818, 13348923, 33142652, 6546660, -19985279, -3948376}}, + {{-32460596, 11266712, -11197107, -7899103, 31703694, 3855903, -8537131, -12833048, -30772034, -15486313}, + {-18006477, 12709068, 3991746, -6479188, -21491523, -10550425, -31135347, -16049879, 10928917, 3011958}, + {-6957757, -15594337, 31696059, 334240, 29576716, 14796075, -30831056, -12805180, 18008031, 10258577}}, + {{-22448644, 15655569, 7018479, -4410003, -30314266, -1201591, -1853465, 1367120, 25127874, 6671743}, + {29701166, -14373934, -10878120, 9279288, -17568, 13127210, 21382910, 11042292, 25838796, 4642684}, + {-20430234, 14955537, -24126347, 8124619, -5369288, -5990470, 30468147, -13900640, 18423289, 4177476}} + } +}; + +const ge_precomp ge_Bi[8] = { + {{25967493, -14356035, 29566456, 3660896, -12694345, 4014787, 27544626, -11754271, -6079156, 2047605}, + {-12545711, 934262, -2722910, 3049990, -727428, 9406986, 12720692, 5043384, 19500929, -15469378}, + {-8738181, 4489570, 9688441, -14785194, 10184609, -12363380, 29287919, 11864899, -24514362, -4438546}}, {{15636291, -9688557, 24204773, -7912398, 616977, -16685262, 27787600, -14772189, 28944400, -1550024}, + {16568933, 4717097, -11556148, -1102322, 15682896, -11807043, 16354577, -11775962, 7689662, 11199574}, + {30464156, -5976125, -11779434, -15670865, 23220365, 15915852, 7512774, 10017326, -17749093, -9920357}}, {{10861363, 11473154, 27284546, 1981175, -30064349, 12577861, 32867885, 14515107, -15438304, 10819380}, + {4708026, 6336745, 20377586, 9066809, -11272109, 6594696, -25653668, 12483688, -12668491, 5581306}, + {19563160, 16186464, -29386857, 4097519, 10237984, -4348115, 28542350, 13850243, -23678021, -15815942}}, {{5153746, 9909285, 1723747, -2777874, 30523605, 5516873, 19480852, 5230134, -23952439, -15175766}, + {-30269007, -3463509, 7665486, 10083793, 28475525, 1649722, 20654025, 16520125, 30598449, 7715701}, + {28881845, 14381568, 9657904, 3680757, -20181635, 7843316, -31400660, 1370708, 29794553, -1409300}}, {{-22518993, -6692182, 14201702, -8745502, -23510406, 8844726, 18474211, -1361450, -13062696, 13821877}, + {-6455177, -7839871, 3374702, -4740862, -27098617, -10571707, 31655028, -7212327, 18853322, -14220951}, + {4566830, -12963868, -28974889, -12240689, -7602672, -2830569, -8514358, -10431137, 2207753, -3209784}}, {{-25154831, -4185821, 29681144, 7868801, -6854661, -9423865, -12437364, -663000, -31111463, -16132436}, + {25576264, -2703214, 7349804, -11814844, 16472782, 9300885, 3844789, 15725684, 171356, 6466918}, + {23103977, 13316479, 9739013, -16149481, 817875, -15038942, 8965339, -14088058, -30714912, 16193877}}, {{-33521811, 3180713, -2394130, 14003687, -16903474, -16270840, 17238398, 4729455, -18074513, 9256800}, + {-25182317, -4174131, 32336398, 5036987, -21236817, 11360617, 22616405, 9761698, -19827198, 630305}, + {-13720693, 2639453, -24237460, -7406481, 9494427, -5774029, -6554551, -15960994, -2449256, -14291300}}, {{-3151181, -5046075, 9282714, 6866145, -31907062, -863023, -18940575, 15033784, 25105118, -7894876}, + {-24326370, 15950226, -31801215, -14592823, -11662737, -5090925, 1573892, -2625887, 2198790, -15804619}, + {-3099351, 10324967, -2241613, 7453183, -5446979, -2735503, -13812022, -16236442, -32461234, -12290683}} +}; + +/* A = 2 * (1 - d) / (1 + d) = 486662 */ +const fe fe_ma2 = {-12721188, -3529, 0, 0, 0, 0, 0, 0, 0, 0}; /* -A^2 */ +const fe fe_ma = {-486662, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* -A */ +const fe fe_fffb1 = {-31702527, -2466483, -26106795, -12203692, -12169197, -321052, 14850977, -10296299, -16929438, -407568}; /* sqrt(-2 * A * (A + 2)) */ +const fe fe_fffb2 = {8166131, -6741800, -17040804, 3154616, 21461005, 1466302, -30876704, -6368709, 10503587, -13363080}; /* sqrt(2 * A * (A + 2)) */ +const fe fe_fffb3 = {-13620103, 14639558, 4532995, 7679154, 16815101, -15883539, -22863840, -14813421, 13716513, -6477756}; /* sqrt(-sqrt(-1) * A * (A + 2)) */ +const fe fe_fffb4 = {-21786234, -12173074, 21573800, 4524538, -4645904, 16204591, 8012863, -8444712, 3212926, 6885324}; /* sqrt(sqrt(-1) * A * (A + 2)) */ diff --git a/source-code/RingCT/crypto-ops.c b/source-code/RingCT/crypto-ops.c new file mode 100644 index 0000000..caa37a7 --- /dev/null +++ b/source-code/RingCT/crypto-ops.c @@ -0,0 +1,5806 @@ +// Copyright (c) 2014-2015, The Monero Project +// +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without modification, are +// permitted provided that the following conditions are met: +// +// 1. Redistributions of source code must retain the above copyright notice, this list of +// conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright notice, this list +// of conditions and the following disclaimer in the documentation and/or other +// materials provided with the distribution. +// +// 3. Neither the name of the copyright holder nor the names of its contributors may be +// used to endorse or promote products derived from this software without specific +// prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL +// THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF +// THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Parts of this file are originally copyright (c) 2012-2013 The Cryptonote developers +#include +#include + +#include "warnings.h" +#include "crypto-ops.h" + +//DISABLE_VS_WARNINGS(4146 4244) +/* Predeclarations */ + +static void fe_mul(fe, const fe, const fe); +static void fe_sq(fe, const fe); +static void fe_tobytes(unsigned char *, const fe); +static int fe_isnonzero(const fe); +static void ge_madd(ge_p1p1 *, const ge_p3 *, const ge_precomp *); +static void ge_msub(ge_p1p1 *, const ge_p3 *, const ge_precomp *); +static void ge_p2_0(ge_p2 *); +static void ge_p3_dbl(ge_p1p1 *, const ge_p3 *); +static void ge_sub(ge_p1p1 *, const ge_p3 *, const ge_cached *); +static void fe_divpowm1(fe, const fe, const fe); +/* +fe means field element. +Here the field is \Z/(2^255-19). +An element t, entries t[0]...t[9], represents the integer +t[0]+2^26 t[1]+2^51 t[2]+2^77 t[3]+2^102 t[4]+...+2^230 t[9]. +Bounds on each t[i] vary depending on context. +*/ + +/* +h = 0 +*/ + +void fe_0(fe h) +{ + h[0] = 0; + h[1] = 0; + h[2] = 0; + h[3] = 0; + h[4] = 0; + h[5] = 0; + h[6] = 0; + h[7] = 0; + h[8] = 0; + h[9] = 0; +} + +/* +h = 1 +*/ + +void fe_1(fe h) +{ + h[0] = 1; + h[1] = 0; + h[2] = 0; + h[3] = 0; + h[4] = 0; + h[5] = 0; + h[6] = 0; + h[7] = 0; + h[8] = 0; + h[9] = 0; +} + +/* +h = f + g +Can overlap h with f or g. + +Preconditions: + |f| bounded by 1.1*2^25,1.1*2^24,1.1*2^25,1.1*2^24,etc. + |g| bounded by 1.1*2^25,1.1*2^24,1.1*2^25,1.1*2^24,etc. + +Postconditions: + |h| bounded by 1.1*2^26,1.1*2^25,1.1*2^26,1.1*2^25,etc. +*/ + +void fe_add(fe h,const fe f,const fe g) +{ + int32_t f0 = f[0]; + int32_t f1 = f[1]; + int32_t f2 = f[2]; + int32_t f3 = f[3]; + int32_t f4 = f[4]; + int32_t f5 = f[5]; + int32_t f6 = f[6]; + int32_t f7 = f[7]; + int32_t f8 = f[8]; + int32_t f9 = f[9]; + int32_t g0 = g[0]; + int32_t g1 = g[1]; + int32_t g2 = g[2]; + int32_t g3 = g[3]; + int32_t g4 = g[4]; + int32_t g5 = g[5]; + int32_t g6 = g[6]; + int32_t g7 = g[7]; + int32_t g8 = g[8]; + int32_t g9 = g[9]; + int32_t h0 = f0 + g0; + int32_t h1 = f1 + g1; + int32_t h2 = f2 + g2; + int32_t h3 = f3 + g3; + int32_t h4 = f4 + g4; + int32_t h5 = f5 + g5; + int32_t h6 = f6 + g6; + int32_t h7 = f7 + g7; + int32_t h8 = f8 + g8; + int32_t h9 = f9 + g9; + h[0] = h0; + h[1] = h1; + h[2] = h2; + h[3] = h3; + h[4] = h4; + h[5] = h5; + h[6] = h6; + h[7] = h7; + h[8] = h8; + h[9] = h9; +} + +/* +Replace (f,g) with (g,g) if b == 1; +replace (f,g) with (f,g) if b == 0. + +Preconditions: b in {0,1}. +*/ + +void fe_cmov(fe f,const fe g,unsigned int b) +{ + int32_t f0 = f[0]; + int32_t f1 = f[1]; + int32_t f2 = f[2]; + int32_t f3 = f[3]; + int32_t f4 = f[4]; + int32_t f5 = f[5]; + int32_t f6 = f[6]; + int32_t f7 = f[7]; + int32_t f8 = f[8]; + int32_t f9 = f[9]; + int32_t g0 = g[0]; + int32_t g1 = g[1]; + int32_t g2 = g[2]; + int32_t g3 = g[3]; + int32_t g4 = g[4]; + int32_t g5 = g[5]; + int32_t g6 = g[6]; + int32_t g7 = g[7]; + int32_t g8 = g[8]; + int32_t g9 = g[9]; + int32_t x0 = f0 ^ g0; + int32_t x1 = f1 ^ g1; + int32_t x2 = f2 ^ g2; + int32_t x3 = f3 ^ g3; + int32_t x4 = f4 ^ g4; + int32_t x5 = f5 ^ g5; + int32_t x6 = f6 ^ g6; + int32_t x7 = f7 ^ g7; + int32_t x8 = f8 ^ g8; + int32_t x9 = f9 ^ g9; + b = -b; + x0 &= b; + x1 &= b; + x2 &= b; + x3 &= b; + x4 &= b; + x5 &= b; + x6 &= b; + x7 &= b; + x8 &= b; + x9 &= b; + f[0] = f0 ^ x0; + f[1] = f1 ^ x1; + f[2] = f2 ^ x2; + f[3] = f3 ^ x3; + f[4] = f4 ^ x4; + f[5] = f5 ^ x5; + f[6] = f6 ^ x6; + f[7] = f7 ^ x7; + f[8] = f8 ^ x8; + f[9] = f9 ^ x9; +} + +/* +h = f +*/ + +void fe_copy(fe h,const fe f) +{ + int32_t f0 = f[0]; + int32_t f1 = f[1]; + int32_t f2 = f[2]; + int32_t f3 = f[3]; + int32_t f4 = f[4]; + int32_t f5 = f[5]; + int32_t f6 = f[6]; + int32_t f7 = f[7]; + int32_t f8 = f[8]; + int32_t f9 = f[9]; + h[0] = f0; + h[1] = f1; + h[2] = f2; + h[3] = f3; + h[4] = f4; + h[5] = f5; + h[6] = f6; + h[7] = f7; + h[8] = f8; + h[9] = f9; +} + +static uint64_t load_3(const unsigned char *in) +{ + uint64_t result; + result = (uint64_t) in[0]; + result |= ((uint64_t) in[1]) << 8; + result |= ((uint64_t) in[2]) << 16; + return result; +} + +static uint64_t load_4(const unsigned char *in) +{ + uint64_t result; + result = (uint64_t) in[0]; + result |= ((uint64_t) in[1]) << 8; + result |= ((uint64_t) in[2]) << 16; + result |= ((uint64_t) in[3]) << 24; + return result; +} + +/* +Ignores top bit of h. +*/ + +void fe_frombytes(fe h,const unsigned char *s) +{ + int64_t h0 = load_4(s); + int64_t h1 = load_3(s + 4) << 6; + int64_t h2 = load_3(s + 7) << 5; + int64_t h3 = load_3(s + 10) << 3; + int64_t h4 = load_3(s + 13) << 2; + int64_t h5 = load_4(s + 16); + int64_t h6 = load_3(s + 20) << 7; + int64_t h7 = load_3(s + 23) << 5; + int64_t h8 = load_3(s + 26) << 4; + int64_t h9 = (load_3(s + 29) & 8388607) << 2; + int64_t carry0; + int64_t carry1; + int64_t carry2; + int64_t carry3; + int64_t carry4; + int64_t carry5; + int64_t carry6; + int64_t carry7; + int64_t carry8; + int64_t carry9; + + carry9 = (h9 + (int64_t) (1<<24)) >> 25; + h0 += carry9 * 19; + h9 -= carry9 << 25; + carry1 = (h1 + (int64_t) (1<<24)) >> 25; + h2 += carry1; + h1 -= carry1 << 25; + carry3 = (h3 + (int64_t) (1<<24)) >> 25; + h4 += carry3; + h3 -= carry3 << 25; + carry5 = (h5 + (int64_t) (1<<24)) >> 25; + h6 += carry5; + h5 -= carry5 << 25; + carry7 = (h7 + (int64_t) (1<<24)) >> 25; + h8 += carry7; + h7 -= carry7 << 25; + + carry0 = (h0 + (int64_t) (1<<25)) >> 26; + h1 += carry0; + h0 -= carry0 << 26; + carry2 = (h2 + (int64_t) (1<<25)) >> 26; + h3 += carry2; + h2 -= carry2 << 26; + carry4 = (h4 + (int64_t) (1<<25)) >> 26; + h5 += carry4; + h4 -= carry4 << 26; + carry6 = (h6 + (int64_t) (1<<25)) >> 26; + h7 += carry6; + h6 -= carry6 << 26; + carry8 = (h8 + (int64_t) (1<<25)) >> 26; + h9 += carry8; + h8 -= carry8 << 26; + + h[0] = h0; + h[1] = h1; + h[2] = h2; + h[3] = h3; + h[4] = h4; + h[5] = h5; + h[6] = h6; + h[7] = h7; + h[8] = h8; + h[9] = h9; +} +void fe_invert(fe out,const fe z) +{ + fe t0; + fe t1; + fe t2; + fe t3; + int i; + fe_sq(t0,z); + for (i = 1; i < 1; ++i) fe_sq(t0,t0); + fe_sq(t1,t0); + for (i = 1; i < 2; ++i) fe_sq(t1,t1); + fe_mul(t1,z,t1); + fe_mul(t0,t0,t1); + fe_sq(t2,t0); + for (i = 1; i < 1; ++i) fe_sq(t2,t2); + fe_mul(t1,t1,t2); + fe_sq(t2,t1); + for (i = 1; i < 5; ++i) fe_sq(t2,t2); + fe_mul(t1,t2,t1); + fe_sq(t2,t1); + for (i = 1; i < 10; ++i) fe_sq(t2,t2); + fe_mul(t2,t2,t1); + fe_sq(t3,t2); + for (i = 1; i < 20; ++i) fe_sq(t3,t3); + fe_mul(t2,t3,t2); + fe_sq(t2,t2); + for (i = 1; i < 10; ++i) fe_sq(t2,t2); + fe_mul(t1,t2,t1); + fe_sq(t2,t1); + for (i = 1; i < 50; ++i) fe_sq(t2,t2); + fe_mul(t2,t2,t1); + fe_sq(t3,t2); + for (i = 1; i < 100; ++i) fe_sq(t3,t3); + fe_mul(t2,t3,t2); + fe_sq(t2,t2); + for (i = 1; i < 50; ++i) fe_sq(t2,t2); + fe_mul(t1,t2,t1); + fe_sq(t1,t1); + for (i = 1; i < 5; ++i) fe_sq(t1,t1); + fe_mul(out,t1,t0); + return; +} + +/* +return 1 if f is in {1,3,5,...,q-2} +return 0 if f is in {0,2,4,...,q-1} + +Preconditions: + |f| bounded by 1.1*2^26,1.1*2^25,1.1*2^26,1.1*2^25,etc. +*/ + +int fe_isnegative(const fe f) +{ + unsigned char s[32]; + fe_tobytes(s,f); + return s[0] & 1; +} + +/* +h = f * g +Can overlap h with f or g. + +Preconditions: + |f| bounded by 1.65*2^26,1.65*2^25,1.65*2^26,1.65*2^25,etc. + |g| bounded by 1.65*2^26,1.65*2^25,1.65*2^26,1.65*2^25,etc. + +Postconditions: + |h| bounded by 1.01*2^25,1.01*2^24,1.01*2^25,1.01*2^24,etc. +*/ + +/* +Notes on implementation strategy: + +Using schoolbook multiplication. +Karatsuba would save a little in some cost models. + +Most multiplications by 2 and 19 are 32-bit precomputations; +cheaper than 64-bit postcomputations. + +There is one remaining multiplication by 19 in the carry chain; +one *19 precomputation can be merged into this, +but the resulting data flow is considerably less clean. + +There are 12 carries below. +10 of them are 2-way parallelizable and vectorizable. +Can get away with 11 carries, but then data flow is much deeper. + +With tighter constraints on inputs can squeeze carries into int32. +*/ + +void fe_mul(fe h,const fe f,const fe g) +{ + int32_t f0 = f[0]; + int32_t f1 = f[1]; + int32_t f2 = f[2]; + int32_t f3 = f[3]; + int32_t f4 = f[4]; + int32_t f5 = f[5]; + int32_t f6 = f[6]; + int32_t f7 = f[7]; + int32_t f8 = f[8]; + int32_t f9 = f[9]; + int32_t g0 = g[0]; + int32_t g1 = g[1]; + int32_t g2 = g[2]; + int32_t g3 = g[3]; + int32_t g4 = g[4]; + int32_t g5 = g[5]; + int32_t g6 = g[6]; + int32_t g7 = g[7]; + int32_t g8 = g[8]; + int32_t g9 = g[9]; + int32_t g1_19 = 19 * g1; /* 1.959375*2^29 */ + int32_t g2_19 = 19 * g2; /* 1.959375*2^30; still ok */ + int32_t g3_19 = 19 * g3; + int32_t g4_19 = 19 * g4; + int32_t g5_19 = 19 * g5; + int32_t g6_19 = 19 * g6; + int32_t g7_19 = 19 * g7; + int32_t g8_19 = 19 * g8; + int32_t g9_19 = 19 * g9; + int32_t f1_2 = 2 * f1; + int32_t f3_2 = 2 * f3; + int32_t f5_2 = 2 * f5; + int32_t f7_2 = 2 * f7; + int32_t f9_2 = 2 * f9; + int64_t f0g0 = f0 * (int64_t) g0; + int64_t f0g1 = f0 * (int64_t) g1; + int64_t f0g2 = f0 * (int64_t) g2; + int64_t f0g3 = f0 * (int64_t) g3; + int64_t f0g4 = f0 * (int64_t) g4; + int64_t f0g5 = f0 * (int64_t) g5; + int64_t f0g6 = f0 * (int64_t) g6; + int64_t f0g7 = f0 * (int64_t) g7; + int64_t f0g8 = f0 * (int64_t) g8; + int64_t f0g9 = f0 * (int64_t) g9; + int64_t f1g0 = f1 * (int64_t) g0; + int64_t f1g1_2 = f1_2 * (int64_t) g1; + int64_t f1g2 = f1 * (int64_t) g2; + int64_t f1g3_2 = f1_2 * (int64_t) g3; + int64_t f1g4 = f1 * (int64_t) g4; + int64_t f1g5_2 = f1_2 * (int64_t) g5; + int64_t f1g6 = f1 * (int64_t) g6; + int64_t f1g7_2 = f1_2 * (int64_t) g7; + int64_t f1g8 = f1 * (int64_t) g8; + int64_t f1g9_38 = f1_2 * (int64_t) g9_19; + int64_t f2g0 = f2 * (int64_t) g0; + int64_t f2g1 = f2 * (int64_t) g1; + int64_t f2g2 = f2 * (int64_t) g2; + int64_t f2g3 = f2 * (int64_t) g3; + int64_t f2g4 = f2 * (int64_t) g4; + int64_t f2g5 = f2 * (int64_t) g5; + int64_t f2g6 = f2 * (int64_t) g6; + int64_t f2g7 = f2 * (int64_t) g7; + int64_t f2g8_19 = f2 * (int64_t) g8_19; + int64_t f2g9_19 = f2 * (int64_t) g9_19; + int64_t f3g0 = f3 * (int64_t) g0; + int64_t f3g1_2 = f3_2 * (int64_t) g1; + int64_t f3g2 = f3 * (int64_t) g2; + int64_t f3g3_2 = f3_2 * (int64_t) g3; + int64_t f3g4 = f3 * (int64_t) g4; + int64_t f3g5_2 = f3_2 * (int64_t) g5; + int64_t f3g6 = f3 * (int64_t) g6; + int64_t f3g7_38 = f3_2 * (int64_t) g7_19; + int64_t f3g8_19 = f3 * (int64_t) g8_19; + int64_t f3g9_38 = f3_2 * (int64_t) g9_19; + int64_t f4g0 = f4 * (int64_t) g0; + int64_t f4g1 = f4 * (int64_t) g1; + int64_t f4g2 = f4 * (int64_t) g2; + int64_t f4g3 = f4 * (int64_t) g3; + int64_t f4g4 = f4 * (int64_t) g4; + int64_t f4g5 = f4 * (int64_t) g5; + int64_t f4g6_19 = f4 * (int64_t) g6_19; + int64_t f4g7_19 = f4 * (int64_t) g7_19; + int64_t f4g8_19 = f4 * (int64_t) g8_19; + int64_t f4g9_19 = f4 * (int64_t) g9_19; + int64_t f5g0 = f5 * (int64_t) g0; + int64_t f5g1_2 = f5_2 * (int64_t) g1; + int64_t f5g2 = f5 * (int64_t) g2; + int64_t f5g3_2 = f5_2 * (int64_t) g3; + int64_t f5g4 = f5 * (int64_t) g4; + int64_t f5g5_38 = f5_2 * (int64_t) g5_19; + int64_t f5g6_19 = f5 * (int64_t) g6_19; + int64_t f5g7_38 = f5_2 * (int64_t) g7_19; + int64_t f5g8_19 = f5 * (int64_t) g8_19; + int64_t f5g9_38 = f5_2 * (int64_t) g9_19; + int64_t f6g0 = f6 * (int64_t) g0; + int64_t f6g1 = f6 * (int64_t) g1; + int64_t f6g2 = f6 * (int64_t) g2; + int64_t f6g3 = f6 * (int64_t) g3; + int64_t f6g4_19 = f6 * (int64_t) g4_19; + int64_t f6g5_19 = f6 * (int64_t) g5_19; + int64_t f6g6_19 = f6 * (int64_t) g6_19; + int64_t f6g7_19 = f6 * (int64_t) g7_19; + int64_t f6g8_19 = f6 * (int64_t) g8_19; + int64_t f6g9_19 = f6 * (int64_t) g9_19; + int64_t f7g0 = f7 * (int64_t) g0; + int64_t f7g1_2 = f7_2 * (int64_t) g1; + int64_t f7g2 = f7 * (int64_t) g2; + int64_t f7g3_38 = f7_2 * (int64_t) g3_19; + int64_t f7g4_19 = f7 * (int64_t) g4_19; + int64_t f7g5_38 = f7_2 * (int64_t) g5_19; + int64_t f7g6_19 = f7 * (int64_t) g6_19; + int64_t f7g7_38 = f7_2 * (int64_t) g7_19; + int64_t f7g8_19 = f7 * (int64_t) g8_19; + int64_t f7g9_38 = f7_2 * (int64_t) g9_19; + int64_t f8g0 = f8 * (int64_t) g0; + int64_t f8g1 = f8 * (int64_t) g1; + int64_t f8g2_19 = f8 * (int64_t) g2_19; + int64_t f8g3_19 = f8 * (int64_t) g3_19; + int64_t f8g4_19 = f8 * (int64_t) g4_19; + int64_t f8g5_19 = f8 * (int64_t) g5_19; + int64_t f8g6_19 = f8 * (int64_t) g6_19; + int64_t f8g7_19 = f8 * (int64_t) g7_19; + int64_t f8g8_19 = f8 * (int64_t) g8_19; + int64_t f8g9_19 = f8 * (int64_t) g9_19; + int64_t f9g0 = f9 * (int64_t) g0; + int64_t f9g1_38 = f9_2 * (int64_t) g1_19; + int64_t f9g2_19 = f9 * (int64_t) g2_19; + int64_t f9g3_38 = f9_2 * (int64_t) g3_19; + int64_t f9g4_19 = f9 * (int64_t) g4_19; + int64_t f9g5_38 = f9_2 * (int64_t) g5_19; + int64_t f9g6_19 = f9 * (int64_t) g6_19; + int64_t f9g7_38 = f9_2 * (int64_t) g7_19; + int64_t f9g8_19 = f9 * (int64_t) g8_19; + int64_t f9g9_38 = f9_2 * (int64_t) g9_19; + int64_t h0 = f0g0+f1g9_38+f2g8_19+f3g7_38+f4g6_19+f5g5_38+f6g4_19+f7g3_38+f8g2_19+f9g1_38; + int64_t h1 = f0g1+f1g0 +f2g9_19+f3g8_19+f4g7_19+f5g6_19+f6g5_19+f7g4_19+f8g3_19+f9g2_19; + int64_t h2 = f0g2+f1g1_2 +f2g0 +f3g9_38+f4g8_19+f5g7_38+f6g6_19+f7g5_38+f8g4_19+f9g3_38; + int64_t h3 = f0g3+f1g2 +f2g1 +f3g0 +f4g9_19+f5g8_19+f6g7_19+f7g6_19+f8g5_19+f9g4_19; + int64_t h4 = f0g4+f1g3_2 +f2g2 +f3g1_2 +f4g0 +f5g9_38+f6g8_19+f7g7_38+f8g6_19+f9g5_38; + int64_t h5 = f0g5+f1g4 +f2g3 +f3g2 +f4g1 +f5g0 +f6g9_19+f7g8_19+f8g7_19+f9g6_19; + int64_t h6 = f0g6+f1g5_2 +f2g4 +f3g3_2 +f4g2 +f5g1_2 +f6g0 +f7g9_38+f8g8_19+f9g7_38; + int64_t h7 = f0g7+f1g6 +f2g5 +f3g4 +f4g3 +f5g2 +f6g1 +f7g0 +f8g9_19+f9g8_19; + int64_t h8 = f0g8+f1g7_2 +f2g6 +f3g5_2 +f4g4 +f5g3_2 +f6g2 +f7g1_2 +f8g0 +f9g9_38; + int64_t h9 = f0g9+f1g8 +f2g7 +f3g6 +f4g5 +f5g4 +f6g3 +f7g2 +f8g1 +f9g0 ; + int64_t carry0; + int64_t carry1; + int64_t carry2; + int64_t carry3; + int64_t carry4; + int64_t carry5; + int64_t carry6; + int64_t carry7; + int64_t carry8; + int64_t carry9; + + /* + |h0| <= (1.65*1.65*2^52*(1+19+19+19+19)+1.65*1.65*2^50*(38+38+38+38+38)) + i.e. |h0| <= 1.4*2^60; narrower ranges for h2, h4, h6, h8 + |h1| <= (1.65*1.65*2^51*(1+1+19+19+19+19+19+19+19+19)) + i.e. |h1| <= 1.7*2^59; narrower ranges for h3, h5, h7, h9 + */ + + carry0 = (h0 + (int64_t) (1<<25)) >> 26; + h1 += carry0; + h0 -= carry0 << 26; + carry4 = (h4 + (int64_t) (1<<25)) >> 26; + h5 += carry4; + h4 -= carry4 << 26; + /* |h0| <= 2^25 */ + /* |h4| <= 2^25 */ + /* |h1| <= 1.71*2^59 */ + /* |h5| <= 1.71*2^59 */ + + carry1 = (h1 + (int64_t) (1<<24)) >> 25; + h2 += carry1; + h1 -= carry1 << 25; + carry5 = (h5 + (int64_t) (1<<24)) >> 25; + h6 += carry5; + h5 -= carry5 << 25; + /* |h1| <= 2^24; from now on fits into int32 */ + /* |h5| <= 2^24; from now on fits into int32 */ + /* |h2| <= 1.41*2^60 */ + /* |h6| <= 1.41*2^60 */ + + carry2 = (h2 + (int64_t) (1<<25)) >> 26; + h3 += carry2; + h2 -= carry2 << 26; + carry6 = (h6 + (int64_t) (1<<25)) >> 26; + h7 += carry6; + h6 -= carry6 << 26; + /* |h2| <= 2^25; from now on fits into int32 unchanged */ + /* |h6| <= 2^25; from now on fits into int32 unchanged */ + /* |h3| <= 1.71*2^59 */ + /* |h7| <= 1.71*2^59 */ + + carry3 = (h3 + (int64_t) (1<<24)) >> 25; + h4 += carry3; + h3 -= carry3 << 25; + carry7 = (h7 + (int64_t) (1<<24)) >> 25; + h8 += carry7; + h7 -= carry7 << 25; + /* |h3| <= 2^24; from now on fits into int32 unchanged */ + /* |h7| <= 2^24; from now on fits into int32 unchanged */ + /* |h4| <= 1.72*2^34 */ + /* |h8| <= 1.41*2^60 */ + + carry4 = (h4 + (int64_t) (1<<25)) >> 26; + h5 += carry4; + h4 -= carry4 << 26; + carry8 = (h8 + (int64_t) (1<<25)) >> 26; + h9 += carry8; + h8 -= carry8 << 26; + /* |h4| <= 2^25; from now on fits into int32 unchanged */ + /* |h8| <= 2^25; from now on fits into int32 unchanged */ + /* |h5| <= 1.01*2^24 */ + /* |h9| <= 1.71*2^59 */ + + carry9 = (h9 + (int64_t) (1<<24)) >> 25; + h0 += carry9 * 19; + h9 -= carry9 << 25; + /* |h9| <= 2^24; from now on fits into int32 unchanged */ + /* |h0| <= 1.1*2^39 */ + + carry0 = (h0 + (int64_t) (1<<25)) >> 26; + h1 += carry0; + h0 -= carry0 << 26; + /* |h0| <= 2^25; from now on fits into int32 unchanged */ + /* |h1| <= 1.01*2^24 */ + + h[0] = h0; + h[1] = h1; + h[2] = h2; + h[3] = h3; + h[4] = h4; + h[5] = h5; + h[6] = h6; + h[7] = h7; + h[8] = h8; + h[9] = h9; +} + +/* +h = -f + +Preconditions: + |f| bounded by 1.1*2^25,1.1*2^24,1.1*2^25,1.1*2^24,etc. + +Postconditions: + |h| bounded by 1.1*2^25,1.1*2^24,1.1*2^25,1.1*2^24,etc. +*/ + +void fe_neg(fe h,const fe f) +{ + int32_t f0 = f[0]; + int32_t f1 = f[1]; + int32_t f2 = f[2]; + int32_t f3 = f[3]; + int32_t f4 = f[4]; + int32_t f5 = f[5]; + int32_t f6 = f[6]; + int32_t f7 = f[7]; + int32_t f8 = f[8]; + int32_t f9 = f[9]; + int32_t h0 = -f0; + int32_t h1 = -f1; + int32_t h2 = -f2; + int32_t h3 = -f3; + int32_t h4 = -f4; + int32_t h5 = -f5; + int32_t h6 = -f6; + int32_t h7 = -f7; + int32_t h8 = -f8; + int32_t h9 = -f9; + h[0] = h0; + h[1] = h1; + h[2] = h2; + h[3] = h3; + h[4] = h4; + h[5] = h5; + h[6] = h6; + h[7] = h7; + h[8] = h8; + h[9] = h9; +} +void fe_pow22523(fe out,const fe z) +{ + fe t0; + fe t1; + fe t2; + int i; + fe_sq(t0,z); + for (i = 1; i < 1; ++i) fe_sq(t0,t0); + fe_sq(t1,t0); + for (i = 1; i < 2; ++i) fe_sq(t1,t1); + fe_mul(t1,z,t1); + fe_mul(t0,t0,t1); + fe_sq(t0,t0); + for (i = 1; i < 1; ++i) fe_sq(t0,t0); + fe_mul(t0,t1,t0); + fe_sq(t1,t0); + for (i = 1; i < 5; ++i) fe_sq(t1,t1); + fe_mul(t0,t1,t0); + fe_sq(t1,t0); + for (i = 1; i < 10; ++i) fe_sq(t1,t1); + fe_mul(t1,t1,t0); + fe_sq(t2,t1); + for (i = 1; i < 20; ++i) fe_sq(t2,t2); + fe_mul(t1,t2,t1); + fe_sq(t1,t1); + for (i = 1; i < 10; ++i) fe_sq(t1,t1); + fe_mul(t0,t1,t0); + fe_sq(t1,t0); + for (i = 1; i < 50; ++i) fe_sq(t1,t1); + fe_mul(t1,t1,t0); + fe_sq(t2,t1); + for (i = 1; i < 100; ++i) fe_sq(t2,t2); + fe_mul(t1,t2,t1); + fe_sq(t1,t1); + for (i = 1; i < 50; ++i) fe_sq(t1,t1); + fe_mul(t0,t1,t0); + fe_sq(t0,t0); + for (i = 1; i < 2; ++i) fe_sq(t0,t0); + fe_mul(out,t0,z); + return; +} + +/* +h = f * f +Can overlap h with f. + +Preconditions: + |f| bounded by 1.65*2^26,1.65*2^25,1.65*2^26,1.65*2^25,etc. + +Postconditions: + |h| bounded by 1.01*2^25,1.01*2^24,1.01*2^25,1.01*2^24,etc. +*/ + +/* +See fe_mul.c for discussion of implementation strategy. +*/ + +void fe_sq(fe h,const fe f) +{ + int32_t f0 = f[0]; + int32_t f1 = f[1]; + int32_t f2 = f[2]; + int32_t f3 = f[3]; + int32_t f4 = f[4]; + int32_t f5 = f[5]; + int32_t f6 = f[6]; + int32_t f7 = f[7]; + int32_t f8 = f[8]; + int32_t f9 = f[9]; + int32_t f0_2 = 2 * f0; + int32_t f1_2 = 2 * f1; + int32_t f2_2 = 2 * f2; + int32_t f3_2 = 2 * f3; + int32_t f4_2 = 2 * f4; + int32_t f5_2 = 2 * f5; + int32_t f6_2 = 2 * f6; + int32_t f7_2 = 2 * f7; + int32_t f5_38 = 38 * f5; /* 1.959375*2^30 */ + int32_t f6_19 = 19 * f6; /* 1.959375*2^30 */ + int32_t f7_38 = 38 * f7; /* 1.959375*2^30 */ + int32_t f8_19 = 19 * f8; /* 1.959375*2^30 */ + int32_t f9_38 = 38 * f9; /* 1.959375*2^30 */ + int64_t f0f0 = f0 * (int64_t) f0; + int64_t f0f1_2 = f0_2 * (int64_t) f1; + int64_t f0f2_2 = f0_2 * (int64_t) f2; + int64_t f0f3_2 = f0_2 * (int64_t) f3; + int64_t f0f4_2 = f0_2 * (int64_t) f4; + int64_t f0f5_2 = f0_2 * (int64_t) f5; + int64_t f0f6_2 = f0_2 * (int64_t) f6; + int64_t f0f7_2 = f0_2 * (int64_t) f7; + int64_t f0f8_2 = f0_2 * (int64_t) f8; + int64_t f0f9_2 = f0_2 * (int64_t) f9; + int64_t f1f1_2 = f1_2 * (int64_t) f1; + int64_t f1f2_2 = f1_2 * (int64_t) f2; + int64_t f1f3_4 = f1_2 * (int64_t) f3_2; + int64_t f1f4_2 = f1_2 * (int64_t) f4; + int64_t f1f5_4 = f1_2 * (int64_t) f5_2; + int64_t f1f6_2 = f1_2 * (int64_t) f6; + int64_t f1f7_4 = f1_2 * (int64_t) f7_2; + int64_t f1f8_2 = f1_2 * (int64_t) f8; + int64_t f1f9_76 = f1_2 * (int64_t) f9_38; + int64_t f2f2 = f2 * (int64_t) f2; + int64_t f2f3_2 = f2_2 * (int64_t) f3; + int64_t f2f4_2 = f2_2 * (int64_t) f4; + int64_t f2f5_2 = f2_2 * (int64_t) f5; + int64_t f2f6_2 = f2_2 * (int64_t) f6; + int64_t f2f7_2 = f2_2 * (int64_t) f7; + int64_t f2f8_38 = f2_2 * (int64_t) f8_19; + int64_t f2f9_38 = f2 * (int64_t) f9_38; + int64_t f3f3_2 = f3_2 * (int64_t) f3; + int64_t f3f4_2 = f3_2 * (int64_t) f4; + int64_t f3f5_4 = f3_2 * (int64_t) f5_2; + int64_t f3f6_2 = f3_2 * (int64_t) f6; + int64_t f3f7_76 = f3_2 * (int64_t) f7_38; + int64_t f3f8_38 = f3_2 * (int64_t) f8_19; + int64_t f3f9_76 = f3_2 * (int64_t) f9_38; + int64_t f4f4 = f4 * (int64_t) f4; + int64_t f4f5_2 = f4_2 * (int64_t) f5; + int64_t f4f6_38 = f4_2 * (int64_t) f6_19; + int64_t f4f7_38 = f4 * (int64_t) f7_38; + int64_t f4f8_38 = f4_2 * (int64_t) f8_19; + int64_t f4f9_38 = f4 * (int64_t) f9_38; + int64_t f5f5_38 = f5 * (int64_t) f5_38; + int64_t f5f6_38 = f5_2 * (int64_t) f6_19; + int64_t f5f7_76 = f5_2 * (int64_t) f7_38; + int64_t f5f8_38 = f5_2 * (int64_t) f8_19; + int64_t f5f9_76 = f5_2 * (int64_t) f9_38; + int64_t f6f6_19 = f6 * (int64_t) f6_19; + int64_t f6f7_38 = f6 * (int64_t) f7_38; + int64_t f6f8_38 = f6_2 * (int64_t) f8_19; + int64_t f6f9_38 = f6 * (int64_t) f9_38; + int64_t f7f7_38 = f7 * (int64_t) f7_38; + int64_t f7f8_38 = f7_2 * (int64_t) f8_19; + int64_t f7f9_76 = f7_2 * (int64_t) f9_38; + int64_t f8f8_19 = f8 * (int64_t) f8_19; + int64_t f8f9_38 = f8 * (int64_t) f9_38; + int64_t f9f9_38 = f9 * (int64_t) f9_38; + int64_t h0 = f0f0 +f1f9_76+f2f8_38+f3f7_76+f4f6_38+f5f5_38; + int64_t h1 = f0f1_2+f2f9_38+f3f8_38+f4f7_38+f5f6_38; + int64_t h2 = f0f2_2+f1f1_2 +f3f9_76+f4f8_38+f5f7_76+f6f6_19; + int64_t h3 = f0f3_2+f1f2_2 +f4f9_38+f5f8_38+f6f7_38; + int64_t h4 = f0f4_2+f1f3_4 +f2f2 +f5f9_76+f6f8_38+f7f7_38; + int64_t h5 = f0f5_2+f1f4_2 +f2f3_2 +f6f9_38+f7f8_38; + int64_t h6 = f0f6_2+f1f5_4 +f2f4_2 +f3f3_2 +f7f9_76+f8f8_19; + int64_t h7 = f0f7_2+f1f6_2 +f2f5_2 +f3f4_2 +f8f9_38; + int64_t h8 = f0f8_2+f1f7_4 +f2f6_2 +f3f5_4 +f4f4 +f9f9_38; + int64_t h9 = f0f9_2+f1f8_2 +f2f7_2 +f3f6_2 +f4f5_2; + int64_t carry0; + int64_t carry1; + int64_t carry2; + int64_t carry3; + int64_t carry4; + int64_t carry5; + int64_t carry6; + int64_t carry7; + int64_t carry8; + int64_t carry9; + + carry0 = (h0 + (int64_t) (1<<25)) >> 26; + h1 += carry0; + h0 -= carry0 << 26; + carry4 = (h4 + (int64_t) (1<<25)) >> 26; + h5 += carry4; + h4 -= carry4 << 26; + + carry1 = (h1 + (int64_t) (1<<24)) >> 25; + h2 += carry1; + h1 -= carry1 << 25; + carry5 = (h5 + (int64_t) (1<<24)) >> 25; + h6 += carry5; + h5 -= carry5 << 25; + + carry2 = (h2 + (int64_t) (1<<25)) >> 26; + h3 += carry2; + h2 -= carry2 << 26; + carry6 = (h6 + (int64_t) (1<<25)) >> 26; + h7 += carry6; + h6 -= carry6 << 26; + + carry3 = (h3 + (int64_t) (1<<24)) >> 25; + h4 += carry3; + h3 -= carry3 << 25; + carry7 = (h7 + (int64_t) (1<<24)) >> 25; + h8 += carry7; + h7 -= carry7 << 25; + + carry4 = (h4 + (int64_t) (1<<25)) >> 26; + h5 += carry4; + h4 -= carry4 << 26; + carry8 = (h8 + (int64_t) (1<<25)) >> 26; + h9 += carry8; + h8 -= carry8 << 26; + + carry9 = (h9 + (int64_t) (1<<24)) >> 25; + h0 += carry9 * 19; + h9 -= carry9 << 25; + + carry0 = (h0 + (int64_t) (1<<25)) >> 26; + h1 += carry0; + h0 -= carry0 << 26; + + h[0] = h0; + h[1] = h1; + h[2] = h2; + h[3] = h3; + h[4] = h4; + h[5] = h5; + h[6] = h6; + h[7] = h7; + h[8] = h8; + h[9] = h9; +} + +/* +h = 2 * f * f +Can overlap h with f. + +Preconditions: + |f| bounded by 1.65*2^26,1.65*2^25,1.65*2^26,1.65*2^25,etc. + +Postconditions: + |h| bounded by 1.01*2^25,1.01*2^24,1.01*2^25,1.01*2^24,etc. +*/ + +/* +See fe_mul.c for discussion of implementation strategy. +*/ + +void fe_sq2(fe h,const fe f) +{ + int32_t f0 = f[0]; + int32_t f1 = f[1]; + int32_t f2 = f[2]; + int32_t f3 = f[3]; + int32_t f4 = f[4]; + int32_t f5 = f[5]; + int32_t f6 = f[6]; + int32_t f7 = f[7]; + int32_t f8 = f[8]; + int32_t f9 = f[9]; + int32_t f0_2 = 2 * f0; + int32_t f1_2 = 2 * f1; + int32_t f2_2 = 2 * f2; + int32_t f3_2 = 2 * f3; + int32_t f4_2 = 2 * f4; + int32_t f5_2 = 2 * f5; + int32_t f6_2 = 2 * f6; + int32_t f7_2 = 2 * f7; + int32_t f5_38 = 38 * f5; /* 1.959375*2^30 */ + int32_t f6_19 = 19 * f6; /* 1.959375*2^30 */ + int32_t f7_38 = 38 * f7; /* 1.959375*2^30 */ + int32_t f8_19 = 19 * f8; /* 1.959375*2^30 */ + int32_t f9_38 = 38 * f9; /* 1.959375*2^30 */ + int64_t f0f0 = f0 * (int64_t) f0; + int64_t f0f1_2 = f0_2 * (int64_t) f1; + int64_t f0f2_2 = f0_2 * (int64_t) f2; + int64_t f0f3_2 = f0_2 * (int64_t) f3; + int64_t f0f4_2 = f0_2 * (int64_t) f4; + int64_t f0f5_2 = f0_2 * (int64_t) f5; + int64_t f0f6_2 = f0_2 * (int64_t) f6; + int64_t f0f7_2 = f0_2 * (int64_t) f7; + int64_t f0f8_2 = f0_2 * (int64_t) f8; + int64_t f0f9_2 = f0_2 * (int64_t) f9; + int64_t f1f1_2 = f1_2 * (int64_t) f1; + int64_t f1f2_2 = f1_2 * (int64_t) f2; + int64_t f1f3_4 = f1_2 * (int64_t) f3_2; + int64_t f1f4_2 = f1_2 * (int64_t) f4; + int64_t f1f5_4 = f1_2 * (int64_t) f5_2; + int64_t f1f6_2 = f1_2 * (int64_t) f6; + int64_t f1f7_4 = f1_2 * (int64_t) f7_2; + int64_t f1f8_2 = f1_2 * (int64_t) f8; + int64_t f1f9_76 = f1_2 * (int64_t) f9_38; + int64_t f2f2 = f2 * (int64_t) f2; + int64_t f2f3_2 = f2_2 * (int64_t) f3; + int64_t f2f4_2 = f2_2 * (int64_t) f4; + int64_t f2f5_2 = f2_2 * (int64_t) f5; + int64_t f2f6_2 = f2_2 * (int64_t) f6; + int64_t f2f7_2 = f2_2 * (int64_t) f7; + int64_t f2f8_38 = f2_2 * (int64_t) f8_19; + int64_t f2f9_38 = f2 * (int64_t) f9_38; + int64_t f3f3_2 = f3_2 * (int64_t) f3; + int64_t f3f4_2 = f3_2 * (int64_t) f4; + int64_t f3f5_4 = f3_2 * (int64_t) f5_2; + int64_t f3f6_2 = f3_2 * (int64_t) f6; + int64_t f3f7_76 = f3_2 * (int64_t) f7_38; + int64_t f3f8_38 = f3_2 * (int64_t) f8_19; + int64_t f3f9_76 = f3_2 * (int64_t) f9_38; + int64_t f4f4 = f4 * (int64_t) f4; + int64_t f4f5_2 = f4_2 * (int64_t) f5; + int64_t f4f6_38 = f4_2 * (int64_t) f6_19; + int64_t f4f7_38 = f4 * (int64_t) f7_38; + int64_t f4f8_38 = f4_2 * (int64_t) f8_19; + int64_t f4f9_38 = f4 * (int64_t) f9_38; + int64_t f5f5_38 = f5 * (int64_t) f5_38; + int64_t f5f6_38 = f5_2 * (int64_t) f6_19; + int64_t f5f7_76 = f5_2 * (int64_t) f7_38; + int64_t f5f8_38 = f5_2 * (int64_t) f8_19; + int64_t f5f9_76 = f5_2 * (int64_t) f9_38; + int64_t f6f6_19 = f6 * (int64_t) f6_19; + int64_t f6f7_38 = f6 * (int64_t) f7_38; + int64_t f6f8_38 = f6_2 * (int64_t) f8_19; + int64_t f6f9_38 = f6 * (int64_t) f9_38; + int64_t f7f7_38 = f7 * (int64_t) f7_38; + int64_t f7f8_38 = f7_2 * (int64_t) f8_19; + int64_t f7f9_76 = f7_2 * (int64_t) f9_38; + int64_t f8f8_19 = f8 * (int64_t) f8_19; + int64_t f8f9_38 = f8 * (int64_t) f9_38; + int64_t f9f9_38 = f9 * (int64_t) f9_38; + int64_t h0 = f0f0 +f1f9_76+f2f8_38+f3f7_76+f4f6_38+f5f5_38; + int64_t h1 = f0f1_2+f2f9_38+f3f8_38+f4f7_38+f5f6_38; + int64_t h2 = f0f2_2+f1f1_2 +f3f9_76+f4f8_38+f5f7_76+f6f6_19; + int64_t h3 = f0f3_2+f1f2_2 +f4f9_38+f5f8_38+f6f7_38; + int64_t h4 = f0f4_2+f1f3_4 +f2f2 +f5f9_76+f6f8_38+f7f7_38; + int64_t h5 = f0f5_2+f1f4_2 +f2f3_2 +f6f9_38+f7f8_38; + int64_t h6 = f0f6_2+f1f5_4 +f2f4_2 +f3f3_2 +f7f9_76+f8f8_19; + int64_t h7 = f0f7_2+f1f6_2 +f2f5_2 +f3f4_2 +f8f9_38; + int64_t h8 = f0f8_2+f1f7_4 +f2f6_2 +f3f5_4 +f4f4 +f9f9_38; + int64_t h9 = f0f9_2+f1f8_2 +f2f7_2 +f3f6_2 +f4f5_2; + int64_t carry0; + int64_t carry1; + int64_t carry2; + int64_t carry3; + int64_t carry4; + int64_t carry5; + int64_t carry6; + int64_t carry7; + int64_t carry8; + int64_t carry9; + + h0 += h0; + h1 += h1; + h2 += h2; + h3 += h3; + h4 += h4; + h5 += h5; + h6 += h6; + h7 += h7; + h8 += h8; + h9 += h9; + + carry0 = (h0 + (int64_t) (1<<25)) >> 26; + h1 += carry0; + h0 -= carry0 << 26; + carry4 = (h4 + (int64_t) (1<<25)) >> 26; + h5 += carry4; + h4 -= carry4 << 26; + + carry1 = (h1 + (int64_t) (1<<24)) >> 25; + h2 += carry1; + h1 -= carry1 << 25; + carry5 = (h5 + (int64_t) (1<<24)) >> 25; + h6 += carry5; + h5 -= carry5 << 25; + + carry2 = (h2 + (int64_t) (1<<25)) >> 26; + h3 += carry2; + h2 -= carry2 << 26; + carry6 = (h6 + (int64_t) (1<<25)) >> 26; + h7 += carry6; + h6 -= carry6 << 26; + + carry3 = (h3 + (int64_t) (1<<24)) >> 25; + h4 += carry3; + h3 -= carry3 << 25; + carry7 = (h7 + (int64_t) (1<<24)) >> 25; + h8 += carry7; + h7 -= carry7 << 25; + + carry4 = (h4 + (int64_t) (1<<25)) >> 26; + h5 += carry4; + h4 -= carry4 << 26; + carry8 = (h8 + (int64_t) (1<<25)) >> 26; + h9 += carry8; + h8 -= carry8 << 26; + + carry9 = (h9 + (int64_t) (1<<24)) >> 25; + h0 += carry9 * 19; + h9 -= carry9 << 25; + + carry0 = (h0 + (int64_t) (1<<25)) >> 26; + h1 += carry0; + h0 -= carry0 << 26; + + h[0] = h0; + h[1] = h1; + h[2] = h2; + h[3] = h3; + h[4] = h4; + h[5] = h5; + h[6] = h6; + h[7] = h7; + h[8] = h8; + h[9] = h9; +} + +/* +h = f - g +Can overlap h with f or g. + +Preconditions: + |f| bounded by 1.1*2^25,1.1*2^24,1.1*2^25,1.1*2^24,etc. + |g| bounded by 1.1*2^25,1.1*2^24,1.1*2^25,1.1*2^24,etc. + +Postconditions: + |h| bounded by 1.1*2^26,1.1*2^25,1.1*2^26,1.1*2^25,etc. +*/ + +void fe_sub(fe h,const fe f,const fe g) +{ + int32_t f0 = f[0]; + int32_t f1 = f[1]; + int32_t f2 = f[2]; + int32_t f3 = f[3]; + int32_t f4 = f[4]; + int32_t f5 = f[5]; + int32_t f6 = f[6]; + int32_t f7 = f[7]; + int32_t f8 = f[8]; + int32_t f9 = f[9]; + int32_t g0 = g[0]; + int32_t g1 = g[1]; + int32_t g2 = g[2]; + int32_t g3 = g[3]; + int32_t g4 = g[4]; + int32_t g5 = g[5]; + int32_t g6 = g[6]; + int32_t g7 = g[7]; + int32_t g8 = g[8]; + int32_t g9 = g[9]; + int32_t h0 = f0 - g0; + int32_t h1 = f1 - g1; + int32_t h2 = f2 - g2; + int32_t h3 = f3 - g3; + int32_t h4 = f4 - g4; + int32_t h5 = f5 - g5; + int32_t h6 = f6 - g6; + int32_t h7 = f7 - g7; + int32_t h8 = f8 - g8; + int32_t h9 = f9 - g9; + h[0] = h0; + h[1] = h1; + h[2] = h2; + h[3] = h3; + h[4] = h4; + h[5] = h5; + h[6] = h6; + h[7] = h7; + h[8] = h8; + h[9] = h9; +} + +/* +Preconditions: + |h| bounded by 1.1*2^26,1.1*2^25,1.1*2^26,1.1*2^25,etc. + +Write p=2^255-19; q=floor(h/p). +Basic claim: q = floor(2^(-255)(h + 19 2^(-25)h9 + 2^(-1))). + +Proof: + Have |h|<=p so |q|<=1 so |19^2 2^(-255) q|<1/4. + Also have |h-2^230 h9|<2^231 so |19 2^(-255)(h-2^230 h9)|<1/4. + + Write y=2^(-1)-19^2 2^(-255)q-19 2^(-255)(h-2^230 h9). + Then 0> 25; + q = (h0 + q) >> 26; + q = (h1 + q) >> 25; + q = (h2 + q) >> 26; + q = (h3 + q) >> 25; + q = (h4 + q) >> 26; + q = (h5 + q) >> 25; + q = (h6 + q) >> 26; + q = (h7 + q) >> 25; + q = (h8 + q) >> 26; + q = (h9 + q) >> 25; + + /* Goal: Output h-(2^255-19)q, which is between 0 and 2^255-20. */ + h0 += 19 * q; + /* Goal: Output h-2^255 q, which is between 0 and 2^255-20. */ + + carry0 = h0 >> 26; + h1 += carry0; + h0 -= carry0 << 26; + carry1 = h1 >> 25; + h2 += carry1; + h1 -= carry1 << 25; + carry2 = h2 >> 26; + h3 += carry2; + h2 -= carry2 << 26; + carry3 = h3 >> 25; + h4 += carry3; + h3 -= carry3 << 25; + carry4 = h4 >> 26; + h5 += carry4; + h4 -= carry4 << 26; + carry5 = h5 >> 25; + h6 += carry5; + h5 -= carry5 << 25; + carry6 = h6 >> 26; + h7 += carry6; + h6 -= carry6 << 26; + carry7 = h7 >> 25; + h8 += carry7; + h7 -= carry7 << 25; + carry8 = h8 >> 26; + h9 += carry8; + h8 -= carry8 << 26; + carry9 = h9 >> 25; + h9 -= carry9 << 25; + /* h10 = carry9 */ + + /* + Goal: Output h0+...+2^255 h10-2^255 q, which is between 0 and 2^255-20. + Have h0+...+2^230 h9 between 0 and 2^255-1; + evidently 2^255 h10-2^255 q = 0. + Goal: Output h0+...+2^230 h9. + */ + + s[0] = h0 >> 0; + s[1] = h0 >> 8; + s[2] = h0 >> 16; + s[3] = (h0 >> 24) | (h1 << 2); + s[4] = h1 >> 6; + s[5] = h1 >> 14; + s[6] = (h1 >> 22) | (h2 << 3); + s[7] = h2 >> 5; + s[8] = h2 >> 13; + s[9] = (h2 >> 21) | (h3 << 5); + s[10] = h3 >> 3; + s[11] = h3 >> 11; + s[12] = (h3 >> 19) | (h4 << 6); + s[13] = h4 >> 2; + s[14] = h4 >> 10; + s[15] = h4 >> 18; + s[16] = h5 >> 0; + s[17] = h5 >> 8; + s[18] = h5 >> 16; + s[19] = (h5 >> 24) | (h6 << 1); + s[20] = h6 >> 7; + s[21] = h6 >> 15; + s[22] = (h6 >> 23) | (h7 << 3); + s[23] = h7 >> 5; + s[24] = h7 >> 13; + s[25] = (h7 >> 21) | (h8 << 4); + s[26] = h8 >> 4; + s[27] = h8 >> 12; + s[28] = (h8 >> 20) | (h9 << 6); + s[29] = h9 >> 2; + s[30] = h9 >> 10; + s[31] = h9 >> 18; +} +/* + * + * sc code + * + * +The set of scalars is \Z/l +where l = 2^252 + 27742317777372353535851937790883648493. + +This is the order of the curve ed25519. +The point is that if a is a scalar and P is a point, +and b is congruent to a mod l, then aP = bP. +Thus, reducing mod l can possibly give you a smaller scalar, +so your elliptic curve operations take less time +*/ + +/* +Input: + a[0]+256*a[1]+...+256^31*a[31] = a + b[0]+256*b[1]+...+256^31*b[31] = b + c[0]+256*c[1]+...+256^31*c[31] = c + +Output: + s[0]+256*s[1]+...+256^31*s[31] = (ab+c) mod l + where l = 2^252 + 27742317777372353535851937790883648493. +*/ + +void sc_muladd(unsigned char *s,const unsigned char *a,const unsigned char *b,const unsigned char *c) +{ + int64_t a0 = 2097151 & load_3(a); + int64_t a1 = 2097151 & (load_4(a + 2) >> 5); + int64_t a2 = 2097151 & (load_3(a + 5) >> 2); + int64_t a3 = 2097151 & (load_4(a + 7) >> 7); + int64_t a4 = 2097151 & (load_4(a + 10) >> 4); + int64_t a5 = 2097151 & (load_3(a + 13) >> 1); + int64_t a6 = 2097151 & (load_4(a + 15) >> 6); + int64_t a7 = 2097151 & (load_3(a + 18) >> 3); + int64_t a8 = 2097151 & load_3(a + 21); + int64_t a9 = 2097151 & (load_4(a + 23) >> 5); + int64_t a10 = 2097151 & (load_3(a + 26) >> 2); + int64_t a11 = (load_4(a + 28) >> 7); + int64_t b0 = 2097151 & load_3(b); + int64_t b1 = 2097151 & (load_4(b + 2) >> 5); + int64_t b2 = 2097151 & (load_3(b + 5) >> 2); + int64_t b3 = 2097151 & (load_4(b + 7) >> 7); + int64_t b4 = 2097151 & (load_4(b + 10) >> 4); + int64_t b5 = 2097151 & (load_3(b + 13) >> 1); + int64_t b6 = 2097151 & (load_4(b + 15) >> 6); + int64_t b7 = 2097151 & (load_3(b + 18) >> 3); + int64_t b8 = 2097151 & load_3(b + 21); + int64_t b9 = 2097151 & (load_4(b + 23) >> 5); + int64_t b10 = 2097151 & (load_3(b + 26) >> 2); + int64_t b11 = (load_4(b + 28) >> 7); + int64_t c0 = 2097151 & load_3(c); + int64_t c1 = 2097151 & (load_4(c + 2) >> 5); + int64_t c2 = 2097151 & (load_3(c + 5) >> 2); + int64_t c3 = 2097151 & (load_4(c + 7) >> 7); + int64_t c4 = 2097151 & (load_4(c + 10) >> 4); + int64_t c5 = 2097151 & (load_3(c + 13) >> 1); + int64_t c6 = 2097151 & (load_4(c + 15) >> 6); + int64_t c7 = 2097151 & (load_3(c + 18) >> 3); + int64_t c8 = 2097151 & load_3(c + 21); + int64_t c9 = 2097151 & (load_4(c + 23) >> 5); + int64_t c10 = 2097151 & (load_3(c + 26) >> 2); + int64_t c11 = (load_4(c + 28) >> 7); + int64_t s0; + int64_t s1; + int64_t s2; + int64_t s3; + int64_t s4; + int64_t s5; + int64_t s6; + int64_t s7; + int64_t s8; + int64_t s9; + int64_t s10; + int64_t s11; + int64_t s12; + int64_t s13; + int64_t s14; + int64_t s15; + int64_t s16; + int64_t s17; + int64_t s18; + int64_t s19; + int64_t s20; + int64_t s21; + int64_t s22; + int64_t s23; + int64_t carry0; + int64_t carry1; + int64_t carry2; + int64_t carry3; + int64_t carry4; + int64_t carry5; + int64_t carry6; + int64_t carry7; + int64_t carry8; + int64_t carry9; + int64_t carry10; + int64_t carry11; + int64_t carry12; + int64_t carry13; + int64_t carry14; + int64_t carry15; + int64_t carry16; + int64_t carry17; + int64_t carry18; + int64_t carry19; + int64_t carry20; + int64_t carry21; + int64_t carry22; + + s0 = c0 + a0*b0; + s1 = c1 + a0*b1 + a1*b0; + s2 = c2 + a0*b2 + a1*b1 + a2*b0; + s3 = c3 + a0*b3 + a1*b2 + a2*b1 + a3*b0; + s4 = c4 + a0*b4 + a1*b3 + a2*b2 + a3*b1 + a4*b0; + s5 = c5 + a0*b5 + a1*b4 + a2*b3 + a3*b2 + a4*b1 + a5*b0; + s6 = c6 + a0*b6 + a1*b5 + a2*b4 + a3*b3 + a4*b2 + a5*b1 + a6*b0; + s7 = c7 + a0*b7 + a1*b6 + a2*b5 + a3*b4 + a4*b3 + a5*b2 + a6*b1 + a7*b0; + s8 = c8 + a0*b8 + a1*b7 + a2*b6 + a3*b5 + a4*b4 + a5*b3 + a6*b2 + a7*b1 + a8*b0; + s9 = c9 + a0*b9 + a1*b8 + a2*b7 + a3*b6 + a4*b5 + a5*b4 + a6*b3 + a7*b2 + a8*b1 + a9*b0; + s10 = c10 + a0*b10 + a1*b9 + a2*b8 + a3*b7 + a4*b6 + a5*b5 + a6*b4 + a7*b3 + a8*b2 + a9*b1 + a10*b0; + s11 = c11 + a0*b11 + a1*b10 + a2*b9 + a3*b8 + a4*b7 + a5*b6 + a6*b5 + a7*b4 + a8*b3 + a9*b2 + a10*b1 + a11*b0; + s12 = a1*b11 + a2*b10 + a3*b9 + a4*b8 + a5*b7 + a6*b6 + a7*b5 + a8*b4 + a9*b3 + a10*b2 + a11*b1; + s13 = a2*b11 + a3*b10 + a4*b9 + a5*b8 + a6*b7 + a7*b6 + a8*b5 + a9*b4 + a10*b3 + a11*b2; + s14 = a3*b11 + a4*b10 + a5*b9 + a6*b8 + a7*b7 + a8*b6 + a9*b5 + a10*b4 + a11*b3; + s15 = a4*b11 + a5*b10 + a6*b9 + a7*b8 + a8*b7 + a9*b6 + a10*b5 + a11*b4; + s16 = a5*b11 + a6*b10 + a7*b9 + a8*b8 + a9*b7 + a10*b6 + a11*b5; + s17 = a6*b11 + a7*b10 + a8*b9 + a9*b8 + a10*b7 + a11*b6; + s18 = a7*b11 + a8*b10 + a9*b9 + a10*b8 + a11*b7; + s19 = a8*b11 + a9*b10 + a10*b9 + a11*b8; + s20 = a9*b11 + a10*b10 + a11*b9; + s21 = a10*b11 + a11*b10; + s22 = a11*b11; + s23 = 0; + + carry0 = (s0 + (1<<20)) >> 21; + s1 += carry0; + s0 -= carry0 << 21; + carry2 = (s2 + (1<<20)) >> 21; + s3 += carry2; + s2 -= carry2 << 21; + carry4 = (s4 + (1<<20)) >> 21; + s5 += carry4; + s4 -= carry4 << 21; + carry6 = (s6 + (1<<20)) >> 21; + s7 += carry6; + s6 -= carry6 << 21; + carry8 = (s8 + (1<<20)) >> 21; + s9 += carry8; + s8 -= carry8 << 21; + carry10 = (s10 + (1<<20)) >> 21; + s11 += carry10; + s10 -= carry10 << 21; + carry12 = (s12 + (1<<20)) >> 21; + s13 += carry12; + s12 -= carry12 << 21; + carry14 = (s14 + (1<<20)) >> 21; + s15 += carry14; + s14 -= carry14 << 21; + carry16 = (s16 + (1<<20)) >> 21; + s17 += carry16; + s16 -= carry16 << 21; + carry18 = (s18 + (1<<20)) >> 21; + s19 += carry18; + s18 -= carry18 << 21; + carry20 = (s20 + (1<<20)) >> 21; + s21 += carry20; + s20 -= carry20 << 21; + carry22 = (s22 + (1<<20)) >> 21; + s23 += carry22; + s22 -= carry22 << 21; + + carry1 = (s1 + (1<<20)) >> 21; + s2 += carry1; + s1 -= carry1 << 21; + carry3 = (s3 + (1<<20)) >> 21; + s4 += carry3; + s3 -= carry3 << 21; + carry5 = (s5 + (1<<20)) >> 21; + s6 += carry5; + s5 -= carry5 << 21; + carry7 = (s7 + (1<<20)) >> 21; + s8 += carry7; + s7 -= carry7 << 21; + carry9 = (s9 + (1<<20)) >> 21; + s10 += carry9; + s9 -= carry9 << 21; + carry11 = (s11 + (1<<20)) >> 21; + s12 += carry11; + s11 -= carry11 << 21; + carry13 = (s13 + (1<<20)) >> 21; + s14 += carry13; + s13 -= carry13 << 21; + carry15 = (s15 + (1<<20)) >> 21; + s16 += carry15; + s15 -= carry15 << 21; + carry17 = (s17 + (1<<20)) >> 21; + s18 += carry17; + s17 -= carry17 << 21; + carry19 = (s19 + (1<<20)) >> 21; + s20 += carry19; + s19 -= carry19 << 21; + carry21 = (s21 + (1<<20)) >> 21; + s22 += carry21; + s21 -= carry21 << 21; + + s11 += s23 * 666643; + s12 += s23 * 470296; + s13 += s23 * 654183; + s14 -= s23 * 997805; + s15 += s23 * 136657; + s16 -= s23 * 683901; + s23 = 0; + + s10 += s22 * 666643; + s11 += s22 * 470296; + s12 += s22 * 654183; + s13 -= s22 * 997805; + s14 += s22 * 136657; + s15 -= s22 * 683901; + s22 = 0; + + s9 += s21 * 666643; + s10 += s21 * 470296; + s11 += s21 * 654183; + s12 -= s21 * 997805; + s13 += s21 * 136657; + s14 -= s21 * 683901; + s21 = 0; + + s8 += s20 * 666643; + s9 += s20 * 470296; + s10 += s20 * 654183; + s11 -= s20 * 997805; + s12 += s20 * 136657; + s13 -= s20 * 683901; + s20 = 0; + + s7 += s19 * 666643; + s8 += s19 * 470296; + s9 += s19 * 654183; + s10 -= s19 * 997805; + s11 += s19 * 136657; + s12 -= s19 * 683901; + s19 = 0; + + s6 += s18 * 666643; + s7 += s18 * 470296; + s8 += s18 * 654183; + s9 -= s18 * 997805; + s10 += s18 * 136657; + s11 -= s18 * 683901; + s18 = 0; + + carry6 = (s6 + (1<<20)) >> 21; + s7 += carry6; + s6 -= carry6 << 21; + carry8 = (s8 + (1<<20)) >> 21; + s9 += carry8; + s8 -= carry8 << 21; + carry10 = (s10 + (1<<20)) >> 21; + s11 += carry10; + s10 -= carry10 << 21; + carry12 = (s12 + (1<<20)) >> 21; + s13 += carry12; + s12 -= carry12 << 21; + carry14 = (s14 + (1<<20)) >> 21; + s15 += carry14; + s14 -= carry14 << 21; + carry16 = (s16 + (1<<20)) >> 21; + s17 += carry16; + s16 -= carry16 << 21; + + carry7 = (s7 + (1<<20)) >> 21; + s8 += carry7; + s7 -= carry7 << 21; + carry9 = (s9 + (1<<20)) >> 21; + s10 += carry9; + s9 -= carry9 << 21; + carry11 = (s11 + (1<<20)) >> 21; + s12 += carry11; + s11 -= carry11 << 21; + carry13 = (s13 + (1<<20)) >> 21; + s14 += carry13; + s13 -= carry13 << 21; + carry15 = (s15 + (1<<20)) >> 21; + s16 += carry15; + s15 -= carry15 << 21; + + s5 += s17 * 666643; + s6 += s17 * 470296; + s7 += s17 * 654183; + s8 -= s17 * 997805; + s9 += s17 * 136657; + s10 -= s17 * 683901; + s17 = 0; + + s4 += s16 * 666643; + s5 += s16 * 470296; + s6 += s16 * 654183; + s7 -= s16 * 997805; + s8 += s16 * 136657; + s9 -= s16 * 683901; + s16 = 0; + + s3 += s15 * 666643; + s4 += s15 * 470296; + s5 += s15 * 654183; + s6 -= s15 * 997805; + s7 += s15 * 136657; + s8 -= s15 * 683901; + s15 = 0; + + s2 += s14 * 666643; + s3 += s14 * 470296; + s4 += s14 * 654183; + s5 -= s14 * 997805; + s6 += s14 * 136657; + s7 -= s14 * 683901; + s14 = 0; + + s1 += s13 * 666643; + s2 += s13 * 470296; + s3 += s13 * 654183; + s4 -= s13 * 997805; + s5 += s13 * 136657; + s6 -= s13 * 683901; + s13 = 0; + + s0 += s12 * 666643; + s1 += s12 * 470296; + s2 += s12 * 654183; + s3 -= s12 * 997805; + s4 += s12 * 136657; + s5 -= s12 * 683901; + s12 = 0; + + carry0 = (s0 + (1<<20)) >> 21; + s1 += carry0; + s0 -= carry0 << 21; + carry2 = (s2 + (1<<20)) >> 21; + s3 += carry2; + s2 -= carry2 << 21; + carry4 = (s4 + (1<<20)) >> 21; + s5 += carry4; + s4 -= carry4 << 21; + carry6 = (s6 + (1<<20)) >> 21; + s7 += carry6; + s6 -= carry6 << 21; + carry8 = (s8 + (1<<20)) >> 21; + s9 += carry8; + s8 -= carry8 << 21; + carry10 = (s10 + (1<<20)) >> 21; + s11 += carry10; + s10 -= carry10 << 21; + + carry1 = (s1 + (1<<20)) >> 21; + s2 += carry1; + s1 -= carry1 << 21; + carry3 = (s3 + (1<<20)) >> 21; + s4 += carry3; + s3 -= carry3 << 21; + carry5 = (s5 + (1<<20)) >> 21; + s6 += carry5; + s5 -= carry5 << 21; + carry7 = (s7 + (1<<20)) >> 21; + s8 += carry7; + s7 -= carry7 << 21; + carry9 = (s9 + (1<<20)) >> 21; + s10 += carry9; + s9 -= carry9 << 21; + carry11 = (s11 + (1<<20)) >> 21; + s12 += carry11; + s11 -= carry11 << 21; + + s0 += s12 * 666643; + s1 += s12 * 470296; + s2 += s12 * 654183; + s3 -= s12 * 997805; + s4 += s12 * 136657; + s5 -= s12 * 683901; + s12 = 0; + + carry0 = s0 >> 21; + s1 += carry0; + s0 -= carry0 << 21; + carry1 = s1 >> 21; + s2 += carry1; + s1 -= carry1 << 21; + carry2 = s2 >> 21; + s3 += carry2; + s2 -= carry2 << 21; + carry3 = s3 >> 21; + s4 += carry3; + s3 -= carry3 << 21; + carry4 = s4 >> 21; + s5 += carry4; + s4 -= carry4 << 21; + carry5 = s5 >> 21; + s6 += carry5; + s5 -= carry5 << 21; + carry6 = s6 >> 21; + s7 += carry6; + s6 -= carry6 << 21; + carry7 = s7 >> 21; + s8 += carry7; + s7 -= carry7 << 21; + carry8 = s8 >> 21; + s9 += carry8; + s8 -= carry8 << 21; + carry9 = s9 >> 21; + s10 += carry9; + s9 -= carry9 << 21; + carry10 = s10 >> 21; + s11 += carry10; + s10 -= carry10 << 21; + carry11 = s11 >> 21; + s12 += carry11; + s11 -= carry11 << 21; + + s0 += s12 * 666643; + s1 += s12 * 470296; + s2 += s12 * 654183; + s3 -= s12 * 997805; + s4 += s12 * 136657; + s5 -= s12 * 683901; + s12 = 0; + + carry0 = s0 >> 21; + s1 += carry0; + s0 -= carry0 << 21; + carry1 = s1 >> 21; + s2 += carry1; + s1 -= carry1 << 21; + carry2 = s2 >> 21; + s3 += carry2; + s2 -= carry2 << 21; + carry3 = s3 >> 21; + s4 += carry3; + s3 -= carry3 << 21; + carry4 = s4 >> 21; + s5 += carry4; + s4 -= carry4 << 21; + carry5 = s5 >> 21; + s6 += carry5; + s5 -= carry5 << 21; + carry6 = s6 >> 21; + s7 += carry6; + s6 -= carry6 << 21; + carry7 = s7 >> 21; + s8 += carry7; + s7 -= carry7 << 21; + carry8 = s8 >> 21; + s9 += carry8; + s8 -= carry8 << 21; + carry9 = s9 >> 21; + s10 += carry9; + s9 -= carry9 << 21; + carry10 = s10 >> 21; + s11 += carry10; + s10 -= carry10 << 21; + + s[0] = s0 >> 0; + s[1] = s0 >> 8; + s[2] = (s0 >> 16) | (s1 << 5); + s[3] = s1 >> 3; + s[4] = s1 >> 11; + s[5] = (s1 >> 19) | (s2 << 2); + s[6] = s2 >> 6; + s[7] = (s2 >> 14) | (s3 << 7); + s[8] = s3 >> 1; + s[9] = s3 >> 9; + s[10] = (s3 >> 17) | (s4 << 4); + s[11] = s4 >> 4; + s[12] = s4 >> 12; + s[13] = (s4 >> 20) | (s5 << 1); + s[14] = s5 >> 7; + s[15] = (s5 >> 15) | (s6 << 6); + s[16] = s6 >> 2; + s[17] = s6 >> 10; + s[18] = (s6 >> 18) | (s7 << 3); + s[19] = s7 >> 5; + s[20] = s7 >> 13; + s[21] = s8 >> 0; + s[22] = s8 >> 8; + s[23] = (s8 >> 16) | (s9 << 5); + s[24] = s9 >> 3; + s[25] = s9 >> 11; + s[26] = (s9 >> 19) | (s10 << 2); + s[27] = s10 >> 6; + s[28] = (s10 >> 14) | (s11 << 7); + s[29] = s11 >> 1; + s[30] = s11 >> 9; + s[31] = s11 >> 17; +} + +/* +Input: + s[0]+256*s[1]+...+256^63*s[63] = s + +Output: + s[0]+256*s[1]+...+256^31*s[31] = s mod l + where l = 2^252 + 27742317777372353535851937790883648493. + Overwrites s in place. +*/ + +void sc_reduce(unsigned char *s) +{ + int64_t s0 = 2097151 & load_3(s); + int64_t s1 = 2097151 & (load_4(s + 2) >> 5); + int64_t s2 = 2097151 & (load_3(s + 5) >> 2); + int64_t s3 = 2097151 & (load_4(s + 7) >> 7); + int64_t s4 = 2097151 & (load_4(s + 10) >> 4); + int64_t s5 = 2097151 & (load_3(s + 13) >> 1); + int64_t s6 = 2097151 & (load_4(s + 15) >> 6); + int64_t s7 = 2097151 & (load_3(s + 18) >> 3); + int64_t s8 = 2097151 & load_3(s + 21); + int64_t s9 = 2097151 & (load_4(s + 23) >> 5); + int64_t s10 = 2097151 & (load_3(s + 26) >> 2); + int64_t s11 = 2097151 & (load_4(s + 28) >> 7); + int64_t s12 = 2097151 & (load_4(s + 31) >> 4); + int64_t s13 = 2097151 & (load_3(s + 34) >> 1); + int64_t s14 = 2097151 & (load_4(s + 36) >> 6); + int64_t s15 = 2097151 & (load_3(s + 39) >> 3); + int64_t s16 = 2097151 & load_3(s + 42); + int64_t s17 = 2097151 & (load_4(s + 44) >> 5); + int64_t s18 = 2097151 & (load_3(s + 47) >> 2); + int64_t s19 = 2097151 & (load_4(s + 49) >> 7); + int64_t s20 = 2097151 & (load_4(s + 52) >> 4); + int64_t s21 = 2097151 & (load_3(s + 55) >> 1); + int64_t s22 = 2097151 & (load_4(s + 57) >> 6); + int64_t s23 = (load_4(s + 60) >> 3); + int64_t carry0; + int64_t carry1; + int64_t carry2; + int64_t carry3; + int64_t carry4; + int64_t carry5; + int64_t carry6; + int64_t carry7; + int64_t carry8; + int64_t carry9; + int64_t carry10; + int64_t carry11; + int64_t carry12; + int64_t carry13; + int64_t carry14; + int64_t carry15; + int64_t carry16; + + s11 += s23 * 666643; + s12 += s23 * 470296; + s13 += s23 * 654183; + s14 -= s23 * 997805; + s15 += s23 * 136657; + s16 -= s23 * 683901; + s23 = 0; + + s10 += s22 * 666643; + s11 += s22 * 470296; + s12 += s22 * 654183; + s13 -= s22 * 997805; + s14 += s22 * 136657; + s15 -= s22 * 683901; + s22 = 0; + + s9 += s21 * 666643; + s10 += s21 * 470296; + s11 += s21 * 654183; + s12 -= s21 * 997805; + s13 += s21 * 136657; + s14 -= s21 * 683901; + s21 = 0; + + s8 += s20 * 666643; + s9 += s20 * 470296; + s10 += s20 * 654183; + s11 -= s20 * 997805; + s12 += s20 * 136657; + s13 -= s20 * 683901; + s20 = 0; + + s7 += s19 * 666643; + s8 += s19 * 470296; + s9 += s19 * 654183; + s10 -= s19 * 997805; + s11 += s19 * 136657; + s12 -= s19 * 683901; + s19 = 0; + + s6 += s18 * 666643; + s7 += s18 * 470296; + s8 += s18 * 654183; + s9 -= s18 * 997805; + s10 += s18 * 136657; + s11 -= s18 * 683901; + s18 = 0; + + carry6 = (s6 + (1<<20)) >> 21; + s7 += carry6; + s6 -= carry6 << 21; + carry8 = (s8 + (1<<20)) >> 21; + s9 += carry8; + s8 -= carry8 << 21; + carry10 = (s10 + (1<<20)) >> 21; + s11 += carry10; + s10 -= carry10 << 21; + carry12 = (s12 + (1<<20)) >> 21; + s13 += carry12; + s12 -= carry12 << 21; + carry14 = (s14 + (1<<20)) >> 21; + s15 += carry14; + s14 -= carry14 << 21; + carry16 = (s16 + (1<<20)) >> 21; + s17 += carry16; + s16 -= carry16 << 21; + + carry7 = (s7 + (1<<20)) >> 21; + s8 += carry7; + s7 -= carry7 << 21; + carry9 = (s9 + (1<<20)) >> 21; + s10 += carry9; + s9 -= carry9 << 21; + carry11 = (s11 + (1<<20)) >> 21; + s12 += carry11; + s11 -= carry11 << 21; + carry13 = (s13 + (1<<20)) >> 21; + s14 += carry13; + s13 -= carry13 << 21; + carry15 = (s15 + (1<<20)) >> 21; + s16 += carry15; + s15 -= carry15 << 21; + + s5 += s17 * 666643; + s6 += s17 * 470296; + s7 += s17 * 654183; + s8 -= s17 * 997805; + s9 += s17 * 136657; + s10 -= s17 * 683901; + s17 = 0; + + s4 += s16 * 666643; + s5 += s16 * 470296; + s6 += s16 * 654183; + s7 -= s16 * 997805; + s8 += s16 * 136657; + s9 -= s16 * 683901; + s16 = 0; + + s3 += s15 * 666643; + s4 += s15 * 470296; + s5 += s15 * 654183; + s6 -= s15 * 997805; + s7 += s15 * 136657; + s8 -= s15 * 683901; + s15 = 0; + + s2 += s14 * 666643; + s3 += s14 * 470296; + s4 += s14 * 654183; + s5 -= s14 * 997805; + s6 += s14 * 136657; + s7 -= s14 * 683901; + s14 = 0; + + s1 += s13 * 666643; + s2 += s13 * 470296; + s3 += s13 * 654183; + s4 -= s13 * 997805; + s5 += s13 * 136657; + s6 -= s13 * 683901; + s13 = 0; + + s0 += s12 * 666643; + s1 += s12 * 470296; + s2 += s12 * 654183; + s3 -= s12 * 997805; + s4 += s12 * 136657; + s5 -= s12 * 683901; + s12 = 0; + + carry0 = (s0 + (1<<20)) >> 21; + s1 += carry0; + s0 -= carry0 << 21; + carry2 = (s2 + (1<<20)) >> 21; + s3 += carry2; + s2 -= carry2 << 21; + carry4 = (s4 + (1<<20)) >> 21; + s5 += carry4; + s4 -= carry4 << 21; + carry6 = (s6 + (1<<20)) >> 21; + s7 += carry6; + s6 -= carry6 << 21; + carry8 = (s8 + (1<<20)) >> 21; + s9 += carry8; + s8 -= carry8 << 21; + carry10 = (s10 + (1<<20)) >> 21; + s11 += carry10; + s10 -= carry10 << 21; + + carry1 = (s1 + (1<<20)) >> 21; + s2 += carry1; + s1 -= carry1 << 21; + carry3 = (s3 + (1<<20)) >> 21; + s4 += carry3; + s3 -= carry3 << 21; + carry5 = (s5 + (1<<20)) >> 21; + s6 += carry5; + s5 -= carry5 << 21; + carry7 = (s7 + (1<<20)) >> 21; + s8 += carry7; + s7 -= carry7 << 21; + carry9 = (s9 + (1<<20)) >> 21; + s10 += carry9; + s9 -= carry9 << 21; + carry11 = (s11 + (1<<20)) >> 21; + s12 += carry11; + s11 -= carry11 << 21; + + s0 += s12 * 666643; + s1 += s12 * 470296; + s2 += s12 * 654183; + s3 -= s12 * 997805; + s4 += s12 * 136657; + s5 -= s12 * 683901; + s12 = 0; + + carry0 = s0 >> 21; + s1 += carry0; + s0 -= carry0 << 21; + carry1 = s1 >> 21; + s2 += carry1; + s1 -= carry1 << 21; + carry2 = s2 >> 21; + s3 += carry2; + s2 -= carry2 << 21; + carry3 = s3 >> 21; + s4 += carry3; + s3 -= carry3 << 21; + carry4 = s4 >> 21; + s5 += carry4; + s4 -= carry4 << 21; + carry5 = s5 >> 21; + s6 += carry5; + s5 -= carry5 << 21; + carry6 = s6 >> 21; + s7 += carry6; + s6 -= carry6 << 21; + carry7 = s7 >> 21; + s8 += carry7; + s7 -= carry7 << 21; + carry8 = s8 >> 21; + s9 += carry8; + s8 -= carry8 << 21; + carry9 = s9 >> 21; + s10 += carry9; + s9 -= carry9 << 21; + carry10 = s10 >> 21; + s11 += carry10; + s10 -= carry10 << 21; + carry11 = s11 >> 21; + s12 += carry11; + s11 -= carry11 << 21; + + s0 += s12 * 666643; + s1 += s12 * 470296; + s2 += s12 * 654183; + s3 -= s12 * 997805; + s4 += s12 * 136657; + s5 -= s12 * 683901; + s12 = 0; + + carry0 = s0 >> 21; + s1 += carry0; + s0 -= carry0 << 21; + carry1 = s1 >> 21; + s2 += carry1; + s1 -= carry1 << 21; + carry2 = s2 >> 21; + s3 += carry2; + s2 -= carry2 << 21; + carry3 = s3 >> 21; + s4 += carry3; + s3 -= carry3 << 21; + carry4 = s4 >> 21; + s5 += carry4; + s4 -= carry4 << 21; + carry5 = s5 >> 21; + s6 += carry5; + s5 -= carry5 << 21; + carry6 = s6 >> 21; + s7 += carry6; + s6 -= carry6 << 21; + carry7 = s7 >> 21; + s8 += carry7; + s7 -= carry7 << 21; + carry8 = s8 >> 21; + s9 += carry8; + s8 -= carry8 << 21; + carry9 = s9 >> 21; + s10 += carry9; + s9 -= carry9 << 21; + carry10 = s10 >> 21; + s11 += carry10; + s10 -= carry10 << 21; + + s[0] = s0 >> 0; + s[1] = s0 >> 8; + s[2] = (s0 >> 16) | (s1 << 5); + s[3] = s1 >> 3; + s[4] = s1 >> 11; + s[5] = (s1 >> 19) | (s2 << 2); + s[6] = s2 >> 6; + s[7] = (s2 >> 14) | (s3 << 7); + s[8] = s3 >> 1; + s[9] = s3 >> 9; + s[10] = (s3 >> 17) | (s4 << 4); + s[11] = s4 >> 4; + s[12] = s4 >> 12; + s[13] = (s4 >> 20) | (s5 << 1); + s[14] = s5 >> 7; + s[15] = (s5 >> 15) | (s6 << 6); + s[16] = s6 >> 2; + s[17] = s6 >> 10; + s[18] = (s6 >> 18) | (s7 << 3); + s[19] = s7 >> 5; + s[20] = s7 >> 13; + s[21] = s8 >> 0; + s[22] = s8 >> 8; + s[23] = (s8 >> 16) | (s9 << 5); + s[24] = s9 >> 3; + s[25] = s9 >> 11; + s[26] = (s9 >> 19) | (s10 << 2); + s[27] = s10 >> 6; + s[28] = (s10 >> 14) | (s11 << 7); + s[29] = s11 >> 1; + s[30] = s11 >> 9; + s[31] = s11 >> 17; +} + +void sc_sub(unsigned char *s, const unsigned char *a, const unsigned char *b) { + int64_t a0 = 2097151 & load_3(a); + int64_t a1 = 2097151 & (load_4(a + 2) >> 5); + int64_t a2 = 2097151 & (load_3(a + 5) >> 2); + int64_t a3 = 2097151 & (load_4(a + 7) >> 7); + int64_t a4 = 2097151 & (load_4(a + 10) >> 4); + int64_t a5 = 2097151 & (load_3(a + 13) >> 1); + int64_t a6 = 2097151 & (load_4(a + 15) >> 6); + int64_t a7 = 2097151 & (load_3(a + 18) >> 3); + int64_t a8 = 2097151 & load_3(a + 21); + int64_t a9 = 2097151 & (load_4(a + 23) >> 5); + int64_t a10 = 2097151 & (load_3(a + 26) >> 2); + int64_t a11 = (load_4(a + 28) >> 7); + int64_t b0 = 2097151 & load_3(b); + int64_t b1 = 2097151 & (load_4(b + 2) >> 5); + int64_t b2 = 2097151 & (load_3(b + 5) >> 2); + int64_t b3 = 2097151 & (load_4(b + 7) >> 7); + int64_t b4 = 2097151 & (load_4(b + 10) >> 4); + int64_t b5 = 2097151 & (load_3(b + 13) >> 1); + int64_t b6 = 2097151 & (load_4(b + 15) >> 6); + int64_t b7 = 2097151 & (load_3(b + 18) >> 3); + int64_t b8 = 2097151 & load_3(b + 21); + int64_t b9 = 2097151 & (load_4(b + 23) >> 5); + int64_t b10 = 2097151 & (load_3(b + 26) >> 2); + int64_t b11 = (load_4(b + 28) >> 7); + int64_t s0 = a0 - b0; + int64_t s1 = a1 - b1; + int64_t s2 = a2 - b2; + int64_t s3 = a3 - b3; + int64_t s4 = a4 - b4; + int64_t s5 = a5 - b5; + int64_t s6 = a6 - b6; + int64_t s7 = a7 - b7; + int64_t s8 = a8 - b8; + int64_t s9 = a9 - b9; + int64_t s10 = a10 - b10; + int64_t s11 = a11 - b11; + int64_t s12 = 0; + int64_t carry0; + int64_t carry1; + int64_t carry2; + int64_t carry3; + int64_t carry4; + int64_t carry5; + int64_t carry6; + int64_t carry7; + int64_t carry8; + int64_t carry9; + int64_t carry10; + int64_t carry11; + + carry0 = (s0 + (1<<20)) >> 21; + s1 += carry0; + s0 -= carry0 << 21; + carry2 = (s2 + (1<<20)) >> 21; + s3 += carry2; + s2 -= carry2 << 21; + carry4 = (s4 + (1<<20)) >> 21; + s5 += carry4; + s4 -= carry4 << 21; + carry6 = (s6 + (1<<20)) >> 21; + s7 += carry6; + s6 -= carry6 << 21; + carry8 = (s8 + (1<<20)) >> 21; + s9 += carry8; + s8 -= carry8 << 21; + carry10 = (s10 + (1<<20)) >> 21; + s11 += carry10; + s10 -= carry10 << 21; + + carry1 = (s1 + (1<<20)) >> 21; + s2 += carry1; + s1 -= carry1 << 21; + carry3 = (s3 + (1<<20)) >> 21; + s4 += carry3; + s3 -= carry3 << 21; + carry5 = (s5 + (1<<20)) >> 21; + s6 += carry5; + s5 -= carry5 << 21; + carry7 = (s7 + (1<<20)) >> 21; + s8 += carry7; + s7 -= carry7 << 21; + carry9 = (s9 + (1<<20)) >> 21; + s10 += carry9; + s9 -= carry9 << 21; + carry11 = (s11 + (1<<20)) >> 21; + s12 += carry11; + s11 -= carry11 << 21; + + s0 += s12 * 666643; + s1 += s12 * 470296; + s2 += s12 * 654183; + s3 -= s12 * 997805; + s4 += s12 * 136657; + s5 -= s12 * 683901; + s12 = 0; + + carry0 = s0 >> 21; + s1 += carry0; + s0 -= carry0 << 21; + carry1 = s1 >> 21; + s2 += carry1; + s1 -= carry1 << 21; + carry2 = s2 >> 21; + s3 += carry2; + s2 -= carry2 << 21; + carry3 = s3 >> 21; + s4 += carry3; + s3 -= carry3 << 21; + carry4 = s4 >> 21; + s5 += carry4; + s4 -= carry4 << 21; + carry5 = s5 >> 21; + s6 += carry5; + s5 -= carry5 << 21; + carry6 = s6 >> 21; + s7 += carry6; + s6 -= carry6 << 21; + carry7 = s7 >> 21; + s8 += carry7; + s7 -= carry7 << 21; + carry8 = s8 >> 21; + s9 += carry8; + s8 -= carry8 << 21; + carry9 = s9 >> 21; + s10 += carry9; + s9 -= carry9 << 21; + carry10 = s10 >> 21; + s11 += carry10; + s10 -= carry10 << 21; + carry11 = s11 >> 21; + s12 += carry11; + s11 -= carry11 << 21; + + s0 += s12 * 666643; + s1 += s12 * 470296; + s2 += s12 * 654183; + s3 -= s12 * 997805; + s4 += s12 * 136657; + s5 -= s12 * 683901; + + carry0 = s0 >> 21; + s1 += carry0; + s0 -= carry0 << 21; + carry1 = s1 >> 21; + s2 += carry1; + s1 -= carry1 << 21; + carry2 = s2 >> 21; + s3 += carry2; + s2 -= carry2 << 21; + carry3 = s3 >> 21; + s4 += carry3; + s3 -= carry3 << 21; + carry4 = s4 >> 21; + s5 += carry4; + s4 -= carry4 << 21; + carry5 = s5 >> 21; + s6 += carry5; + s5 -= carry5 << 21; + carry6 = s6 >> 21; + s7 += carry6; + s6 -= carry6 << 21; + carry7 = s7 >> 21; + s8 += carry7; + s7 -= carry7 << 21; + carry8 = s8 >> 21; + s9 += carry8; + s8 -= carry8 << 21; + carry9 = s9 >> 21; + s10 += carry9; + s9 -= carry9 << 21; + carry10 = s10 >> 21; + s11 += carry10; + s10 -= carry10 << 21; + + s[0] = s0 >> 0; + s[1] = s0 >> 8; + s[2] = (s0 >> 16) | (s1 << 5); + s[3] = s1 >> 3; + s[4] = s1 >> 11; + s[5] = (s1 >> 19) | (s2 << 2); + s[6] = s2 >> 6; + s[7] = (s2 >> 14) | (s3 << 7); + s[8] = s3 >> 1; + s[9] = s3 >> 9; + s[10] = (s3 >> 17) | (s4 << 4); + s[11] = s4 >> 4; + s[12] = s4 >> 12; + s[13] = (s4 >> 20) | (s5 << 1); + s[14] = s5 >> 7; + s[15] = (s5 >> 15) | (s6 << 6); + s[16] = s6 >> 2; + s[17] = s6 >> 10; + s[18] = (s6 >> 18) | (s7 << 3); + s[19] = s7 >> 5; + s[20] = s7 >> 13; + s[21] = s8 >> 0; + s[22] = s8 >> 8; + s[23] = (s8 >> 16) | (s9 << 5); + s[24] = s9 >> 3; + s[25] = s9 >> 11; + s[26] = (s9 >> 19) | (s10 << 2); + s[27] = s10 >> 6; + s[28] = (s10 >> 14) | (s11 << 7); + s[29] = s11 >> 1; + s[30] = s11 >> 9; + s[31] = s11 >> 17; +} + +/* +Input: + a[0]+256*a[1]+...+256^31*a[31] = a + b[0]+256*b[1]+...+256^31*b[31] = b + c[0]+256*c[1]+...+256^31*c[31] = c + +Output: + s[0]+256*s[1]+...+256^31*s[31] = (c-ab) mod l + where l = 2^252 + 27742317777372353535851937790883648493. +*/ + +//x +void sc_mulsub(unsigned char *s, const unsigned char *a, const unsigned char *b, const unsigned char *c) { + int64_t a0 = 2097151 & load_3(a); + int64_t a1 = 2097151 & (load_4(a + 2) >> 5); + int64_t a2 = 2097151 & (load_3(a + 5) >> 2); + int64_t a3 = 2097151 & (load_4(a + 7) >> 7); + int64_t a4 = 2097151 & (load_4(a + 10) >> 4); + int64_t a5 = 2097151 & (load_3(a + 13) >> 1); + int64_t a6 = 2097151 & (load_4(a + 15) >> 6); + int64_t a7 = 2097151 & (load_3(a + 18) >> 3); + int64_t a8 = 2097151 & load_3(a + 21); + int64_t a9 = 2097151 & (load_4(a + 23) >> 5); + int64_t a10 = 2097151 & (load_3(a + 26) >> 2); + int64_t a11 = (load_4(a + 28) >> 7); + int64_t b0 = 2097151 & load_3(b); + int64_t b1 = 2097151 & (load_4(b + 2) >> 5); + int64_t b2 = 2097151 & (load_3(b + 5) >> 2); + int64_t b3 = 2097151 & (load_4(b + 7) >> 7); + int64_t b4 = 2097151 & (load_4(b + 10) >> 4); + int64_t b5 = 2097151 & (load_3(b + 13) >> 1); + int64_t b6 = 2097151 & (load_4(b + 15) >> 6); + int64_t b7 = 2097151 & (load_3(b + 18) >> 3); + int64_t b8 = 2097151 & load_3(b + 21); + int64_t b9 = 2097151 & (load_4(b + 23) >> 5); + int64_t b10 = 2097151 & (load_3(b + 26) >> 2); + int64_t b11 = (load_4(b + 28) >> 7); + int64_t c0 = 2097151 & load_3(c); + int64_t c1 = 2097151 & (load_4(c + 2) >> 5); + int64_t c2 = 2097151 & (load_3(c + 5) >> 2); + int64_t c3 = 2097151 & (load_4(c + 7) >> 7); + int64_t c4 = 2097151 & (load_4(c + 10) >> 4); + int64_t c5 = 2097151 & (load_3(c + 13) >> 1); + int64_t c6 = 2097151 & (load_4(c + 15) >> 6); + int64_t c7 = 2097151 & (load_3(c + 18) >> 3); + int64_t c8 = 2097151 & load_3(c + 21); + int64_t c9 = 2097151 & (load_4(c + 23) >> 5); + int64_t c10 = 2097151 & (load_3(c + 26) >> 2); + int64_t c11 = (load_4(c + 28) >> 7); + int64_t s0; + int64_t s1; + int64_t s2; + int64_t s3; + int64_t s4; + int64_t s5; + int64_t s6; + int64_t s7; + int64_t s8; + int64_t s9; + int64_t s10; + int64_t s11; + int64_t s12; + int64_t s13; + int64_t s14; + int64_t s15; + int64_t s16; + int64_t s17; + int64_t s18; + int64_t s19; + int64_t s20; + int64_t s21; + int64_t s22; + int64_t s23; + int64_t carry0; + int64_t carry1; + int64_t carry2; + int64_t carry3; + int64_t carry4; + int64_t carry5; + int64_t carry6; + int64_t carry7; + int64_t carry8; + int64_t carry9; + int64_t carry10; + int64_t carry11; + int64_t carry12; + int64_t carry13; + int64_t carry14; + int64_t carry15; + int64_t carry16; + int64_t carry17; + int64_t carry18; + int64_t carry19; + int64_t carry20; + int64_t carry21; + int64_t carry22; + + s0 = c0 - a0*b0; + s1 = c1 - (a0*b1 + a1*b0); + s2 = c2 - (a0*b2 + a1*b1 + a2*b0); + s3 = c3 - (a0*b3 + a1*b2 + a2*b1 + a3*b0); + s4 = c4 - (a0*b4 + a1*b3 + a2*b2 + a3*b1 + a4*b0); + s5 = c5 - (a0*b5 + a1*b4 + a2*b3 + a3*b2 + a4*b1 + a5*b0); + s6 = c6 - (a0*b6 + a1*b5 + a2*b4 + a3*b3 + a4*b2 + a5*b1 + a6*b0); + s7 = c7 - (a0*b7 + a1*b6 + a2*b5 + a3*b4 + a4*b3 + a5*b2 + a6*b1 + a7*b0); + s8 = c8 - (a0*b8 + a1*b7 + a2*b6 + a3*b5 + a4*b4 + a5*b3 + a6*b2 + a7*b1 + a8*b0); + s9 = c9 - (a0*b9 + a1*b8 + a2*b7 + a3*b6 + a4*b5 + a5*b4 + a6*b3 + a7*b2 + a8*b1 + a9*b0); + s10 = c10 - (a0*b10 + a1*b9 + a2*b8 + a3*b7 + a4*b6 + a5*b5 + a6*b4 + a7*b3 + a8*b2 + a9*b1 + a10*b0); + s11 = c11 - (a0*b11 + a1*b10 + a2*b9 + a3*b8 + a4*b7 + a5*b6 + a6*b5 + a7*b4 + a8*b3 + a9*b2 + a10*b1 + a11*b0); + s12 = -(a1*b11 + a2*b10 + a3*b9 + a4*b8 + a5*b7 + a6*b6 + a7*b5 + a8*b4 + a9*b3 + a10*b2 + a11*b1); + s13 = -(a2*b11 + a3*b10 + a4*b9 + a5*b8 + a6*b7 + a7*b6 + a8*b5 + a9*b4 + a10*b3 + a11*b2); + s14 = -(a3*b11 + a4*b10 + a5*b9 + a6*b8 + a7*b7 + a8*b6 + a9*b5 + a10*b4 + a11*b3); + s15 = -(a4*b11 + a5*b10 + a6*b9 + a7*b8 + a8*b7 + a9*b6 + a10*b5 + a11*b4); + s16 = -(a5*b11 + a6*b10 + a7*b9 + a8*b8 + a9*b7 + a10*b6 + a11*b5); + s17 = -(a6*b11 + a7*b10 + a8*b9 + a9*b8 + a10*b7 + a11*b6); + s18 = -(a7*b11 + a8*b10 + a9*b9 + a10*b8 + a11*b7); + s19 = -(a8*b11 + a9*b10 + a10*b9 + a11*b8); + s20 = -(a9*b11 + a10*b10 + a11*b9); + s21 = -(a10*b11 + a11*b10); + s22 = -a11*b11; + s23 = 0; + + carry0 = (s0 + (1<<20)) >> 21; + s1 += carry0; + s0 -= carry0 << 21; + carry2 = (s2 + (1<<20)) >> 21; + s3 += carry2; + s2 -= carry2 << 21; + carry4 = (s4 + (1<<20)) >> 21; + s5 += carry4; + s4 -= carry4 << 21; + carry6 = (s6 + (1<<20)) >> 21; + s7 += carry6; + s6 -= carry6 << 21; + carry8 = (s8 + (1<<20)) >> 21; + s9 += carry8; + s8 -= carry8 << 21; + carry10 = (s10 + (1<<20)) >> 21; + s11 += carry10; + s10 -= carry10 << 21; + carry12 = (s12 + (1<<20)) >> 21; + s13 += carry12; + s12 -= carry12 << 21; + carry14 = (s14 + (1<<20)) >> 21; + s15 += carry14; + s14 -= carry14 << 21; + carry16 = (s16 + (1<<20)) >> 21; + s17 += carry16; + s16 -= carry16 << 21; + carry18 = (s18 + (1<<20)) >> 21; + s19 += carry18; + s18 -= carry18 << 21; + carry20 = (s20 + (1<<20)) >> 21; + s21 += carry20; + s20 -= carry20 << 21; + carry22 = (s22 + (1<<20)) >> 21; + s23 += carry22; + s22 -= carry22 << 21; + + carry1 = (s1 + (1<<20)) >> 21; + s2 += carry1; + s1 -= carry1 << 21; + carry3 = (s3 + (1<<20)) >> 21; + s4 += carry3; + s3 -= carry3 << 21; + carry5 = (s5 + (1<<20)) >> 21; + s6 += carry5; + s5 -= carry5 << 21; + carry7 = (s7 + (1<<20)) >> 21; + s8 += carry7; + s7 -= carry7 << 21; + carry9 = (s9 + (1<<20)) >> 21; + s10 += carry9; + s9 -= carry9 << 21; + carry11 = (s11 + (1<<20)) >> 21; + s12 += carry11; + s11 -= carry11 << 21; + carry13 = (s13 + (1<<20)) >> 21; + s14 += carry13; + s13 -= carry13 << 21; + carry15 = (s15 + (1<<20)) >> 21; + s16 += carry15; + s15 -= carry15 << 21; + carry17 = (s17 + (1<<20)) >> 21; + s18 += carry17; + s17 -= carry17 << 21; + carry19 = (s19 + (1<<20)) >> 21; + s20 += carry19; + s19 -= carry19 << 21; + carry21 = (s21 + (1<<20)) >> 21; + s22 += carry21; + s21 -= carry21 << 21; + + s11 += s23 * 666643; + s12 += s23 * 470296; + s13 += s23 * 654183; + s14 -= s23 * 997805; + s15 += s23 * 136657; + s16 -= s23 * 683901; + + s10 += s22 * 666643; + s11 += s22 * 470296; + s12 += s22 * 654183; + s13 -= s22 * 997805; + s14 += s22 * 136657; + s15 -= s22 * 683901; + + s9 += s21 * 666643; + s10 += s21 * 470296; + s11 += s21 * 654183; + s12 -= s21 * 997805; + s13 += s21 * 136657; + s14 -= s21 * 683901; + + s8 += s20 * 666643; + s9 += s20 * 470296; + s10 += s20 * 654183; + s11 -= s20 * 997805; + s12 += s20 * 136657; + s13 -= s20 * 683901; + + s7 += s19 * 666643; + s8 += s19 * 470296; + s9 += s19 * 654183; + s10 -= s19 * 997805; + s11 += s19 * 136657; + s12 -= s19 * 683901; + + s6 += s18 * 666643; + s7 += s18 * 470296; + s8 += s18 * 654183; + s9 -= s18 * 997805; + s10 += s18 * 136657; + s11 -= s18 * 683901; + + carry6 = (s6 + (1<<20)) >> 21; + s7 += carry6; + s6 -= carry6 << 21; + carry8 = (s8 + (1<<20)) >> 21; + s9 += carry8; + s8 -= carry8 << 21; + carry10 = (s10 + (1<<20)) >> 21; + s11 += carry10; + s10 -= carry10 << 21; + carry12 = (s12 + (1<<20)) >> 21; + s13 += carry12; + s12 -= carry12 << 21; + carry14 = (s14 + (1<<20)) >> 21; + s15 += carry14; + s14 -= carry14 << 21; + carry16 = (s16 + (1<<20)) >> 21; + s17 += carry16; + s16 -= carry16 << 21; + + carry7 = (s7 + (1<<20)) >> 21; + s8 += carry7; + s7 -= carry7 << 21; + carry9 = (s9 + (1<<20)) >> 21; + s10 += carry9; + s9 -= carry9 << 21; + carry11 = (s11 + (1<<20)) >> 21; + s12 += carry11; + s11 -= carry11 << 21; + carry13 = (s13 + (1<<20)) >> 21; + s14 += carry13; + s13 -= carry13 << 21; + carry15 = (s15 + (1<<20)) >> 21; + s16 += carry15; + s15 -= carry15 << 21; + + s5 += s17 * 666643; + s6 += s17 * 470296; + s7 += s17 * 654183; + s8 -= s17 * 997805; + s9 += s17 * 136657; + s10 -= s17 * 683901; + + s4 += s16 * 666643; + s5 += s16 * 470296; + s6 += s16 * 654183; + s7 -= s16 * 997805; + s8 += s16 * 136657; + s9 -= s16 * 683901; + + s3 += s15 * 666643; + s4 += s15 * 470296; + s5 += s15 * 654183; + s6 -= s15 * 997805; + s7 += s15 * 136657; + s8 -= s15 * 683901; + + s2 += s14 * 666643; + s3 += s14 * 470296; + s4 += s14 * 654183; + s5 -= s14 * 997805; + s6 += s14 * 136657; + s7 -= s14 * 683901; + + s1 += s13 * 666643; + s2 += s13 * 470296; + s3 += s13 * 654183; + s4 -= s13 * 997805; + s5 += s13 * 136657; + s6 -= s13 * 683901; + + s0 += s12 * 666643; + s1 += s12 * 470296; + s2 += s12 * 654183; + s3 -= s12 * 997805; + s4 += s12 * 136657; + s5 -= s12 * 683901; + s12 = 0; + + carry0 = (s0 + (1<<20)) >> 21; + s1 += carry0; + s0 -= carry0 << 21; + carry2 = (s2 + (1<<20)) >> 21; + s3 += carry2; + s2 -= carry2 << 21; + carry4 = (s4 + (1<<20)) >> 21; + s5 += carry4; + s4 -= carry4 << 21; + carry6 = (s6 + (1<<20)) >> 21; + s7 += carry6; + s6 -= carry6 << 21; + carry8 = (s8 + (1<<20)) >> 21; + s9 += carry8; + s8 -= carry8 << 21; + carry10 = (s10 + (1<<20)) >> 21; + s11 += carry10; + s10 -= carry10 << 21; + + carry1 = (s1 + (1<<20)) >> 21; + s2 += carry1; + s1 -= carry1 << 21; + carry3 = (s3 + (1<<20)) >> 21; + s4 += carry3; + s3 -= carry3 << 21; + carry5 = (s5 + (1<<20)) >> 21; + s6 += carry5; + s5 -= carry5 << 21; + carry7 = (s7 + (1<<20)) >> 21; + s8 += carry7; + s7 -= carry7 << 21; + carry9 = (s9 + (1<<20)) >> 21; + s10 += carry9; + s9 -= carry9 << 21; + carry11 = (s11 + (1<<20)) >> 21; + s12 += carry11; + s11 -= carry11 << 21; + + s0 += s12 * 666643; + s1 += s12 * 470296; + s2 += s12 * 654183; + s3 -= s12 * 997805; + s4 += s12 * 136657; + s5 -= s12 * 683901; + s12 = 0; + + carry0 = s0 >> 21; + s1 += carry0; + s0 -= carry0 << 21; + carry1 = s1 >> 21; + s2 += carry1; + s1 -= carry1 << 21; + carry2 = s2 >> 21; + s3 += carry2; + s2 -= carry2 << 21; + carry3 = s3 >> 21; + s4 += carry3; + s3 -= carry3 << 21; + carry4 = s4 >> 21; + s5 += carry4; + s4 -= carry4 << 21; + carry5 = s5 >> 21; + s6 += carry5; + s5 -= carry5 << 21; + carry6 = s6 >> 21; + s7 += carry6; + s6 -= carry6 << 21; + carry7 = s7 >> 21; + s8 += carry7; + s7 -= carry7 << 21; + carry8 = s8 >> 21; + s9 += carry8; + s8 -= carry8 << 21; + carry9 = s9 >> 21; + s10 += carry9; + s9 -= carry9 << 21; + carry10 = s10 >> 21; + s11 += carry10; + s10 -= carry10 << 21; + carry11 = s11 >> 21; + s12 += carry11; + s11 -= carry11 << 21; + + s0 += s12 * 666643; + s1 += s12 * 470296; + s2 += s12 * 654183; + s3 -= s12 * 997805; + s4 += s12 * 136657; + s5 -= s12 * 683901; + + carry0 = s0 >> 21; + s1 += carry0; + s0 -= carry0 << 21; + carry1 = s1 >> 21; + s2 += carry1; + s1 -= carry1 << 21; + carry2 = s2 >> 21; + s3 += carry2; + s2 -= carry2 << 21; + carry3 = s3 >> 21; + s4 += carry3; + s3 -= carry3 << 21; + carry4 = s4 >> 21; + s5 += carry4; + s4 -= carry4 << 21; + carry5 = s5 >> 21; + s6 += carry5; + s5 -= carry5 << 21; + carry6 = s6 >> 21; + s7 += carry6; + s6 -= carry6 << 21; + carry7 = s7 >> 21; + s8 += carry7; + s7 -= carry7 << 21; + carry8 = s8 >> 21; + s9 += carry8; + s8 -= carry8 << 21; + carry9 = s9 >> 21; + s10 += carry9; + s9 -= carry9 << 21; + carry10 = s10 >> 21; + s11 += carry10; + s10 -= carry10 << 21; + + s[0] = s0 >> 0; + s[1] = s0 >> 8; + s[2] = (s0 >> 16) | (s1 << 5); + s[3] = s1 >> 3; + s[4] = s1 >> 11; + s[5] = (s1 >> 19) | (s2 << 2); + s[6] = s2 >> 6; + s[7] = (s2 >> 14) | (s3 << 7); + s[8] = s3 >> 1; + s[9] = s3 >> 9; + s[10] = (s3 >> 17) | (s4 << 4); + s[11] = s4 >> 4; + s[12] = s4 >> 12; + s[13] = (s4 >> 20) | (s5 << 1); + s[14] = s5 >> 7; + s[15] = (s5 >> 15) | (s6 << 6); + s[16] = s6 >> 2; + s[17] = s6 >> 10; + s[18] = (s6 >> 18) | (s7 << 3); + s[19] = s7 >> 5; + s[20] = s7 >> 13; + s[21] = s8 >> 0; + s[22] = s8 >> 8; + s[23] = (s8 >> 16) | (s9 << 5); + s[24] = s9 >> 3; + s[25] = s9 >> 11; + s[26] = (s9 >> 19) | (s10 << 2); + s[27] = s10 >> 6; + s[28] = (s10 >> 14) | (s11 << 7); + s[29] = s11 >> 1; + s[30] = s11 >> 9; + s[31] = s11 >> 17; +} + + +/* + * + * ge code + * + * +ge means group element. + +Here the group is the set of pairs (x,y) of field elements (see fe.h) +satisfying -x^2 + y^2 = 1 + d x^2y^2 +where d = -121665/121666. + +Representations: + ge_p2 (projective): (X:Y:Z) satisfying x=X/Z, y=Y/Z + ge_p3 (extended): (X:Y:Z:T) satisfying x=X/Z, y=Y/Z, XY=ZT + ge_p1p1 (completed): ((X:Z),(Y:T)) satisfying x=X/Z, y=Y/T + ge_precomp (Duif): (y+x,y-x,2dxy) +*/ +/* +r = p + q +*/ +void ge_add(ge_p1p1 *r,const ge_p3 *p,const ge_cached *q) +{ + fe t0; + fe_add(r->X,p->Y,p->X); + fe_sub(r->Y,p->Y,p->X); + fe_mul(r->Z,r->X,q->YplusX); + fe_mul(r->Y,r->Y,q->YminusX); + fe_mul(r->T,q->T2d,p->T); + fe_mul(r->X,p->Z,q->Z); + fe_add(t0,r->X,r->X); + fe_sub(r->X,r->Z,r->Y); + fe_add(r->Y,r->Z,r->Y); + fe_add(r->Z,t0,r->T); + fe_sub(r->T,t0,r->T); +} +static void slide(signed char *r,const unsigned char *a) +{ + int i; + int b; + int k; + for (i = 0; i < 256; ++i) + r[i] = 1 & (a[i >> 3] >> (i & 7)); + for (i = 0; i < 256; ++i) + if (r[i]) { + for (b = 1; b <= 6 && i + b < 256; ++b) { + if (r[i + b]) { + if (r[i] + (r[i + b] << b) <= 15) { + r[i] += r[i + b] << b; + r[i + b] = 0; + } else if (r[i] - (r[i + b] << b) >= -15) { + r[i] -= r[i + b] << b; + for (k = i + b; k < 256; ++k) { + if (!r[k]) { + r[k] = 1; + break; + } + r[k] = 0; + } + } else + break; + } + } + } +} +static ge_precomp Bi[8] = { + { + { 25967493,-14356035,29566456,3660896,-12694345,4014787,27544626,-11754271,-6079156,2047605 }, + { -12545711,934262,-2722910,3049990,-727428,9406986,12720692,5043384,19500929,-15469378 }, + { -8738181,4489570,9688441,-14785194,10184609,-12363380,29287919,11864899,-24514362,-4438546 }, + }, + { + { 15636291,-9688557,24204773,-7912398,616977,-16685262,27787600,-14772189,28944400,-1550024 }, + { 16568933,4717097,-11556148,-1102322,15682896,-11807043,16354577,-11775962,7689662,11199574 }, + { 30464156,-5976125,-11779434,-15670865,23220365,15915852,7512774,10017326,-17749093,-9920357 }, + }, + { + { 10861363,11473154,27284546,1981175,-30064349,12577861,32867885,14515107,-15438304,10819380 }, + { 4708026,6336745,20377586,9066809,-11272109,6594696,-25653668,12483688,-12668491,5581306 }, + { 19563160,16186464,-29386857,4097519,10237984,-4348115,28542350,13850243,-23678021,-15815942 }, + }, + { + { 5153746,9909285,1723747,-2777874,30523605,5516873,19480852,5230134,-23952439,-15175766 }, + { -30269007,-3463509,7665486,10083793,28475525,1649722,20654025,16520125,30598449,7715701 }, + { 28881845,14381568,9657904,3680757,-20181635,7843316,-31400660,1370708,29794553,-1409300 }, + }, + { + { -22518993,-6692182,14201702,-8745502,-23510406,8844726,18474211,-1361450,-13062696,13821877 }, + { -6455177,-7839871,3374702,-4740862,-27098617,-10571707,31655028,-7212327,18853322,-14220951 }, + { 4566830,-12963868,-28974889,-12240689,-7602672,-2830569,-8514358,-10431137,2207753,-3209784 }, + }, + { + { -25154831,-4185821,29681144,7868801,-6854661,-9423865,-12437364,-663000,-31111463,-16132436 }, + { 25576264,-2703214,7349804,-11814844,16472782,9300885,3844789,15725684,171356,6466918 }, + { 23103977,13316479,9739013,-16149481,817875,-15038942,8965339,-14088058,-30714912,16193877 }, + }, + { + { -33521811,3180713,-2394130,14003687,-16903474,-16270840,17238398,4729455,-18074513,9256800 }, + { -25182317,-4174131,32336398,5036987,-21236817,11360617,22616405,9761698,-19827198,630305 }, + { -13720693,2639453,-24237460,-7406481,9494427,-5774029,-6554551,-15960994,-2449256,-14291300 }, + }, + { + { -3151181,-5046075,9282714,6866145,-31907062,-863023,-18940575,15033784,25105118,-7894876 }, + { -24326370,15950226,-31801215,-14592823,-11662737,-5090925,1573892,-2625887,2198790,-15804619 }, + { -3099351,10324967,-2241613,7453183,-5446979,-2735503,-13812022,-16236442,-32461234,-12290683 }, + }, +} ; +/* +r = a * A + b * B +where a = a[0]+256*a[1]+...+256^31 a[31]. +and b = b[0]+256*b[1]+...+256^31 b[31]. +B is the Ed25519 base point (x,4/5) with x positive. +*/ +void ge_double_scalarmult_vartime(ge_p2 *r,const unsigned char *a,const ge_p3 *A,const unsigned char *b) +{ + signed char aslide[256]; + signed char bslide[256]; + ge_cached Ai[8]; /* A,3A,5A,7A,9A,11A,13A,15A */ + ge_p1p1 t; + ge_p3 u; + ge_p3 A2; + int i; + slide(aslide,a); + slide(bslide,b); + ge_p3_to_cached(&Ai[0],A); + ge_p3_dbl(&t,A); + ge_p1p1_to_p3(&A2,&t); + ge_add(&t,&A2,&Ai[0]); + ge_p1p1_to_p3(&u,&t); + ge_p3_to_cached(&Ai[1],&u); + ge_add(&t,&A2,&Ai[1]); + ge_p1p1_to_p3(&u,&t); + ge_p3_to_cached(&Ai[2],&u); + ge_add(&t,&A2,&Ai[2]); + ge_p1p1_to_p3(&u,&t); + ge_p3_to_cached(&Ai[3],&u); + ge_add(&t,&A2,&Ai[3]); + ge_p1p1_to_p3(&u,&t); + ge_p3_to_cached(&Ai[4],&u); + ge_add(&t,&A2,&Ai[4]); + ge_p1p1_to_p3(&u,&t); + ge_p3_to_cached(&Ai[5],&u); + ge_add(&t,&A2,&Ai[5]); + ge_p1p1_to_p3(&u,&t); + ge_p3_to_cached(&Ai[6],&u); + ge_add(&t,&A2,&Ai[6]); + ge_p1p1_to_p3(&u,&t); + ge_p3_to_cached(&Ai[7],&u); + ge_p2_0(r); + for (i = 255; i >= 0; --i) { + if (aslide[i] || bslide[i]) break; + } + for (; i >= 0; --i) { + ge_p2_dbl(&t,r); + if (aslide[i] > 0) { + ge_p1p1_to_p3(&u,&t); + ge_add(&t,&u,&Ai[aslide[i]/2]); + } else if (aslide[i] < 0) { + ge_p1p1_to_p3(&u,&t); + ge_sub(&t,&u,&Ai[(-aslide[i])/2]); + } + if (bslide[i] > 0) { + ge_p1p1_to_p3(&u,&t); + ge_madd(&t,&u,&Bi[bslide[i]/2]); + } else if (bslide[i] < 0) { + ge_p1p1_to_p3(&u,&t); + ge_msub(&t,&u,&Bi[(-bslide[i])/2]); + } + ge_p1p1_to_p2(r,&t); + } +} +static const fe d = { + -10913610,13857413,-15372611,6949391,114729,-8787816,-6275908,-3247719,-18696448,-12055116 +} ; +static const fe sqrtm1 = { + -32595792,-7943725,9377950,3500415,12389472,-272473,-25146209,-2005654,326686,11406482 +} ; +int ge_frombytes_negate_vartime(ge_p3 *h,const unsigned char *s) +{ + fe u; + fe v; + fe v3; + fe vxx; + fe check; + fe_frombytes(h->Y,s); + fe_1(h->Z); + fe_sq(u,h->Y); + fe_mul(v,u,d); + fe_sub(u,u,h->Z); /* u = y^2-1 */ + fe_add(v,v,h->Z); /* v = dy^2+1 */ + fe_sq(v3,v); + fe_mul(v3,v3,v); /* v3 = v^3 */ + fe_sq(h->X,v3); + fe_mul(h->X,h->X,v); + fe_mul(h->X,h->X,u); /* x = uv^7 */ + fe_pow22523(h->X,h->X); /* x = (uv^7)^((q-5)/8) */ + fe_mul(h->X,h->X,v3); + fe_mul(h->X,h->X,u); /* x = uv^3(uv^7)^((q-5)/8) */ + fe_sq(vxx,h->X); + fe_mul(vxx,vxx,v); + fe_sub(check,vxx,u); /* vx^2-u */ + if (fe_isnonzero(check)) { + fe_add(check,vxx,u); /* vx^2+u */ + if (fe_isnonzero(check)) return -1; + fe_mul(h->X,h->X,sqrtm1); + } + if (fe_isnegative(h->X) == (s[31] >> 7)) + fe_neg(h->X,h->X); + fe_mul(h->T,h->X,h->Y); + return 0; +} +/* +r = p + q +*/ +void ge_madd(ge_p1p1 *r,const ge_p3 *p,const ge_precomp *q) +{ + fe t0; + fe_add(r->X,p->Y,p->X); + fe_sub(r->Y,p->Y,p->X); + fe_mul(r->Z,r->X,q->yplusx); + fe_mul(r->Y,r->Y,q->yminusx); + fe_mul(r->T,q->xy2d,p->T); + fe_add(t0,p->Z,p->Z); + fe_sub(r->X,r->Z,r->Y); + fe_add(r->Y,r->Z,r->Y); + fe_add(r->Z,t0,r->T); + fe_sub(r->T,t0,r->T); +} +/* +r = p - q +*/ +void ge_msub(ge_p1p1 *r,const ge_p3 *p,const ge_precomp *q) +{ + fe t0; + fe_add(r->X,p->Y,p->X); + fe_sub(r->Y,p->Y,p->X); + fe_mul(r->Z,r->X,q->yminusx); + fe_mul(r->Y,r->Y,q->yplusx); + fe_mul(r->T,q->xy2d,p->T); + fe_add(t0,p->Z,p->Z); + fe_sub(r->X,r->Z,r->Y); + fe_add(r->Y,r->Z,r->Y); + fe_sub(r->Z,t0,r->T); + fe_add(r->T,t0,r->T); +} + +/* +r = p +*/ + +extern void ge_p1p1_to_p2(ge_p2 *r,const ge_p1p1 *p) +{ + fe_mul(r->X,p->X,p->T); + fe_mul(r->Y,p->Y,p->Z); + fe_mul(r->Z,p->Z,p->T); +} + +/* +r = p +*/ + +extern void ge_p1p1_to_p3(ge_p3 *r,const ge_p1p1 *p) +{ + fe_mul(r->X,p->X,p->T); + fe_mul(r->Y,p->Y,p->Z); + fe_mul(r->Z,p->Z,p->T); + fe_mul(r->T,p->X,p->Y); +} + +void ge_p2_0(ge_p2 *h) +{ + fe_0(h->X); + fe_1(h->Y); + fe_1(h->Z); +} +/* +r = 2 * p +*/ +void ge_p2_dbl(ge_p1p1 *r,const ge_p2 *p) +{ + fe t0; + fe_sq(r->X,p->X); + fe_sq(r->Z,p->Y); + fe_sq2(r->T,p->Z); + fe_add(r->Y,p->X,p->Y); + fe_sq(t0,r->Y); + fe_add(r->Y,r->Z,r->X); + fe_sub(r->Z,r->Z,r->X); + fe_sub(r->X,t0,r->Y); + fe_sub(r->T,r->T,r->Z); +} + +void ge_p3_0(ge_p3 *h) +{ + fe_0(h->X); + fe_1(h->Y); + fe_1(h->Z); + fe_0(h->T); +} + +/* +r = 2 * p +*/ + +void ge_p3_dbl(ge_p1p1 *r,const ge_p3 *p) +{ + ge_p2 q; + ge_p3_to_p2(&q,p); + ge_p2_dbl(r,&q); +} +/* +r = p +*/ +static const fe d2 = { + -21827239,-5839606,-30745221,13898782,229458,15978800,-12551817,-6495438,29715968,9444199 +} ; +extern void ge_p3_to_cached(ge_cached *r,const ge_p3 *p) +{ + fe_add(r->YplusX,p->Y,p->X); + fe_sub(r->YminusX,p->Y,p->X); + fe_copy(r->Z,p->Z); + fe_mul(r->T2d,p->T,d2); +} + +/* +r = p +*/ + +extern void ge_p3_to_p2(ge_p2 *r,const ge_p3 *p) +{ + fe_copy(r->X,p->X); + fe_copy(r->Y,p->Y); + fe_copy(r->Z,p->Z); +} + +void ge_p3_tobytes(unsigned char *s,const ge_p3 *h) +{ + fe recip; + fe x; + fe y; + + fe_invert(recip,h->Z); + fe_mul(x,h->X,recip); + fe_mul(y,h->Y,recip); + fe_tobytes(s,y); + s[31] ^= fe_isnegative(x) << 7; +} + +void ge_precomp_0(ge_precomp *h) +{ + fe_1(h->yplusx); + fe_1(h->yminusx); + fe_0(h->xy2d); +} +static unsigned char equal(signed char b,signed char c) +{ + unsigned char ub = b; + unsigned char uc = c; + unsigned char x = ub ^ uc; /* 0: yes; 1..255: no */ + uint32_t y = x; /* 0: yes; 1..255: no */ + y -= 1; /* 4294967295: yes; 0..254: no */ + y >>= 31; /* 1: yes; 0: no */ + return y; +} +static unsigned char negative(signed char b) +{ + unsigned long long x = b; /* 18446744073709551361..18446744073709551615: yes; 0..255: no */ + x >>= 63; /* 1: yes; 0: no */ + return x; +} +static void ge_precomp_cmov(ge_precomp *t,ge_precomp *u,unsigned char b) +{ + fe_cmov(t->yplusx,u->yplusx,b); + fe_cmov(t->yminusx,u->yminusx,b); + fe_cmov(t->xy2d,u->xy2d,b); +} +/* base[i][j] = (j+1)*256^i*B */ +static ge_precomp base[32][8] = { + { + { + { 25967493,-14356035,29566456,3660896,-12694345,4014787,27544626,-11754271,-6079156,2047605 }, + { -12545711,934262,-2722910,3049990,-727428,9406986,12720692,5043384,19500929,-15469378 }, + { -8738181,4489570,9688441,-14785194,10184609,-12363380,29287919,11864899,-24514362,-4438546 }, + }, + { + { -12815894,-12976347,-21581243,11784320,-25355658,-2750717,-11717903,-3814571,-358445,-10211303 }, + { -21703237,6903825,27185491,6451973,-29577724,-9554005,-15616551,11189268,-26829678,-5319081 }, + { 26966642,11152617,32442495,15396054,14353839,-12752335,-3128826,-9541118,-15472047,-4166697 }, + }, + { + { 15636291,-9688557,24204773,-7912398,616977,-16685262,27787600,-14772189,28944400,-1550024 }, + { 16568933,4717097,-11556148,-1102322,15682896,-11807043,16354577,-11775962,7689662,11199574 }, + { 30464156,-5976125,-11779434,-15670865,23220365,15915852,7512774,10017326,-17749093,-9920357 }, + }, + { + { -17036878,13921892,10945806,-6033431,27105052,-16084379,-28926210,15006023,3284568,-6276540 }, + { 23599295,-8306047,-11193664,-7687416,13236774,10506355,7464579,9656445,13059162,10374397 }, + { 7798556,16710257,3033922,2874086,28997861,2835604,32406664,-3839045,-641708,-101325 }, + }, + { + { 10861363,11473154,27284546,1981175,-30064349,12577861,32867885,14515107,-15438304,10819380 }, + { 4708026,6336745,20377586,9066809,-11272109,6594696,-25653668,12483688,-12668491,5581306 }, + { 19563160,16186464,-29386857,4097519,10237984,-4348115,28542350,13850243,-23678021,-15815942 }, + }, + { + { -15371964,-12862754,32573250,4720197,-26436522,5875511,-19188627,-15224819,-9818940,-12085777 }, + { -8549212,109983,15149363,2178705,22900618,4543417,3044240,-15689887,1762328,14866737 }, + { -18199695,-15951423,-10473290,1707278,-17185920,3916101,-28236412,3959421,27914454,4383652 }, + }, + { + { 5153746,9909285,1723747,-2777874,30523605,5516873,19480852,5230134,-23952439,-15175766 }, + { -30269007,-3463509,7665486,10083793,28475525,1649722,20654025,16520125,30598449,7715701 }, + { 28881845,14381568,9657904,3680757,-20181635,7843316,-31400660,1370708,29794553,-1409300 }, + }, + { + { 14499471,-2729599,-33191113,-4254652,28494862,14271267,30290735,10876454,-33154098,2381726 }, + { -7195431,-2655363,-14730155,462251,-27724326,3941372,-6236617,3696005,-32300832,15351955 }, + { 27431194,8222322,16448760,-3907995,-18707002,11938355,-32961401,-2970515,29551813,10109425 }, + }, + }, + { + { + { -13657040,-13155431,-31283750,11777098,21447386,6519384,-2378284,-1627556,10092783,-4764171 }, + { 27939166,14210322,4677035,16277044,-22964462,-12398139,-32508754,12005538,-17810127,12803510 }, + { 17228999,-15661624,-1233527,300140,-1224870,-11714777,30364213,-9038194,18016357,4397660 }, + }, + { + { -10958843,-7690207,4776341,-14954238,27850028,-15602212,-26619106,14544525,-17477504,982639 }, + { 29253598,15796703,-2863982,-9908884,10057023,3163536,7332899,-4120128,-21047696,9934963 }, + { 5793303,16271923,-24131614,-10116404,29188560,1206517,-14747930,4559895,-30123922,-10897950 }, + }, + { + { -27643952,-11493006,16282657,-11036493,28414021,-15012264,24191034,4541697,-13338309,5500568 }, + { 12650548,-1497113,9052871,11355358,-17680037,-8400164,-17430592,12264343,10874051,13524335 }, + { 25556948,-3045990,714651,2510400,23394682,-10415330,33119038,5080568,-22528059,5376628 }, + }, + { + { -26088264,-4011052,-17013699,-3537628,-6726793,1920897,-22321305,-9447443,4535768,1569007 }, + { -2255422,14606630,-21692440,-8039818,28430649,8775819,-30494562,3044290,31848280,12543772 }, + { -22028579,2943893,-31857513,6777306,13784462,-4292203,-27377195,-2062731,7718482,14474653 }, + }, + { + { 2385315,2454213,-22631320,46603,-4437935,-15680415,656965,-7236665,24316168,-5253567 }, + { 13741529,10911568,-33233417,-8603737,-20177830,-1033297,33040651,-13424532,-20729456,8321686 }, + { 21060490,-2212744,15712757,-4336099,1639040,10656336,23845965,-11874838,-9984458,608372 }, + }, + { + { -13672732,-15087586,-10889693,-7557059,-6036909,11305547,1123968,-6780577,27229399,23887 }, + { -23244140,-294205,-11744728,14712571,-29465699,-2029617,12797024,-6440308,-1633405,16678954 }, + { -29500620,4770662,-16054387,14001338,7830047,9564805,-1508144,-4795045,-17169265,4904953 }, + }, + { + { 24059557,14617003,19037157,-15039908,19766093,-14906429,5169211,16191880,2128236,-4326833 }, + { -16981152,4124966,-8540610,-10653797,30336522,-14105247,-29806336,916033,-6882542,-2986532 }, + { -22630907,12419372,-7134229,-7473371,-16478904,16739175,285431,2763829,15736322,4143876 }, + }, + { + { 2379352,11839345,-4110402,-5988665,11274298,794957,212801,-14594663,23527084,-16458268 }, + { 33431127,-11130478,-17838966,-15626900,8909499,8376530,-32625340,4087881,-15188911,-14416214 }, + { 1767683,7197987,-13205226,-2022635,-13091350,448826,5799055,4357868,-4774191,-16323038 }, + }, + }, + { + { + { 6721966,13833823,-23523388,-1551314,26354293,-11863321,23365147,-3949732,7390890,2759800 }, + { 4409041,2052381,23373853,10530217,7676779,-12885954,21302353,-4264057,1244380,-12919645 }, + { -4421239,7169619,4982368,-2957590,30256825,-2777540,14086413,9208236,15886429,16489664 }, + }, + { + { 1996075,10375649,14346367,13311202,-6874135,-16438411,-13693198,398369,-30606455,-712933 }, + { -25307465,9795880,-2777414,14878809,-33531835,14780363,13348553,12076947,-30836462,5113182 }, + { -17770784,11797796,31950843,13929123,-25888302,12288344,-30341101,-7336386,13847711,5387222 }, + }, + { + { -18582163,-3416217,17824843,-2340966,22744343,-10442611,8763061,3617786,-19600662,10370991 }, + { 20246567,-14369378,22358229,-543712,18507283,-10413996,14554437,-8746092,32232924,16763880 }, + { 9648505,10094563,26416693,14745928,-30374318,-6472621,11094161,15689506,3140038,-16510092 }, + }, + { + { -16160072,5472695,31895588,4744994,8823515,10365685,-27224800,9448613,-28774454,366295 }, + { 19153450,11523972,-11096490,-6503142,-24647631,5420647,28344573,8041113,719605,11671788 }, + { 8678025,2694440,-6808014,2517372,4964326,11152271,-15432916,-15266516,27000813,-10195553 }, + }, + { + { -15157904,7134312,8639287,-2814877,-7235688,10421742,564065,5336097,6750977,-14521026 }, + { 11836410,-3979488,26297894,16080799,23455045,15735944,1695823,-8819122,8169720,16220347 }, + { -18115838,8653647,17578566,-6092619,-8025777,-16012763,-11144307,-2627664,-5990708,-14166033 }, + }, + { + { -23308498,-10968312,15213228,-10081214,-30853605,-11050004,27884329,2847284,2655861,1738395 }, + { -27537433,-14253021,-25336301,-8002780,-9370762,8129821,21651608,-3239336,-19087449,-11005278 }, + { 1533110,3437855,23735889,459276,29970501,11335377,26030092,5821408,10478196,8544890 }, + }, + { + { 32173121,-16129311,24896207,3921497,22579056,-3410854,19270449,12217473,17789017,-3395995 }, + { -30552961,-2228401,-15578829,-10147201,13243889,517024,15479401,-3853233,30460520,1052596 }, + { -11614875,13323618,32618793,8175907,-15230173,12596687,27491595,-4612359,3179268,-9478891 }, + }, + { + { 31947069,-14366651,-4640583,-15339921,-15125977,-6039709,-14756777,-16411740,19072640,-9511060 }, + { 11685058,11822410,3158003,-13952594,33402194,-4165066,5977896,-5215017,473099,5040608 }, + { -20290863,8198642,-27410132,11602123,1290375,-2799760,28326862,1721092,-19558642,-3131606 }, + }, + }, + { + { + { 7881532,10687937,7578723,7738378,-18951012,-2553952,21820786,8076149,-27868496,11538389 }, + { -19935666,3899861,18283497,-6801568,-15728660,-11249211,8754525,7446702,-5676054,5797016 }, + { -11295600,-3793569,-15782110,-7964573,12708869,-8456199,2014099,-9050574,-2369172,-5877341 }, + }, + { + { -22472376,-11568741,-27682020,1146375,18956691,16640559,1192730,-3714199,15123619,10811505 }, + { 14352098,-3419715,-18942044,10822655,32750596,4699007,-70363,15776356,-28886779,-11974553 }, + { -28241164,-8072475,-4978962,-5315317,29416931,1847569,-20654173,-16484855,4714547,-9600655 }, + }, + { + { 15200332,8368572,19679101,15970074,-31872674,1959451,24611599,-4543832,-11745876,12340220 }, + { 12876937,-10480056,33134381,6590940,-6307776,14872440,9613953,8241152,15370987,9608631 }, + { -4143277,-12014408,8446281,-391603,4407738,13629032,-7724868,15866074,-28210621,-8814099 }, + }, + { + { 26660628,-15677655,8393734,358047,-7401291,992988,-23904233,858697,20571223,8420556 }, + { 14620715,13067227,-15447274,8264467,14106269,15080814,33531827,12516406,-21574435,-12476749 }, + { 236881,10476226,57258,-14677024,6472998,2466984,17258519,7256740,8791136,15069930 }, + }, + { + { 1276410,-9371918,22949635,-16322807,-23493039,-5702186,14711875,4874229,-30663140,-2331391 }, + { 5855666,4990204,-13711848,7294284,-7804282,1924647,-1423175,-7912378,-33069337,9234253 }, + { 20590503,-9018988,31529744,-7352666,-2706834,10650548,31559055,-11609587,18979186,13396066 }, + }, + { + { 24474287,4968103,22267082,4407354,24063882,-8325180,-18816887,13594782,33514650,7021958 }, + { -11566906,-6565505,-21365085,15928892,-26158305,4315421,-25948728,-3916677,-21480480,12868082 }, + { -28635013,13504661,19988037,-2132761,21078225,6443208,-21446107,2244500,-12455797,-8089383 }, + }, + { + { -30595528,13793479,-5852820,319136,-25723172,-6263899,33086546,8957937,-15233648,5540521 }, + { -11630176,-11503902,-8119500,-7643073,2620056,1022908,-23710744,-1568984,-16128528,-14962807 }, + { 23152971,775386,27395463,14006635,-9701118,4649512,1689819,892185,-11513277,-15205948 }, + }, + { + { 9770129,9586738,26496094,4324120,1556511,-3550024,27453819,4763127,-19179614,5867134 }, + { -32765025,1927590,31726409,-4753295,23962434,-16019500,27846559,5931263,-29749703,-16108455 }, + { 27461885,-2977536,22380810,1815854,-23033753,-3031938,7283490,-15148073,-19526700,7734629 }, + }, + }, + { + { + { -8010264,-9590817,-11120403,6196038,29344158,-13430885,7585295,-3176626,18549497,15302069 }, + { -32658337,-6171222,-7672793,-11051681,6258878,13504381,10458790,-6418461,-8872242,8424746 }, + { 24687205,8613276,-30667046,-3233545,1863892,-1830544,19206234,7134917,-11284482,-828919 }, + }, + { + { 11334899,-9218022,8025293,12707519,17523892,-10476071,10243738,-14685461,-5066034,16498837 }, + { 8911542,6887158,-9584260,-6958590,11145641,-9543680,17303925,-14124238,6536641,10543906 }, + { -28946384,15479763,-17466835,568876,-1497683,11223454,-2669190,-16625574,-27235709,8876771 }, + }, + { + { -25742899,-12566864,-15649966,-846607,-33026686,-796288,-33481822,15824474,-604426,-9039817 }, + { 10330056,70051,7957388,-9002667,9764902,15609756,27698697,-4890037,1657394,3084098 }, + { 10477963,-7470260,12119566,-13250805,29016247,-5365589,31280319,14396151,-30233575,15272409 }, + }, + { + { -12288309,3169463,28813183,16658753,25116432,-5630466,-25173957,-12636138,-25014757,1950504 }, + { -26180358,9489187,11053416,-14746161,-31053720,5825630,-8384306,-8767532,15341279,8373727 }, + { 28685821,7759505,-14378516,-12002860,-31971820,4079242,298136,-10232602,-2878207,15190420 }, + }, + { + { -32932876,13806336,-14337485,-15794431,-24004620,10940928,8669718,2742393,-26033313,-6875003 }, + { -1580388,-11729417,-25979658,-11445023,-17411874,-10912854,9291594,-16247779,-12154742,6048605 }, + { -30305315,14843444,1539301,11864366,20201677,1900163,13934231,5128323,11213262,9168384 }, + }, + { + { -26280513,11007847,19408960,-940758,-18592965,-4328580,-5088060,-11105150,20470157,-16398701 }, + { -23136053,9282192,14855179,-15390078,-7362815,-14408560,-22783952,14461608,14042978,5230683 }, + { 29969567,-2741594,-16711867,-8552442,9175486,-2468974,21556951,3506042,-5933891,-12449708 }, + }, + { + { -3144746,8744661,19704003,4581278,-20430686,6830683,-21284170,8971513,-28539189,15326563 }, + { -19464629,10110288,-17262528,-3503892,-23500387,1355669,-15523050,15300988,-20514118,9168260 }, + { -5353335,4488613,-23803248,16314347,7780487,-15638939,-28948358,9601605,33087103,-9011387 }, + }, + { + { -19443170,-15512900,-20797467,-12445323,-29824447,10229461,-27444329,-15000531,-5996870,15664672 }, + { 23294591,-16632613,-22650781,-8470978,27844204,11461195,13099750,-2460356,18151676,13417686 }, + { -24722913,-4176517,-31150679,5988919,-26858785,6685065,1661597,-12551441,15271676,-15452665 }, + }, + }, + { + { + { 11433042,-13228665,8239631,-5279517,-1985436,-725718,-18698764,2167544,-6921301,-13440182 }, + { -31436171,15575146,30436815,12192228,-22463353,9395379,-9917708,-8638997,12215110,12028277 }, + { 14098400,6555944,23007258,5757252,-15427832,-12950502,30123440,4617780,-16900089,-655628 }, + }, + { + { -4026201,-15240835,11893168,13718664,-14809462,1847385,-15819999,10154009,23973261,-12684474 }, + { -26531820,-3695990,-1908898,2534301,-31870557,-16550355,18341390,-11419951,32013174,-10103539 }, + { -25479301,10876443,-11771086,-14625140,-12369567,1838104,21911214,6354752,4425632,-837822 }, + }, + { + { -10433389,-14612966,22229858,-3091047,-13191166,776729,-17415375,-12020462,4725005,14044970 }, + { 19268650,-7304421,1555349,8692754,-21474059,-9910664,6347390,-1411784,-19522291,-16109756 }, + { -24864089,12986008,-10898878,-5558584,-11312371,-148526,19541418,8180106,9282262,10282508 }, + }, + { + { -26205082,4428547,-8661196,-13194263,4098402,-14165257,15522535,8372215,5542595,-10702683 }, + { -10562541,14895633,26814552,-16673850,-17480754,-2489360,-2781891,6993761,-18093885,10114655 }, + { -20107055,-929418,31422704,10427861,-7110749,6150669,-29091755,-11529146,25953725,-106158 }, + }, + { + { -4234397,-8039292,-9119125,3046000,2101609,-12607294,19390020,6094296,-3315279,12831125 }, + { -15998678,7578152,5310217,14408357,-33548620,-224739,31575954,6326196,7381791,-2421839 }, + { -20902779,3296811,24736065,-16328389,18374254,7318640,6295303,8082724,-15362489,12339664 }, + }, + { + { 27724736,2291157,6088201,-14184798,1792727,5857634,13848414,15768922,25091167,14856294 }, + { -18866652,8331043,24373479,8541013,-701998,-9269457,12927300,-12695493,-22182473,-9012899 }, + { -11423429,-5421590,11632845,3405020,30536730,-11674039,-27260765,13866390,30146206,9142070 }, + }, + { + { 3924129,-15307516,-13817122,-10054960,12291820,-668366,-27702774,9326384,-8237858,4171294 }, + { -15921940,16037937,6713787,16606682,-21612135,2790944,26396185,3731949,345228,-5462949 }, + { -21327538,13448259,25284571,1143661,20614966,-8849387,2031539,-12391231,-16253183,-13582083 }, + }, + { + { 31016211,-16722429,26371392,-14451233,-5027349,14854137,17477601,3842657,28012650,-16405420 }, + { -5075835,9368966,-8562079,-4600902,-15249953,6970560,-9189873,16292057,-8867157,3507940 }, + { 29439664,3537914,23333589,6997794,-17555561,-11018068,-15209202,-15051267,-9164929,6580396 }, + }, + }, + { + { + { -12185861,-7679788,16438269,10826160,-8696817,-6235611,17860444,-9273846,-2095802,9304567 }, + { 20714564,-4336911,29088195,7406487,11426967,-5095705,14792667,-14608617,5289421,-477127 }, + { -16665533,-10650790,-6160345,-13305760,9192020,-1802462,17271490,12349094,26939669,-3752294 }, + }, + { + { -12889898,9373458,31595848,16374215,21471720,13221525,-27283495,-12348559,-3698806,117887 }, + { 22263325,-6560050,3984570,-11174646,-15114008,-566785,28311253,5358056,-23319780,541964 }, + { 16259219,3261970,2309254,-15534474,-16885711,-4581916,24134070,-16705829,-13337066,-13552195 }, + }, + { + { 9378160,-13140186,-22845982,-12745264,28198281,-7244098,-2399684,-717351,690426,14876244 }, + { 24977353,-314384,-8223969,-13465086,28432343,-1176353,-13068804,-12297348,-22380984,6618999 }, + { -1538174,11685646,12944378,13682314,-24389511,-14413193,8044829,-13817328,32239829,-5652762 }, + }, + { + { -18603066,4762990,-926250,8885304,-28412480,-3187315,9781647,-10350059,32779359,5095274 }, + { -33008130,-5214506,-32264887,-3685216,9460461,-9327423,-24601656,14506724,21639561,-2630236 }, + { -16400943,-13112215,25239338,15531969,3987758,-4499318,-1289502,-6863535,17874574,558605 }, + }, + { + { -13600129,10240081,9171883,16131053,-20869254,9599700,33499487,5080151,2085892,5119761 }, + { -22205145,-2519528,-16381601,414691,-25019550,2170430,30634760,-8363614,-31999993,-5759884 }, + { -6845704,15791202,8550074,-1312654,29928809,-12092256,27534430,-7192145,-22351378,12961482 }, + }, + { + { -24492060,-9570771,10368194,11582341,-23397293,-2245287,16533930,8206996,-30194652,-5159638 }, + { -11121496,-3382234,2307366,6362031,-135455,8868177,-16835630,7031275,7589640,8945490 }, + { -32152748,8917967,6661220,-11677616,-1192060,-15793393,7251489,-11182180,24099109,-14456170 }, + }, + { + { 5019558,-7907470,4244127,-14714356,-26933272,6453165,-19118182,-13289025,-6231896,-10280736 }, + { 10853594,10721687,26480089,5861829,-22995819,1972175,-1866647,-10557898,-3363451,-6441124 }, + { -17002408,5906790,221599,-6563147,7828208,-13248918,24362661,-2008168,-13866408,7421392 }, + }, + { + { 8139927,-6546497,32257646,-5890546,30375719,1886181,-21175108,15441252,28826358,-4123029 }, + { 6267086,9695052,7709135,-16603597,-32869068,-1886135,14795160,-7840124,13746021,-1742048 }, + { 28584902,7787108,-6732942,-15050729,22846041,-7571236,-3181936,-363524,4771362,-8419958 }, + }, + }, + { + { + { 24949256,6376279,-27466481,-8174608,-18646154,-9930606,33543569,-12141695,3569627,11342593 }, + { 26514989,4740088,27912651,3697550,19331575,-11472339,6809886,4608608,7325975,-14801071 }, + { -11618399,-14554430,-24321212,7655128,-1369274,5214312,-27400540,10258390,-17646694,-8186692 }, + }, + { + { 11431204,15823007,26570245,14329124,18029990,4796082,-31446179,15580664,9280358,-3973687 }, + { -160783,-10326257,-22855316,-4304997,-20861367,-13621002,-32810901,-11181622,-15545091,4387441 }, + { -20799378,12194512,3937617,-5805892,-27154820,9340370,-24513992,8548137,20617071,-7482001 }, + }, + { + { -938825,-3930586,-8714311,16124718,24603125,-6225393,-13775352,-11875822,24345683,10325460 }, + { -19855277,-1568885,-22202708,8714034,14007766,6928528,16318175,-1010689,4766743,3552007 }, + { -21751364,-16730916,1351763,-803421,-4009670,3950935,3217514,14481909,10988822,-3994762 }, + }, + { + { 15564307,-14311570,3101243,5684148,30446780,-8051356,12677127,-6505343,-8295852,13296005 }, + { -9442290,6624296,-30298964,-11913677,-4670981,-2057379,31521204,9614054,-30000824,12074674 }, + { 4771191,-135239,14290749,-13089852,27992298,14998318,-1413936,-1556716,29832613,-16391035 }, + }, + { + { 7064884,-7541174,-19161962,-5067537,-18891269,-2912736,25825242,5293297,-27122660,13101590 }, + { -2298563,2439670,-7466610,1719965,-27267541,-16328445,32512469,-5317593,-30356070,-4190957 }, + { -30006540,10162316,-33180176,3981723,-16482138,-13070044,14413974,9515896,19568978,9628812 }, + }, + { + { 33053803,199357,15894591,1583059,27380243,-4580435,-17838894,-6106839,-6291786,3437740 }, + { -18978877,3884493,19469877,12726490,15913552,13614290,-22961733,70104,7463304,4176122 }, + { -27124001,10659917,11482427,-16070381,12771467,-6635117,-32719404,-5322751,24216882,5944158 }, + }, + { + { 8894125,7450974,-2664149,-9765752,-28080517,-12389115,19345746,14680796,11632993,5847885 }, + { 26942781,-2315317,9129564,-4906607,26024105,11769399,-11518837,6367194,-9727230,4782140 }, + { 19916461,-4828410,-22910704,-11414391,25606324,-5972441,33253853,8220911,6358847,-1873857 }, + }, + { + { 801428,-2081702,16569428,11065167,29875704,96627,7908388,-4480480,-13538503,1387155 }, + { 19646058,5720633,-11416706,12814209,11607948,12749789,14147075,15156355,-21866831,11835260 }, + { 19299512,1155910,28703737,14890794,2925026,7269399,26121523,15467869,-26560550,5052483 }, + }, + }, + { + { + { -3017432,10058206,1980837,3964243,22160966,12322533,-6431123,-12618185,12228557,-7003677 }, + { 32944382,14922211,-22844894,5188528,21913450,-8719943,4001465,13238564,-6114803,8653815 }, + { 22865569,-4652735,27603668,-12545395,14348958,8234005,24808405,5719875,28483275,2841751 }, + }, + { + { -16420968,-1113305,-327719,-12107856,21886282,-15552774,-1887966,-315658,19932058,-12739203 }, + { -11656086,10087521,-8864888,-5536143,-19278573,-3055912,3999228,13239134,-4777469,-13910208 }, + { 1382174,-11694719,17266790,9194690,-13324356,9720081,20403944,11284705,-14013818,3093230 }, + }, + { + { 16650921,-11037932,-1064178,1570629,-8329746,7352753,-302424,16271225,-24049421,-6691850 }, + { -21911077,-5927941,-4611316,-5560156,-31744103,-10785293,24123614,15193618,-21652117,-16739389 }, + { -9935934,-4289447,-25279823,4372842,2087473,10399484,31870908,14690798,17361620,11864968 }, + }, + { + { -11307610,6210372,13206574,5806320,-29017692,-13967200,-12331205,-7486601,-25578460,-16240689 }, + { 14668462,-12270235,26039039,15305210,25515617,4542480,10453892,6577524,9145645,-6443880 }, + { 5974874,3053895,-9433049,-10385191,-31865124,3225009,-7972642,3936128,-5652273,-3050304 }, + }, + { + { 30625386,-4729400,-25555961,-12792866,-20484575,7695099,17097188,-16303496,-27999779,1803632 }, + { -3553091,9865099,-5228566,4272701,-5673832,-16689700,14911344,12196514,-21405489,7047412 }, + { 20093277,9920966,-11138194,-5343857,13161587,12044805,-32856851,4124601,-32343828,-10257566 }, + }, + { + { -20788824,14084654,-13531713,7842147,19119038,-13822605,4752377,-8714640,-21679658,2288038 }, + { -26819236,-3283715,29965059,3039786,-14473765,2540457,29457502,14625692,-24819617,12570232 }, + { -1063558,-11551823,16920318,12494842,1278292,-5869109,-21159943,-3498680,-11974704,4724943 }, + }, + { + { 17960970,-11775534,-4140968,-9702530,-8876562,-1410617,-12907383,-8659932,-29576300,1903856 }, + { 23134274,-14279132,-10681997,-1611936,20684485,15770816,-12989750,3190296,26955097,14109738 }, + { 15308788,5320727,-30113809,-14318877,22902008,7767164,29425325,-11277562,31960942,11934971 }, + }, + { + { -27395711,8435796,4109644,12222639,-24627868,14818669,20638173,4875028,10491392,1379718 }, + { -13159415,9197841,3875503,-8936108,-1383712,-5879801,33518459,16176658,21432314,12180697 }, + { -11787308,11500838,13787581,-13832590,-22430679,10140205,1465425,12689540,-10301319,-13872883 }, + }, + }, + { + { + { 5414091,-15386041,-21007664,9643570,12834970,1186149,-2622916,-1342231,26128231,6032912 }, + { -26337395,-13766162,32496025,-13653919,17847801,-12669156,3604025,8316894,-25875034,-10437358 }, + { 3296484,6223048,24680646,-12246460,-23052020,5903205,-8862297,-4639164,12376617,3188849 }, + }, + { + { 29190488,-14659046,27549113,-1183516,3520066,-10697301,32049515,-7309113,-16109234,-9852307 }, + { -14744486,-9309156,735818,-598978,-20407687,-5057904,25246078,-15795669,18640741,-960977 }, + { -6928835,-16430795,10361374,5642961,4910474,12345252,-31638386,-494430,10530747,1053335 }, + }, + { + { -29265967,-14186805,-13538216,-12117373,-19457059,-10655384,-31462369,-2948985,24018831,15026644 }, + { -22592535,-3145277,-2289276,5953843,-13440189,9425631,25310643,13003497,-2314791,-15145616 }, + { -27419985,-603321,-8043984,-1669117,-26092265,13987819,-27297622,187899,-23166419,-2531735 }, + }, + { + { -21744398,-13810475,1844840,5021428,-10434399,-15911473,9716667,16266922,-5070217,726099 }, + { 29370922,-6053998,7334071,-15342259,9385287,2247707,-13661962,-4839461,30007388,-15823341 }, + { -936379,16086691,23751945,-543318,-1167538,-5189036,9137109,730663,9835848,4555336 }, + }, + { + { -23376435,1410446,-22253753,-12899614,30867635,15826977,17693930,544696,-11985298,12422646 }, + { 31117226,-12215734,-13502838,6561947,-9876867,-12757670,-5118685,-4096706,29120153,13924425 }, + { -17400879,-14233209,19675799,-2734756,-11006962,-5858820,-9383939,-11317700,7240931,-237388 }, + }, + { + { -31361739,-11346780,-15007447,-5856218,-22453340,-12152771,1222336,4389483,3293637,-15551743 }, + { -16684801,-14444245,11038544,11054958,-13801175,-3338533,-24319580,7733547,12796905,-6335822 }, + { -8759414,-10817836,-25418864,10783769,-30615557,-9746811,-28253339,3647836,3222231,-11160462 }, + }, + { + { 18606113,1693100,-25448386,-15170272,4112353,10045021,23603893,-2048234,-7550776,2484985 }, + { 9255317,-3131197,-12156162,-1004256,13098013,-9214866,16377220,-2102812,-19802075,-3034702 }, + { -22729289,7496160,-5742199,11329249,19991973,-3347502,-31718148,9936966,-30097688,-10618797 }, + }, + { + { 21878590,-5001297,4338336,13643897,-3036865,13160960,19708896,5415497,-7360503,-4109293 }, + { 27736861,10103576,12500508,8502413,-3413016,-9633558,10436918,-1550276,-23659143,-8132100 }, + { 19492550,-12104365,-29681976,-852630,-3208171,12403437,30066266,8367329,13243957,8709688 }, + }, + }, + { + { + { 12015105,2801261,28198131,10151021,24818120,-4743133,-11194191,-5645734,5150968,7274186 }, + { 2831366,-12492146,1478975,6122054,23825128,-12733586,31097299,6083058,31021603,-9793610 }, + { -2529932,-2229646,445613,10720828,-13849527,-11505937,-23507731,16354465,15067285,-14147707 }, + }, + { + { 7840942,14037873,-33364863,15934016,-728213,-3642706,21403988,1057586,-19379462,-12403220 }, + { 915865,-16469274,15608285,-8789130,-24357026,6060030,-17371319,8410997,-7220461,16527025 }, + { 32922597,-556987,20336074,-16184568,10903705,-5384487,16957574,52992,23834301,6588044 }, + }, + { + { 32752030,11232950,3381995,-8714866,22652988,-10744103,17159699,16689107,-20314580,-1305992 }, + { -4689649,9166776,-25710296,-10847306,11576752,12733943,7924251,-2752281,1976123,-7249027 }, + { 21251222,16309901,-2983015,-6783122,30810597,12967303,156041,-3371252,12331345,-8237197 }, + }, + { + { 8651614,-4477032,-16085636,-4996994,13002507,2950805,29054427,-5106970,10008136,-4667901 }, + { 31486080,15114593,-14261250,12951354,14369431,-7387845,16347321,-13662089,8684155,-10532952 }, + { 19443825,11385320,24468943,-9659068,-23919258,2187569,-26263207,-6086921,31316348,14219878 }, + }, + { + { -28594490,1193785,32245219,11392485,31092169,15722801,27146014,6992409,29126555,9207390 }, + { 32382935,1110093,18477781,11028262,-27411763,-7548111,-4980517,10843782,-7957600,-14435730 }, + { 2814918,7836403,27519878,-7868156,-20894015,-11553689,-21494559,8550130,28346258,1994730 }, + }, + { + { -19578299,8085545,-14000519,-3948622,2785838,-16231307,-19516951,7174894,22628102,8115180 }, + { -30405132,955511,-11133838,-15078069,-32447087,-13278079,-25651578,3317160,-9943017,930272 }, + { -15303681,-6833769,28856490,1357446,23421993,1057177,24091212,-1388970,-22765376,-10650715 }, + }, + { + { -22751231,-5303997,-12907607,-12768866,-15811511,-7797053,-14839018,-16554220,-1867018,8398970 }, + { -31969310,2106403,-4736360,1362501,12813763,16200670,22981545,-6291273,18009408,-15772772 }, + { -17220923,-9545221,-27784654,14166835,29815394,7444469,29551787,-3727419,19288549,1325865 }, + }, + { + { 15100157,-15835752,-23923978,-1005098,-26450192,15509408,12376730,-3479146,33166107,-8042750 }, + { 20909231,13023121,-9209752,16251778,-5778415,-8094914,12412151,10018715,2213263,-13878373 }, + { 32529814,-11074689,30361439,-16689753,-9135940,1513226,22922121,6382134,-5766928,8371348 }, + }, + }, + { + { + { 9923462,11271500,12616794,3544722,-29998368,-1721626,12891687,-8193132,-26442943,10486144 }, + { -22597207,-7012665,8587003,-8257861,4084309,-12970062,361726,2610596,-23921530,-11455195 }, + { 5408411,-1136691,-4969122,10561668,24145918,14240566,31319731,-4235541,19985175,-3436086 }, + }, + { + { -13994457,16616821,14549246,3341099,32155958,13648976,-17577068,8849297,65030,8370684 }, + { -8320926,-12049626,31204563,5839400,-20627288,-1057277,-19442942,6922164,12743482,-9800518 }, + { -2361371,12678785,28815050,4759974,-23893047,4884717,23783145,11038569,18800704,255233 }, + }, + { + { -5269658,-1773886,13957886,7990715,23132995,728773,13393847,9066957,19258688,-14753793 }, + { -2936654,-10827535,-10432089,14516793,-3640786,4372541,-31934921,2209390,-1524053,2055794 }, + { 580882,16705327,5468415,-2683018,-30926419,-14696000,-7203346,-8994389,-30021019,7394435 }, + }, + { + { 23838809,1822728,-15738443,15242727,8318092,-3733104,-21672180,-3492205,-4821741,14799921 }, + { 13345610,9759151,3371034,-16137791,16353039,8577942,31129804,13496856,-9056018,7402518 }, + { 2286874,-4435931,-20042458,-2008336,-13696227,5038122,11006906,-15760352,8205061,1607563 }, + }, + { + { 14414086,-8002132,3331830,-3208217,22249151,-5594188,18364661,-2906958,30019587,-9029278 }, + { -27688051,1585953,-10775053,931069,-29120221,-11002319,-14410829,12029093,9944378,8024 }, + { 4368715,-3709630,29874200,-15022983,-20230386,-11410704,-16114594,-999085,-8142388,5640030 }, + }, + { + { 10299610,13746483,11661824,16234854,7630238,5998374,9809887,-16694564,15219798,-14327783 }, + { 27425505,-5719081,3055006,10660664,23458024,595578,-15398605,-1173195,-18342183,9742717 }, + { 6744077,2427284,26042789,2720740,-847906,1118974,32324614,7406442,12420155,1994844 }, + }, + { + { 14012521,-5024720,-18384453,-9578469,-26485342,-3936439,-13033478,-10909803,24319929,-6446333 }, + { 16412690,-4507367,10772641,15929391,-17068788,-4658621,10555945,-10484049,-30102368,-4739048 }, + { 22397382,-7767684,-9293161,-12792868,17166287,-9755136,-27333065,6199366,21880021,-12250760 }, + }, + { + { -4283307,5368523,-31117018,8163389,-30323063,3209128,16557151,8890729,8840445,4957760 }, + { -15447727,709327,-6919446,-10870178,-29777922,6522332,-21720181,12130072,-14796503,5005757 }, + { -2114751,-14308128,23019042,15765735,-25269683,6002752,10183197,-13239326,-16395286,-2176112 }, + }, + }, + { + { + { -19025756,1632005,13466291,-7995100,-23640451,16573537,-32013908,-3057104,22208662,2000468 }, + { 3065073,-1412761,-25598674,-361432,-17683065,-5703415,-8164212,11248527,-3691214,-7414184 }, + { 10379208,-6045554,8877319,1473647,-29291284,-12507580,16690915,2553332,-3132688,16400289 }, + }, + { + { 15716668,1254266,-18472690,7446274,-8448918,6344164,-22097271,-7285580,26894937,9132066 }, + { 24158887,12938817,11085297,-8177598,-28063478,-4457083,-30576463,64452,-6817084,-2692882 }, + { 13488534,7794716,22236231,5989356,25426474,-12578208,2350710,-3418511,-4688006,2364226 }, + }, + { + { 16335052,9132434,25640582,6678888,1725628,8517937,-11807024,-11697457,15445875,-7798101 }, + { 29004207,-7867081,28661402,-640412,-12794003,-7943086,31863255,-4135540,-278050,-15759279 }, + { -6122061,-14866665,-28614905,14569919,-10857999,-3591829,10343412,-6976290,-29828287,-10815811 }, + }, + { + { 27081650,3463984,14099042,-4517604,1616303,-6205604,29542636,15372179,17293797,960709 }, + { 20263915,11434237,-5765435,11236810,13505955,-10857102,-16111345,6493122,-19384511,7639714 }, + { -2830798,-14839232,25403038,-8215196,-8317012,-16173699,18006287,-16043750,29994677,-15808121 }, + }, + { + { 9769828,5202651,-24157398,-13631392,-28051003,-11561624,-24613141,-13860782,-31184575,709464 }, + { 12286395,13076066,-21775189,-1176622,-25003198,4057652,-32018128,-8890874,16102007,13205847 }, + { 13733362,5599946,10557076,3195751,-5557991,8536970,-25540170,8525972,10151379,10394400 }, + }, + { + { 4024660,-16137551,22436262,12276534,-9099015,-2686099,19698229,11743039,-33302334,8934414 }, + { -15879800,-4525240,-8580747,-2934061,14634845,-698278,-9449077,3137094,-11536886,11721158 }, + { 17555939,-5013938,8268606,2331751,-22738815,9761013,9319229,8835153,-9205489,-1280045 }, + }, + { + { -461409,-7830014,20614118,16688288,-7514766,-4807119,22300304,505429,6108462,-6183415 }, + { -5070281,12367917,-30663534,3234473,32617080,-8422642,29880583,-13483331,-26898490,-7867459 }, + { -31975283,5726539,26934134,10237677,-3173717,-605053,24199304,3795095,7592688,-14992079 }, + }, + { + { 21594432,-14964228,17466408,-4077222,32537084,2739898,6407723,12018833,-28256052,4298412 }, + { -20650503,-11961496,-27236275,570498,3767144,-1717540,13891942,-1569194,13717174,10805743 }, + { -14676630,-15644296,15287174,11927123,24177847,-8175568,-796431,14860609,-26938930,-5863836 }, + }, + }, + { + { + { 12962541,5311799,-10060768,11658280,18855286,-7954201,13286263,-12808704,-4381056,9882022 }, + { 18512079,11319350,-20123124,15090309,18818594,5271736,-22727904,3666879,-23967430,-3299429 }, + { -6789020,-3146043,16192429,13241070,15898607,-14206114,-10084880,-6661110,-2403099,5276065 }, + }, + { + { 30169808,-5317648,26306206,-11750859,27814964,7069267,7152851,3684982,1449224,13082861 }, + { 10342826,3098505,2119311,193222,25702612,12233820,23697382,15056736,-21016438,-8202000 }, + { -33150110,3261608,22745853,7948688,19370557,-15177665,-26171976,6482814,-10300080,-11060101 }, + }, + { + { 32869458,-5408545,25609743,15678670,-10687769,-15471071,26112421,2521008,-22664288,6904815 }, + { 29506923,4457497,3377935,-9796444,-30510046,12935080,1561737,3841096,-29003639,-6657642 }, + { 10340844,-6630377,-18656632,-2278430,12621151,-13339055,30878497,-11824370,-25584551,5181966 }, + }, + { + { 25940115,-12658025,17324188,-10307374,-8671468,15029094,24396252,-16450922,-2322852,-12388574 }, + { -21765684,9916823,-1300409,4079498,-1028346,11909559,1782390,12641087,20603771,-6561742 }, + { -18882287,-11673380,24849422,11501709,13161720,-4768874,1925523,11914390,4662781,7820689 }, + }, + { + { 12241050,-425982,8132691,9393934,32846760,-1599620,29749456,12172924,16136752,15264020 }, + { -10349955,-14680563,-8211979,2330220,-17662549,-14545780,10658213,6671822,19012087,3772772 }, + { 3753511,-3421066,10617074,2028709,14841030,-6721664,28718732,-15762884,20527771,12988982 }, + }, + { + { -14822485,-5797269,-3707987,12689773,-898983,-10914866,-24183046,-10564943,3299665,-12424953 }, + { -16777703,-15253301,-9642417,4978983,3308785,8755439,6943197,6461331,-25583147,8991218 }, + { -17226263,1816362,-1673288,-6086439,31783888,-8175991,-32948145,7417950,-30242287,1507265 }, + }, + { + { 29692663,6829891,-10498800,4334896,20945975,-11906496,-28887608,8209391,14606362,-10647073 }, + { -3481570,8707081,32188102,5672294,22096700,1711240,-33020695,9761487,4170404,-2085325 }, + { -11587470,14855945,-4127778,-1531857,-26649089,15084046,22186522,16002000,-14276837,-8400798 }, + }, + { + { -4811456,13761029,-31703877,-2483919,-3312471,7869047,-7113572,-9620092,13240845,10965870 }, + { -7742563,-8256762,-14768334,-13656260,-23232383,12387166,4498947,14147411,29514390,4302863 }, + { -13413405,-12407859,20757302,-13801832,14785143,8976368,-5061276,-2144373,17846988,-13971927 }, + }, + }, + { + { + { -2244452,-754728,-4597030,-1066309,-6247172,1455299,-21647728,-9214789,-5222701,12650267 }, + { -9906797,-16070310,21134160,12198166,-27064575,708126,387813,13770293,-19134326,10958663 }, + { 22470984,12369526,23446014,-5441109,-21520802,-9698723,-11772496,-11574455,-25083830,4271862 }, + }, + { + { -25169565,-10053642,-19909332,15361595,-5984358,2159192,75375,-4278529,-32526221,8469673 }, + { 15854970,4148314,-8893890,7259002,11666551,13824734,-30531198,2697372,24154791,-9460943 }, + { 15446137,-15806644,29759747,14019369,30811221,-9610191,-31582008,12840104,24913809,9815020 }, + }, + { + { -4709286,-5614269,-31841498,-12288893,-14443537,10799414,-9103676,13438769,18735128,9466238 }, + { 11933045,9281483,5081055,-5183824,-2628162,-4905629,-7727821,-10896103,-22728655,16199064 }, + { 14576810,379472,-26786533,-8317236,-29426508,-10812974,-102766,1876699,30801119,2164795 }, + }, + { + { 15995086,3199873,13672555,13712240,-19378835,-4647646,-13081610,-15496269,-13492807,1268052 }, + { -10290614,-3659039,-3286592,10948818,23037027,3794475,-3470338,-12600221,-17055369,3565904 }, + { 29210088,-9419337,-5919792,-4952785,10834811,-13327726,-16512102,-10820713,-27162222,-14030531 }, + }, + { + { -13161890,15508588,16663704,-8156150,-28349942,9019123,-29183421,-3769423,2244111,-14001979 }, + { -5152875,-3800936,-9306475,-6071583,16243069,14684434,-25673088,-16180800,13491506,4641841 }, + { 10813417,643330,-19188515,-728916,30292062,-16600078,27548447,-7721242,14476989,-12767431 }, + }, + { + { 10292079,9984945,6481436,8279905,-7251514,7032743,27282937,-1644259,-27912810,12651324 }, + { -31185513,-813383,22271204,11835308,10201545,15351028,17099662,3988035,21721536,-3148940 }, + { 10202177,-6545839,-31373232,-9574638,-32150642,-8119683,-12906320,3852694,13216206,14842320 }, + }, + { + { -15815640,-10601066,-6538952,-7258995,-6984659,-6581778,-31500847,13765824,-27434397,9900184 }, + { 14465505,-13833331,-32133984,-14738873,-27443187,12990492,33046193,15796406,-7051866,-8040114 }, + { 30924417,-8279620,6359016,-12816335,16508377,9071735,-25488601,15413635,9524356,-7018878 }, + }, + { + { 12274201,-13175547,32627641,-1785326,6736625,13267305,5237659,-5109483,15663516,4035784 }, + { -2951309,8903985,17349946,601635,-16432815,-4612556,-13732739,-15889334,-22258478,4659091 }, + { -16916263,-4952973,-30393711,-15158821,20774812,15897498,5736189,15026997,-2178256,-13455585 }, + }, + }, + { + { + { -8858980,-2219056,28571666,-10155518,-474467,-10105698,-3801496,278095,23440562,-290208 }, + { 10226241,-5928702,15139956,120818,-14867693,5218603,32937275,11551483,-16571960,-7442864 }, + { 17932739,-12437276,-24039557,10749060,11316803,7535897,22503767,5561594,-3646624,3898661 }, + }, + { + { 7749907,-969567,-16339731,-16464,-25018111,15122143,-1573531,7152530,21831162,1245233 }, + { 26958459,-14658026,4314586,8346991,-5677764,11960072,-32589295,-620035,-30402091,-16716212 }, + { -12165896,9166947,33491384,13673479,29787085,13096535,6280834,14587357,-22338025,13987525 }, + }, + { + { -24349909,7778775,21116000,15572597,-4833266,-5357778,-4300898,-5124639,-7469781,-2858068 }, + { 9681908,-6737123,-31951644,13591838,-6883821,386950,31622781,6439245,-14581012,4091397 }, + { -8426427,1470727,-28109679,-1596990,3978627,-5123623,-19622683,12092163,29077877,-14741988 }, + }, + { + { 5269168,-6859726,-13230211,-8020715,25932563,1763552,-5606110,-5505881,-20017847,2357889 }, + { 32264008,-15407652,-5387735,-1160093,-2091322,-3946900,23104804,-12869908,5727338,189038 }, + { 14609123,-8954470,-6000566,-16622781,-14577387,-7743898,-26745169,10942115,-25888931,-14884697 }, + }, + { + { 20513500,5557931,-15604613,7829531,26413943,-2019404,-21378968,7471781,13913677,-5137875 }, + { -25574376,11967826,29233242,12948236,-6754465,4713227,-8940970,14059180,12878652,8511905 }, + { -25656801,3393631,-2955415,-7075526,-2250709,9366908,-30223418,6812974,5568676,-3127656 }, + }, + { + { 11630004,12144454,2116339,13606037,27378885,15676917,-17408753,-13504373,-14395196,8070818 }, + { 27117696,-10007378,-31282771,-5570088,1127282,12772488,-29845906,10483306,-11552749,-1028714 }, + { 10637467,-5688064,5674781,1072708,-26343588,-6982302,-1683975,9177853,-27493162,15431203 }, + }, + { + { 20525145,10892566,-12742472,12779443,-29493034,16150075,-28240519,14943142,-15056790,-7935931 }, + { -30024462,5626926,-551567,-9981087,753598,11981191,25244767,-3239766,-3356550,9594024 }, + { -23752644,2636870,-5163910,-10103818,585134,7877383,11345683,-6492290,13352335,-10977084 }, + }, + { + { -1931799,-5407458,3304649,-12884869,17015806,-4877091,-29783850,-7752482,-13215537,-319204 }, + { 20239939,6607058,6203985,3483793,-18386976,-779229,-20723742,15077870,-22750759,14523817 }, + { 27406042,-6041657,27423596,-4497394,4996214,10002360,-28842031,-4545494,-30172742,-4805667 }, + }, + }, + { + { + { 11374242,12660715,17861383,-12540833,10935568,1099227,-13886076,-9091740,-27727044,11358504 }, + { -12730809,10311867,1510375,10778093,-2119455,-9145702,32676003,11149336,-26123651,4985768 }, + { -19096303,341147,-6197485,-239033,15756973,-8796662,-983043,13794114,-19414307,-15621255 }, + }, + { + { 6490081,11940286,25495923,-7726360,8668373,-8751316,3367603,6970005,-1691065,-9004790 }, + { 1656497,13457317,15370807,6364910,13605745,8362338,-19174622,-5475723,-16796596,-5031438 }, + { -22273315,-13524424,-64685,-4334223,-18605636,-10921968,-20571065,-7007978,-99853,-10237333 }, + }, + { + { 17747465,10039260,19368299,-4050591,-20630635,-16041286,31992683,-15857976,-29260363,-5511971 }, + { 31932027,-4986141,-19612382,16366580,22023614,88450,11371999,-3744247,4882242,-10626905 }, + { 29796507,37186,19818052,10115756,-11829032,3352736,18551198,3272828,-5190932,-4162409 }, + }, + { + { 12501286,4044383,-8612957,-13392385,-32430052,5136599,-19230378,-3529697,330070,-3659409 }, + { 6384877,2899513,17807477,7663917,-2358888,12363165,25366522,-8573892,-271295,12071499 }, + { -8365515,-4042521,25133448,-4517355,-6211027,2265927,-32769618,1936675,-5159697,3829363 }, + }, + { + { 28425966,-5835433,-577090,-4697198,-14217555,6870930,7921550,-6567787,26333140,14267664 }, + { -11067219,11871231,27385719,-10559544,-4585914,-11189312,10004786,-8709488,-21761224,8930324 }, + { -21197785,-16396035,25654216,-1725397,12282012,11008919,1541940,4757911,-26491501,-16408940 }, + }, + { + { 13537262,-7759490,-20604840,10961927,-5922820,-13218065,-13156584,6217254,-15943699,13814990 }, + { -17422573,15157790,18705543,29619,24409717,-260476,27361681,9257833,-1956526,-1776914 }, + { -25045300,-10191966,15366585,15166509,-13105086,8423556,-29171540,12361135,-18685978,4578290 }, + }, + { + { 24579768,3711570,1342322,-11180126,-27005135,14124956,-22544529,14074919,21964432,8235257 }, + { -6528613,-2411497,9442966,-5925588,12025640,-1487420,-2981514,-1669206,13006806,2355433 }, + { -16304899,-13605259,-6632427,-5142349,16974359,-10911083,27202044,1719366,1141648,-12796236 }, + }, + { + { -12863944,-13219986,-8318266,-11018091,-6810145,-4843894,13475066,-3133972,32674895,13715045 }, + { 11423335,-5468059,32344216,8962751,24989809,9241752,-13265253,16086212,-28740881,-15642093 }, + { -1409668,12530728,-6368726,10847387,19531186,-14132160,-11709148,7791794,-27245943,4383347 }, + }, + }, + { + { + { -28970898,5271447,-1266009,-9736989,-12455236,16732599,-4862407,-4906449,27193557,6245191 }, + { -15193956,5362278,-1783893,2695834,4960227,12840725,23061898,3260492,22510453,8577507 }, + { -12632451,11257346,-32692994,13548177,-721004,10879011,31168030,13952092,-29571492,-3635906 }, + }, + { + { 3877321,-9572739,32416692,5405324,-11004407,-13656635,3759769,11935320,5611860,8164018 }, + { -16275802,14667797,15906460,12155291,-22111149,-9039718,32003002,-8832289,5773085,-8422109 }, + { -23788118,-8254300,1950875,8937633,18686727,16459170,-905725,12376320,31632953,190926 }, + }, + { + { -24593607,-16138885,-8423991,13378746,14162407,6901328,-8288749,4508564,-25341555,-3627528 }, + { 8884438,-5884009,6023974,10104341,-6881569,-4941533,18722941,-14786005,-1672488,827625 }, + { -32720583,-16289296,-32503547,7101210,13354605,2659080,-1800575,-14108036,-24878478,1541286 }, + }, + { + { 2901347,-1117687,3880376,-10059388,-17620940,-3612781,-21802117,-3567481,20456845,-1885033 }, + { 27019610,12299467,-13658288,-1603234,-12861660,-4861471,-19540150,-5016058,29439641,15138866 }, + { 21536104,-6626420,-32447818,-10690208,-22408077,5175814,-5420040,-16361163,7779328,109896 }, + }, + { + { 30279744,14648750,-8044871,6425558,13639621,-743509,28698390,12180118,23177719,-554075 }, + { 26572847,3405927,-31701700,12890905,-19265668,5335866,-6493768,2378492,4439158,-13279347 }, + { -22716706,3489070,-9225266,-332753,18875722,-1140095,14819434,-12731527,-17717757,-5461437 }, + }, + { + { -5056483,16566551,15953661,3767752,-10436499,15627060,-820954,2177225,8550082,-15114165 }, + { -18473302,16596775,-381660,15663611,22860960,15585581,-27844109,-3582739,-23260460,-8428588 }, + { -32480551,15707275,-8205912,-5652081,29464558,2713815,-22725137,15860482,-21902570,1494193 }, + }, + { + { -19562091,-14087393,-25583872,-9299552,13127842,759709,21923482,16529112,8742704,12967017 }, + { -28464899,1553205,32536856,-10473729,-24691605,-406174,-8914625,-2933896,-29903758,15553883 }, + { 21877909,3230008,9881174,10539357,-4797115,2841332,11543572,14513274,19375923,-12647961 }, + }, + { + { 8832269,-14495485,13253511,5137575,5037871,4078777,24880818,-6222716,2862653,9455043 }, + { 29306751,5123106,20245049,-14149889,9592566,8447059,-2077124,-2990080,15511449,4789663 }, + { -20679756,7004547,8824831,-9434977,-4045704,-3750736,-5754762,108893,23513200,16652362 }, + }, + }, + { + { + { -33256173,4144782,-4476029,-6579123,10770039,-7155542,-6650416,-12936300,-18319198,10212860 }, + { 2756081,8598110,7383731,-6859892,22312759,-1105012,21179801,2600940,-9988298,-12506466 }, + { -24645692,13317462,-30449259,-15653928,21365574,-10869657,11344424,864440,-2499677,-16710063 }, + }, + { + { -26432803,6148329,-17184412,-14474154,18782929,-275997,-22561534,211300,2719757,4940997 }, + { -1323882,3911313,-6948744,14759765,-30027150,7851207,21690126,8518463,26699843,5276295 }, + { -13149873,-6429067,9396249,365013,24703301,-10488939,1321586,149635,-15452774,7159369 }, + }, + { + { 9987780,-3404759,17507962,9505530,9731535,-2165514,22356009,8312176,22477218,-8403385 }, + { 18155857,-16504990,19744716,9006923,15154154,-10538976,24256460,-4864995,-22548173,9334109 }, + { 2986088,-4911893,10776628,-3473844,10620590,-7083203,-21413845,14253545,-22587149,536906 }, + }, + { + { 4377756,8115836,24567078,15495314,11625074,13064599,7390551,10589625,10838060,-15420424 }, + { -19342404,867880,9277171,-3218459,-14431572,-1986443,19295826,-15796950,6378260,699185 }, + { 7895026,4057113,-7081772,-13077756,-17886831,-323126,-716039,15693155,-5045064,-13373962 }, + }, + { + { -7737563,-5869402,-14566319,-7406919,11385654,13201616,31730678,-10962840,-3918636,-9669325 }, + { 10188286,-15770834,-7336361,13427543,22223443,14896287,30743455,7116568,-21786507,5427593 }, + { 696102,13206899,27047647,-10632082,15285305,-9853179,10798490,-4578720,19236243,12477404 }, + }, + { + { -11229439,11243796,-17054270,-8040865,-788228,-8167967,-3897669,11180504,-23169516,7733644 }, + { 17800790,-14036179,-27000429,-11766671,23887827,3149671,23466177,-10538171,10322027,15313801 }, + { 26246234,11968874,32263343,-5468728,6830755,-13323031,-15794704,-101982,-24449242,10890804 }, + }, + { + { -31365647,10271363,-12660625,-6267268,16690207,-13062544,-14982212,16484931,25180797,-5334884 }, + { -586574,10376444,-32586414,-11286356,19801893,10997610,2276632,9482883,316878,13820577 }, + { -9882808,-4510367,-2115506,16457136,-11100081,11674996,30756178,-7515054,30696930,-3712849 }, + }, + { + { 32988917,-9603412,12499366,7910787,-10617257,-11931514,-7342816,-9985397,-32349517,7392473 }, + { -8855661,15927861,9866406,-3649411,-2396914,-16655781,-30409476,-9134995,25112947,-2926644 }, + { -2504044,-436966,25621774,-5678772,15085042,-5479877,-24884878,-13526194,5537438,-13914319 }, + }, + }, + { + { + { -11225584,2320285,-9584280,10149187,-33444663,5808648,-14876251,-1729667,31234590,6090599 }, + { -9633316,116426,26083934,2897444,-6364437,-2688086,609721,15878753,-6970405,-9034768 }, + { -27757857,247744,-15194774,-9002551,23288161,-10011936,-23869595,6503646,20650474,1804084 }, + }, + { + { -27589786,15456424,8972517,8469608,15640622,4439847,3121995,-10329713,27842616,-202328 }, + { -15306973,2839644,22530074,10026331,4602058,5048462,28248656,5031932,-11375082,12714369 }, + { 20807691,-7270825,29286141,11421711,-27876523,-13868230,-21227475,1035546,-19733229,12796920 }, + }, + { + { 12076899,-14301286,-8785001,-11848922,-25012791,16400684,-17591495,-12899438,3480665,-15182815 }, + { -32361549,5457597,28548107,7833186,7303070,-11953545,-24363064,-15921875,-33374054,2771025 }, + { -21389266,421932,26597266,6860826,22486084,-6737172,-17137485,-4210226,-24552282,15673397 }, + }, + { + { -20184622,2338216,19788685,-9620956,-4001265,-8740893,-20271184,4733254,3727144,-12934448 }, + { 6120119,814863,-11794402,-622716,6812205,-15747771,2019594,7975683,31123697,-10958981 }, + { 30069250,-11435332,30434654,2958439,18399564,-976289,12296869,9204260,-16432438,9648165 }, + }, + { + { 32705432,-1550977,30705658,7451065,-11805606,9631813,3305266,5248604,-26008332,-11377501 }, + { 17219865,2375039,-31570947,-5575615,-19459679,9219903,294711,15298639,2662509,-16297073 }, + { -1172927,-7558695,-4366770,-4287744,-21346413,-8434326,32087529,-1222777,32247248,-14389861 }, + }, + { + { 14312628,1221556,17395390,-8700143,-4945741,-8684635,-28197744,-9637817,-16027623,-13378845 }, + { -1428825,-9678990,-9235681,6549687,-7383069,-468664,23046502,9803137,17597934,2346211 }, + { 18510800,15337574,26171504,981392,-22241552,7827556,-23491134,-11323352,3059833,-11782870 }, + }, + { + { 10141598,6082907,17829293,-1947643,9830092,13613136,-25556636,-5544586,-33502212,3592096 }, + { 33114168,-15889352,-26525686,-13343397,33076705,8716171,1151462,1521897,-982665,-6837803 }, + { -32939165,-4255815,23947181,-324178,-33072974,-12305637,-16637686,3891704,26353178,693168 }, + }, + { + { 30374239,1595580,-16884039,13186931,4600344,406904,9585294,-400668,31375464,14369965 }, + { -14370654,-7772529,1510301,6434173,-18784789,-6262728,32732230,-13108839,17901441,16011505 }, + { 18171223,-11934626,-12500402,15197122,-11038147,-15230035,-19172240,-16046376,8764035,12309598 }, + }, + }, + { + { + { 5975908,-5243188,-19459362,-9681747,-11541277,14015782,-23665757,1228319,17544096,-10593782 }, + { 5811932,-1715293,3442887,-2269310,-18367348,-8359541,-18044043,-15410127,-5565381,12348900 }, + { -31399660,11407555,25755363,6891399,-3256938,14872274,-24849353,8141295,-10632534,-585479 }, + }, + { + { -12675304,694026,-5076145,13300344,14015258,-14451394,-9698672,-11329050,30944593,1130208 }, + { 8247766,-6710942,-26562381,-7709309,-14401939,-14648910,4652152,2488540,23550156,-271232 }, + { 17294316,-3788438,7026748,15626851,22990044,113481,2267737,-5908146,-408818,-137719 }, + }, + { + { 16091085,-16253926,18599252,7340678,2137637,-1221657,-3364161,14550936,3260525,-7166271 }, + { -4910104,-13332887,18550887,10864893,-16459325,-7291596,-23028869,-13204905,-12748722,2701326 }, + { -8574695,16099415,4629974,-16340524,-20786213,-6005432,-10018363,9276971,11329923,1862132 }, + }, + { + { 14763076,-15903608,-30918270,3689867,3511892,10313526,-21951088,12219231,-9037963,-940300 }, + { 8894987,-3446094,6150753,3013931,301220,15693451,-31981216,-2909717,-15438168,11595570 }, + { 15214962,3537601,-26238722,-14058872,4418657,-15230761,13947276,10730794,-13489462,-4363670 }, + }, + { + { -2538306,7682793,32759013,263109,-29984731,-7955452,-22332124,-10188635,977108,699994 }, + { -12466472,4195084,-9211532,550904,-15565337,12917920,19118110,-439841,-30534533,-14337913 }, + { 31788461,-14507657,4799989,7372237,8808585,-14747943,9408237,-10051775,12493932,-5409317 }, + }, + { + { -25680606,5260744,-19235809,-6284470,-3695942,16566087,27218280,2607121,29375955,6024730 }, + { 842132,-2794693,-4763381,-8722815,26332018,-12405641,11831880,6985184,-9940361,2854096 }, + { -4847262,-7969331,2516242,-5847713,9695691,-7221186,16512645,960770,12121869,16648078 }, + }, + { + { -15218652,14667096,-13336229,2013717,30598287,-464137,-31504922,-7882064,20237806,2838411 }, + { -19288047,4453152,15298546,-16178388,22115043,-15972604,12544294,-13470457,1068881,-12499905 }, + { -9558883,-16518835,33238498,13506958,30505848,-1114596,-8486907,-2630053,12521378,4845654 }, + }, + { + { -28198521,10744108,-2958380,10199664,7759311,-13088600,3409348,-873400,-6482306,-12885870 }, + { -23561822,6230156,-20382013,10655314,-24040585,-11621172,10477734,-1240216,-3113227,13974498 }, + { 12966261,15550616,-32038948,-1615346,21025980,-629444,5642325,7188737,18895762,12629579 }, + }, + }, + { + { + { 14741879,-14946887,22177208,-11721237,1279741,8058600,11758140,789443,32195181,3895677 }, + { 10758205,15755439,-4509950,9243698,-4879422,6879879,-2204575,-3566119,-8982069,4429647 }, + { -2453894,15725973,-20436342,-10410672,-5803908,-11040220,-7135870,-11642895,18047436,-15281743 }, + }, + { + { -25173001,-11307165,29759956,11776784,-22262383,-15820455,10993114,-12850837,-17620701,-9408468 }, + { 21987233,700364,-24505048,14972008,-7774265,-5718395,32155026,2581431,-29958985,8773375 }, + { -25568350,454463,-13211935,16126715,25240068,8594567,20656846,12017935,-7874389,-13920155 }, + }, + { + { 6028182,6263078,-31011806,-11301710,-818919,2461772,-31841174,-5468042,-1721788,-2776725 }, + { -12278994,16624277,987579,-5922598,32908203,1248608,7719845,-4166698,28408820,6816612 }, + { -10358094,-8237829,19549651,-12169222,22082623,16147817,20613181,13982702,-10339570,5067943 }, + }, + { + { -30505967,-3821767,12074681,13582412,-19877972,2443951,-19719286,12746132,5331210,-10105944 }, + { 30528811,3601899,-1957090,4619785,-27361822,-15436388,24180793,-12570394,27679908,-1648928 }, + { 9402404,-13957065,32834043,10838634,-26580150,-13237195,26653274,-8685565,22611444,-12715406 }, + }, + { + { 22190590,1118029,22736441,15130463,-30460692,-5991321,19189625,-4648942,4854859,6622139 }, + { -8310738,-2953450,-8262579,-3388049,-10401731,-271929,13424426,-3567227,26404409,13001963 }, + { -31241838,-15415700,-2994250,8939346,11562230,-12840670,-26064365,-11621720,-15405155,11020693 }, + }, + { + { 1866042,-7949489,-7898649,-10301010,12483315,13477547,3175636,-12424163,28761762,1406734 }, + { -448555,-1777666,13018551,3194501,-9580420,-11161737,24760585,-4347088,25577411,-13378680 }, + { -24290378,4759345,-690653,-1852816,2066747,10693769,-29595790,9884936,-9368926,4745410 }, + }, + { + { -9141284,6049714,-19531061,-4341411,-31260798,9944276,-15462008,-11311852,10931924,-11931931 }, + { -16561513,14112680,-8012645,4817318,-8040464,-11414606,-22853429,10856641,-20470770,13434654 }, + { 22759489,-10073434,-16766264,-1871422,13637442,-10168091,1765144,-12654326,28445307,-5364710 }, + }, + { + { 29875063,12493613,2795536,-3786330,1710620,15181182,-10195717,-8788675,9074234,1167180 }, + { -26205683,11014233,-9842651,-2635485,-26908120,7532294,-18716888,-9535498,3843903,9367684 }, + { -10969595,-6403711,9591134,9582310,11349256,108879,16235123,8601684,-139197,4242895 }, + }, + }, + { + { + { 22092954,-13191123,-2042793,-11968512,32186753,-11517388,-6574341,2470660,-27417366,16625501 }, + { -11057722,3042016,13770083,-9257922,584236,-544855,-7770857,2602725,-27351616,14247413 }, + { 6314175,-10264892,-32772502,15957557,-10157730,168750,-8618807,14290061,27108877,-1180880 }, + }, + { + { -8586597,-7170966,13241782,10960156,-32991015,-13794596,33547976,-11058889,-27148451,981874 }, + { 22833440,9293594,-32649448,-13618667,-9136966,14756819,-22928859,-13970780,-10479804,-16197962 }, + { -7768587,3326786,-28111797,10783824,19178761,14905060,22680049,13906969,-15933690,3797899 }, + }, + { + { 21721356,-4212746,-12206123,9310182,-3882239,-13653110,23740224,-2709232,20491983,-8042152 }, + { 9209270,-15135055,-13256557,-6167798,-731016,15289673,25947805,15286587,30997318,-6703063 }, + { 7392032,16618386,23946583,-8039892,-13265164,-1533858,-14197445,-2321576,17649998,-250080 }, + }, + { + { -9301088,-14193827,30609526,-3049543,-25175069,-1283752,-15241566,-9525724,-2233253,7662146 }, + { -17558673,1763594,-33114336,15908610,-30040870,-12174295,7335080,-8472199,-3174674,3440183 }, + { -19889700,-5977008,-24111293,-9688870,10799743,-16571957,40450,-4431835,4862400,1133 }, + }, + { + { -32856209,-7873957,-5422389,14860950,-16319031,7956142,7258061,311861,-30594991,-7379421 }, + { -3773428,-1565936,28985340,7499440,24445838,9325937,29727763,16527196,18278453,15405622 }, + { -4381906,8508652,-19898366,-3674424,-5984453,15149970,-13313598,843523,-21875062,13626197 }, + }, + { + { 2281448,-13487055,-10915418,-2609910,1879358,16164207,-10783882,3953792,13340839,15928663 }, + { 31727126,-7179855,-18437503,-8283652,2875793,-16390330,-25269894,-7014826,-23452306,5964753 }, + { 4100420,-5959452,-17179337,6017714,-18705837,12227141,-26684835,11344144,2538215,-7570755 }, + }, + { + { -9433605,6123113,11159803,-2156608,30016280,14966241,-20474983,1485421,-629256,-15958862 }, + { -26804558,4260919,11851389,9658551,-32017107,16367492,-20205425,-13191288,11659922,-11115118 }, + { 26180396,10015009,-30844224,-8581293,5418197,9480663,2231568,-10170080,33100372,-1306171 }, + }, + { + { 15121113,-5201871,-10389905,15427821,-27509937,-15992507,21670947,4486675,-5931810,-14466380 }, + { 16166486,-9483733,-11104130,6023908,-31926798,-1364923,2340060,-16254968,-10735770,-10039824 }, + { 28042865,-3557089,-12126526,12259706,-3717498,-6945899,6766453,-8689599,18036436,5803270 }, + }, + }, + { + { + { -817581,6763912,11803561,1585585,10958447,-2671165,23855391,4598332,-6159431,-14117438 }, + { -31031306,-14256194,17332029,-2383520,31312682,-5967183,696309,50292,-20095739,11763584 }, + { -594563,-2514283,-32234153,12643980,12650761,14811489,665117,-12613632,-19773211,-10713562 }, + }, + { + { 30464590,-11262872,-4127476,-12734478,19835327,-7105613,-24396175,2075773,-17020157,992471 }, + { 18357185,-6994433,7766382,16342475,-29324918,411174,14578841,8080033,-11574335,-10601610 }, + { 19598397,10334610,12555054,2555664,18821899,-10339780,21873263,16014234,26224780,16452269 }, + }, + { + { -30223925,5145196,5944548,16385966,3976735,2009897,-11377804,-7618186,-20533829,3698650 }, + { 14187449,3448569,-10636236,-10810935,-22663880,-3433596,7268410,-10890444,27394301,12015369 }, + { 19695761,16087646,28032085,12999827,6817792,11427614,20244189,-1312777,-13259127,-3402461 }, + }, + { + { 30860103,12735208,-1888245,-4699734,-16974906,2256940,-8166013,12298312,-8550524,-10393462 }, + { -5719826,-11245325,-1910649,15569035,26642876,-7587760,-5789354,-15118654,-4976164,12651793 }, + { -2848395,9953421,11531313,-5282879,26895123,-12697089,-13118820,-16517902,9768698,-2533218 }, + }, + { + { -24719459,1894651,-287698,-4704085,15348719,-8156530,32767513,12765450,4940095,10678226 }, + { 18860224,15980149,-18987240,-1562570,-26233012,-11071856,-7843882,13944024,-24372348,16582019 }, + { -15504260,4970268,-29893044,4175593,-20993212,-2199756,-11704054,15444560,-11003761,7989037 }, + }, + { + { 31490452,5568061,-2412803,2182383,-32336847,4531686,-32078269,6200206,-19686113,-14800171 }, + { -17308668,-15879940,-31522777,-2831,-32887382,16375549,8680158,-16371713,28550068,-6857132 }, + { -28126887,-5688091,16837845,-1820458,-6850681,12700016,-30039981,4364038,1155602,5988841 }, + }, + { + { 21890435,-13272907,-12624011,12154349,-7831873,15300496,23148983,-4470481,24618407,8283181 }, + { -33136107,-10512751,9975416,6841041,-31559793,16356536,3070187,-7025928,1466169,10740210 }, + { -1509399,-15488185,-13503385,-10655916,32799044,909394,-13938903,-5779719,-32164649,-15327040 }, + }, + { + { 3960823,-14267803,-28026090,-15918051,-19404858,13146868,15567327,951507,-3260321,-573935 }, + { 24740841,5052253,-30094131,8961361,25877428,6165135,-24368180,14397372,-7380369,-6144105 }, + { -28888365,3510803,-28103278,-1158478,-11238128,-10631454,-15441463,-14453128,-1625486,-6494814 }, + }, + }, + { + { + { 793299,-9230478,8836302,-6235707,-27360908,-2369593,33152843,-4885251,-9906200,-621852 }, + { 5666233,525582,20782575,-8038419,-24538499,14657740,16099374,1468826,-6171428,-15186581 }, + { -4859255,-3779343,-2917758,-6748019,7778750,11688288,-30404353,-9871238,-1558923,-9863646 }, + }, + { + { 10896332,-7719704,824275,472601,-19460308,3009587,25248958,14783338,-30581476,-15757844 }, + { 10566929,12612572,-31944212,11118703,-12633376,12362879,21752402,8822496,24003793,14264025 }, + { 27713862,-7355973,-11008240,9227530,27050101,2504721,23886875,-13117525,13958495,-5732453 }, + }, + { + { -23481610,4867226,-27247128,3900521,29838369,-8212291,-31889399,-10041781,7340521,-15410068 }, + { 4646514,-8011124,-22766023,-11532654,23184553,8566613,31366726,-1381061,-15066784,-10375192 }, + { -17270517,12723032,-16993061,14878794,21619651,-6197576,27584817,3093888,-8843694,3849921 }, + }, + { + { -9064912,2103172,25561640,-15125738,-5239824,9582958,32477045,-9017955,5002294,-15550259 }, + { -12057553,-11177906,21115585,-13365155,8808712,-12030708,16489530,13378448,-25845716,12741426 }, + { -5946367,10645103,-30911586,15390284,-3286982,-7118677,24306472,15852464,28834118,-7646072 }, + }, + { + { -17335748,-9107057,-24531279,9434953,-8472084,-583362,-13090771,455841,20461858,5491305 }, + { 13669248,-16095482,-12481974,-10203039,-14569770,-11893198,-24995986,11293807,-28588204,-9421832 }, + { 28497928,6272777,-33022994,14470570,8906179,-1225630,18504674,-14165166,29867745,-8795943 }, + }, + { + { -16207023,13517196,-27799630,-13697798,24009064,-6373891,-6367600,-13175392,22853429,-4012011 }, + { 24191378,16712145,-13931797,15217831,14542237,1646131,18603514,-11037887,12876623,-2112447 }, + { 17902668,4518229,-411702,-2829247,26878217,5258055,-12860753,608397,16031844,3723494 }, + }, + { + { -28632773,12763728,-20446446,7577504,33001348,-13017745,17558842,-7872890,23896954,-4314245 }, + { -20005381,-12011952,31520464,605201,2543521,5991821,-2945064,7229064,-9919646,-8826859 }, + { 28816045,298879,-28165016,-15920938,19000928,-1665890,-12680833,-2949325,-18051778,-2082915 }, + }, + { + { 16000882,-344896,3493092,-11447198,-29504595,-13159789,12577740,16041268,-19715240,7847707 }, + { 10151868,10572098,27312476,7922682,14825339,4723128,-32855931,-6519018,-10020567,3852848 }, + { -11430470,15697596,-21121557,-4420647,5386314,15063598,16514493,-15932110,29330899,-15076224 }, + }, + }, + { + { + { -25499735,-4378794,-15222908,-6901211,16615731,2051784,3303702,15490,-27548796,12314391 }, + { 15683520,-6003043,18109120,-9980648,15337968,-5997823,-16717435,15921866,16103996,-3731215 }, + { -23169824,-10781249,13588192,-1628807,-3798557,-1074929,-19273607,5402699,-29815713,-9841101 }, + }, + { + { 23190676,2384583,-32714340,3462154,-29903655,-1529132,-11266856,8911517,-25205859,2739713 }, + { 21374101,-3554250,-33524649,9874411,15377179,11831242,-33529904,6134907,4931255,11987849 }, + { -7732,-2978858,-16223486,7277597,105524,-322051,-31480539,13861388,-30076310,10117930 }, + }, + { + { -29501170,-10744872,-26163768,13051539,-25625564,5089643,-6325503,6704079,12890019,15728940 }, + { -21972360,-11771379,-951059,-4418840,14704840,2695116,903376,-10428139,12885167,8311031 }, + { -17516482,5352194,10384213,-13811658,7506451,13453191,26423267,4384730,1888765,-5435404 }, + }, + { + { -25817338,-3107312,-13494599,-3182506,30896459,-13921729,-32251644,-12707869,-19464434,-3340243 }, + { -23607977,-2665774,-526091,4651136,5765089,4618330,6092245,14845197,17151279,-9854116 }, + { -24830458,-12733720,-15165978,10367250,-29530908,-265356,22825805,-7087279,-16866484,16176525 }, + }, + { + { -23583256,6564961,20063689,3798228,-4740178,7359225,2006182,-10363426,-28746253,-10197509 }, + { -10626600,-4486402,-13320562,-5125317,3432136,-6393229,23632037,-1940610,32808310,1099883 }, + { 15030977,5768825,-27451236,-2887299,-6427378,-15361371,-15277896,-6809350,2051441,-15225865 }, + }, + { + { -3362323,-7239372,7517890,9824992,23555850,295369,5148398,-14154188,-22686354,16633660 }, + { 4577086,-16752288,13249841,-15304328,19958763,-14537274,18559670,-10759549,8402478,-9864273 }, + { -28406330,-1051581,-26790155,-907698,-17212414,-11030789,9453451,-14980072,17983010,9967138 }, + }, + { + { -25762494,6524722,26585488,9969270,24709298,1220360,-1677990,7806337,17507396,3651560 }, + { -10420457,-4118111,14584639,15971087,-15768321,8861010,26556809,-5574557,-18553322,-11357135 }, + { 2839101,14284142,4029895,3472686,14402957,12689363,-26642121,8459447,-5605463,-7621941 }, + }, + { + { -4839289,-3535444,9744961,2871048,25113978,3187018,-25110813,-849066,17258084,-7977739 }, + { 18164541,-10595176,-17154882,-1542417,19237078,-9745295,23357533,-15217008,26908270,12150756 }, + { -30264870,-7647865,5112249,-7036672,-1499807,-6974257,43168,-5537701,-32302074,16215819 }, + }, + }, + { + { + { -6898905,9824394,-12304779,-4401089,-31397141,-6276835,32574489,12532905,-7503072,-8675347 }, + { -27343522,-16515468,-27151524,-10722951,946346,16291093,254968,7168080,21676107,-1943028 }, + { 21260961,-8424752,-16831886,-11920822,-23677961,3968121,-3651949,-6215466,-3556191,-7913075 }, + }, + { + { 16544754,13250366,-16804428,15546242,-4583003,12757258,-2462308,-8680336,-18907032,-9662799 }, + { -2415239,-15577728,18312303,4964443,-15272530,-12653564,26820651,16690659,25459437,-4564609 }, + { -25144690,11425020,28423002,-11020557,-6144921,-15826224,9142795,-2391602,-6432418,-1644817 }, + }, + { + { -23104652,6253476,16964147,-3768872,-25113972,-12296437,-27457225,-16344658,6335692,7249989 }, + { -30333227,13979675,7503222,-12368314,-11956721,-4621693,-30272269,2682242,25993170,-12478523 }, + { 4364628,5930691,32304656,-10044554,-8054781,15091131,22857016,-10598955,31820368,15075278 }, + }, + { + { 31879134,-8918693,17258761,90626,-8041836,-4917709,24162788,-9650886,-17970238,12833045 }, + { 19073683,14851414,-24403169,-11860168,7625278,11091125,-19619190,2074449,-9413939,14905377 }, + { 24483667,-11935567,-2518866,-11547418,-1553130,15355506,-25282080,9253129,27628530,-7555480 }, + }, + { + { 17597607,8340603,19355617,552187,26198470,-3176583,4593324,-9157582,-14110875,15297016 }, + { 510886,14337390,-31785257,16638632,6328095,2713355,-20217417,-11864220,8683221,2921426 }, + { 18606791,11874196,27155355,-5281482,-24031742,6265446,-25178240,-1278924,4674690,13890525 }, + }, + { + { 13609624,13069022,-27372361,-13055908,24360586,9592974,14977157,9835105,4389687,288396 }, + { 9922506,-519394,13613107,5883594,-18758345,-434263,-12304062,8317628,23388070,16052080 }, + { 12720016,11937594,-31970060,-5028689,26900120,8561328,-20155687,-11632979,-14754271,-10812892 }, + }, + { + { 15961858,14150409,26716931,-665832,-22794328,13603569,11829573,7467844,-28822128,929275 }, + { 11038231,-11582396,-27310482,-7316562,-10498527,-16307831,-23479533,-9371869,-21393143,2465074 }, + { 20017163,-4323226,27915242,1529148,12396362,15675764,13817261,-9658066,2463391,-4622140 }, + }, + { + { -16358878,-12663911,-12065183,4996454,-1256422,1073572,9583558,12851107,4003896,12673717 }, + { -1731589,-15155870,-3262930,16143082,19294135,13385325,14741514,-9103726,7903886,2348101 }, + { 24536016,-16515207,12715592,-3862155,1511293,10047386,-3842346,-7129159,-28377538,10048127 }, + }, + }, + { + { + { -12622226,-6204820,30718825,2591312,-10617028,12192840,18873298,-7297090,-32297756,15221632 }, + { -26478122,-11103864,11546244,-1852483,9180880,7656409,-21343950,2095755,29769758,6593415 }, + { -31994208,-2907461,4176912,3264766,12538965,-868111,26312345,-6118678,30958054,8292160 }, + }, + { + { 31429822,-13959116,29173532,15632448,12174511,-2760094,32808831,3977186,26143136,-3148876 }, + { 22648901,1402143,-22799984,13746059,7936347,365344,-8668633,-1674433,-3758243,-2304625 }, + { -15491917,8012313,-2514730,-12702462,-23965846,-10254029,-1612713,-1535569,-16664475,8194478 }, + }, + { + { 27338066,-7507420,-7414224,10140405,-19026427,-6589889,27277191,8855376,28572286,3005164 }, + { 26287124,4821776,25476601,-4145903,-3764513,-15788984,-18008582,1182479,-26094821,-13079595 }, + { -7171154,3178080,23970071,6201893,-17195577,-4489192,-21876275,-13982627,32208683,-1198248 }, + }, + { + { -16657702,2817643,-10286362,14811298,6024667,13349505,-27315504,-10497842,-27672585,-11539858 }, + { 15941029,-9405932,-21367050,8062055,31876073,-238629,-15278393,-1444429,15397331,-4130193 }, + { 8934485,-13485467,-23286397,-13423241,-32446090,14047986,31170398,-1441021,-27505566,15087184 }, + }, + { + { -18357243,-2156491,24524913,-16677868,15520427,-6360776,-15502406,11461896,16788528,-5868942 }, + { -1947386,16013773,21750665,3714552,-17401782,-16055433,-3770287,-10323320,31322514,-11615635 }, + { 21426655,-5650218,-13648287,-5347537,-28812189,-4920970,-18275391,-14621414,13040862,-12112948 }, + }, + { + { 11293895,12478086,-27136401,15083750,-29307421,14748872,14555558,-13417103,1613711,4896935 }, + { -25894883,15323294,-8489791,-8057900,25967126,-13425460,2825960,-4897045,-23971776,-11267415 }, + { -15924766,-5229880,-17443532,6410664,3622847,10243618,20615400,12405433,-23753030,-8436416 }, + }, + { + { -7091295,12556208,-20191352,9025187,-17072479,4333801,4378436,2432030,23097949,-566018 }, + { 4565804,-16025654,20084412,-7842817,1724999,189254,24767264,10103221,-18512313,2424778 }, + { 366633,-11976806,8173090,-6890119,30788634,5745705,-7168678,1344109,-3642553,12412659 }, + }, + { + { -24001791,7690286,14929416,-168257,-32210835,-13412986,24162697,-15326504,-3141501,11179385 }, + { 18289522,-14724954,8056945,16430056,-21729724,7842514,-6001441,-1486897,-18684645,-11443503 }, + { 476239,6601091,-6152790,-9723375,17503545,-4863900,27672959,13403813,11052904,5219329 }, + }, + }, + { + { + { 20678546,-8375738,-32671898,8849123,-5009758,14574752,31186971,-3973730,9014762,-8579056 }, + { -13644050,-10350239,-15962508,5075808,-1514661,-11534600,-33102500,9160280,8473550,-3256838 }, + { 24900749,14435722,17209120,-15292541,-22592275,9878983,-7689309,-16335821,-24568481,11788948 }, + }, + { + { -3118155,-11395194,-13802089,14797441,9652448,-6845904,-20037437,10410733,-24568470,-1458691 }, + { -15659161,16736706,-22467150,10215878,-9097177,7563911,11871841,-12505194,-18513325,8464118 }, + { -23400612,8348507,-14585951,-861714,-3950205,-6373419,14325289,8628612,33313881,-8370517 }, + }, + { + { -20186973,-4967935,22367356,5271547,-1097117,-4788838,-24805667,-10236854,-8940735,-5818269 }, + { -6948785,-1795212,-32625683,-16021179,32635414,-7374245,15989197,-12838188,28358192,-4253904 }, + { -23561781,-2799059,-32351682,-1661963,-9147719,10429267,-16637684,4072016,-5351664,5596589 }, + }, + { + { -28236598,-3390048,12312896,6213178,3117142,16078565,29266239,2557221,1768301,15373193 }, + { -7243358,-3246960,-4593467,-7553353,-127927,-912245,-1090902,-4504991,-24660491,3442910 }, + { -30210571,5124043,14181784,8197961,18964734,-11939093,22597931,7176455,-18585478,13365930 }, + }, + { + { -7877390,-1499958,8324673,4690079,6261860,890446,24538107,-8570186,-9689599,-3031667 }, + { 25008904,-10771599,-4305031,-9638010,16265036,15721635,683793,-11823784,15723479,-15163481 }, + { -9660625,12374379,-27006999,-7026148,-7724114,-12314514,11879682,5400171,519526,-1235876 }, + }, + { + { 22258397,-16332233,-7869817,14613016,-22520255,-2950923,-20353881,7315967,16648397,7605640 }, + { -8081308,-8464597,-8223311,9719710,19259459,-15348212,23994942,-5281555,-9468848,4763278 }, + { -21699244,9220969,-15730624,1084137,-25476107,-2852390,31088447,-7764523,-11356529,728112 }, + }, + { + { 26047220,-11751471,-6900323,-16521798,24092068,9158119,-4273545,-12555558,-29365436,-5498272 }, + { 17510331,-322857,5854289,8403524,17133918,-3112612,-28111007,12327945,10750447,10014012 }, + { -10312768,3936952,9156313,-8897683,16498692,-994647,-27481051,-666732,3424691,7540221 }, + }, + { + { 30322361,-6964110,11361005,-4143317,7433304,4989748,-7071422,-16317219,-9244265,15258046 }, + { 13054562,-2779497,19155474,469045,-12482797,4566042,5631406,2711395,1062915,-5136345 }, + { -19240248,-11254599,-29509029,-7499965,-5835763,13005411,-6066489,12194497,32960380,1459310 }, + }, + }, + { + { + { 19852034,7027924,23669353,10020366,8586503,-6657907,394197,-6101885,18638003,-11174937 }, + { 31395534,15098109,26581030,8030562,-16527914,-5007134,9012486,-7584354,-6643087,-5442636 }, + { -9192165,-2347377,-1997099,4529534,25766844,607986,-13222,9677543,-32294889,-6456008 }, + }, + { + { -2444496,-149937,29348902,8186665,1873760,12489863,-30934579,-7839692,-7852844,-8138429 }, + { -15236356,-15433509,7766470,746860,26346930,-10221762,-27333451,10754588,-9431476,5203576 }, + { 31834314,14135496,-770007,5159118,20917671,-16768096,-7467973,-7337524,31809243,7347066 }, + }, + { + { -9606723,-11874240,20414459,13033986,13716524,-11691881,19797970,-12211255,15192876,-2087490 }, + { -12663563,-2181719,1168162,-3804809,26747877,-14138091,10609330,12694420,33473243,-13382104 }, + { 33184999,11180355,15832085,-11385430,-1633671,225884,15089336,-11023903,-6135662,14480053 }, + }, + { + { 31308717,-5619998,31030840,-1897099,15674547,-6582883,5496208,13685227,27595050,8737275 }, + { -20318852,-15150239,10933843,-16178022,8335352,-7546022,-31008351,-12610604,26498114,66511 }, + { 22644454,-8761729,-16671776,4884562,-3105614,-13559366,30540766,-4286747,-13327787,-7515095 }, + }, + { + { -28017847,9834845,18617207,-2681312,-3401956,-13307506,8205540,13585437,-17127465,15115439 }, + { 23711543,-672915,31206561,-8362711,6164647,-9709987,-33535882,-1426096,8236921,16492939 }, + { -23910559,-13515526,-26299483,-4503841,25005590,-7687270,19574902,10071562,6708380,-6222424 }, + }, + { + { 2101391,-4930054,19702731,2367575,-15427167,1047675,5301017,9328700,29955601,-11678310 }, + { 3096359,9271816,-21620864,-15521844,-14847996,-7592937,-25892142,-12635595,-9917575,6216608 }, + { -32615849,338663,-25195611,2510422,-29213566,-13820213,24822830,-6146567,-26767480,7525079 }, + }, + { + { -23066649,-13985623,16133487,-7896178,-3389565,778788,-910336,-2782495,-19386633,11994101 }, + { 21691500,-13624626,-641331,-14367021,3285881,-3483596,-25064666,9718258,-7477437,13381418 }, + { 18445390,-4202236,14979846,11622458,-1727110,-3582980,23111648,-6375247,28535282,15779576 }, + }, + { + { 30098053,3089662,-9234387,16662135,-21306940,11308411,-14068454,12021730,9955285,-16303356 }, + { 9734894,-14576830,-7473633,-9138735,2060392,11313496,-18426029,9924399,20194861,13380996 }, + { -26378102,-7965207,-22167821,15789297,-18055342,-6168792,-1984914,15707771,26342023,10146099 }, + }, + }, + { + { + { -26016874,-219943,21339191,-41388,19745256,-2878700,-29637280,2227040,21612326,-545728 }, + { -13077387,1184228,23562814,-5970442,-20351244,-6348714,25764461,12243797,-20856566,11649658 }, + { -10031494,11262626,27384172,2271902,26947504,-15997771,39944,6114064,33514190,2333242 }, + }, + { + { -21433588,-12421821,8119782,7219913,-21830522,-9016134,-6679750,-12670638,24350578,-13450001 }, + { -4116307,-11271533,-23886186,4843615,-30088339,690623,-31536088,-10406836,8317860,12352766 }, + { 18200138,-14475911,-33087759,-2696619,-23702521,-9102511,-23552096,-2287550,20712163,6719373 }, + }, + { + { 26656208,6075253,-7858556,1886072,-28344043,4262326,11117530,-3763210,26224235,-3297458 }, + { -17168938,-14854097,-3395676,-16369877,-19954045,14050420,21728352,9493610,18620611,-16428628 }, + { -13323321,13325349,11432106,5964811,18609221,6062965,-5269471,-9725556,-30701573,-16479657 }, + }, + { + { -23860538,-11233159,26961357,1640861,-32413112,-16737940,12248509,-5240639,13735342,1934062 }, + { 25089769,6742589,17081145,-13406266,21909293,-16067981,-15136294,-3765346,-21277997,5473616 }, + { 31883677,-7961101,1083432,-11572403,22828471,13290673,-7125085,12469656,29111212,-5451014 }, + }, + { + { 24244947,-15050407,-26262976,2791540,-14997599,16666678,24367466,6388839,-10295587,452383 }, + { -25640782,-3417841,5217916,16224624,19987036,-4082269,-24236251,-5915248,15766062,8407814 }, + { -20406999,13990231,15495425,16395525,5377168,15166495,-8917023,-4388953,-8067909,2276718 }, + }, + { + { 30157918,12924066,-17712050,9245753,19895028,3368142,-23827587,5096219,22740376,-7303417 }, + { 2041139,-14256350,7783687,13876377,-25946985,-13352459,24051124,13742383,-15637599,13295222 }, + { 33338237,-8505733,12532113,7977527,9106186,-1715251,-17720195,-4612972,-4451357,-14669444 }, + }, + { + { -20045281,5454097,-14346548,6447146,28862071,1883651,-2469266,-4141880,7770569,9620597 }, + { 23208068,7979712,33071466,8149229,1758231,-10834995,30945528,-1694323,-33502340,-14767970 }, + { 1439958,-16270480,-1079989,-793782,4625402,10647766,-5043801,1220118,30494170,-11440799 }, + }, + { + { -5037580,-13028295,-2970559,-3061767,15640974,-6701666,-26739026,926050,-1684339,-13333647 }, + { 13908495,-3549272,30919928,-6273825,-21521863,7989039,9021034,9078865,3353509,4033511 }, + { -29663431,-15113610,32259991,-344482,24295849,-12912123,23161163,8839127,27485041,7356032 }, + }, + }, + { + { + { 9661027,705443,11980065,-5370154,-1628543,14661173,-6346142,2625015,28431036,-16771834 }, + { -23839233,-8311415,-25945511,7480958,-17681669,-8354183,-22545972,14150565,15970762,4099461 }, + { 29262576,16756590,26350592,-8793563,8529671,-11208050,13617293,-9937143,11465739,8317062 }, + }, + { + { -25493081,-6962928,32500200,-9419051,-23038724,-2302222,14898637,3848455,20969334,-5157516 }, + { -20384450,-14347713,-18336405,13884722,-33039454,2842114,-21610826,-3649888,11177095,14989547 }, + { -24496721,-11716016,16959896,2278463,12066309,10137771,13515641,2581286,-28487508,9930240 }, + }, + { + { -17751622,-2097826,16544300,-13009300,-15914807,-14949081,18345767,-13403753,16291481,-5314038 }, + { -33229194,2553288,32678213,9875984,8534129,6889387,-9676774,6957617,4368891,9788741 }, + { 16660756,7281060,-10830758,12911820,20108584,-8101676,-21722536,-8613148,16250552,-11111103 }, + }, + { + { -19765507,2390526,-16551031,14161980,1905286,6414907,4689584,10604807,-30190403,4782747 }, + { -1354539,14736941,-7367442,-13292886,7710542,-14155590,-9981571,4383045,22546403,437323 }, + { 31665577,-12180464,-16186830,1491339,-18368625,3294682,27343084,2786261,-30633590,-14097016 }, + }, + { + { -14467279,-683715,-33374107,7448552,19294360,14334329,-19690631,2355319,-19284671,-6114373 }, + { 15121312,-15796162,6377020,-6031361,-10798111,-12957845,18952177,15496498,-29380133,11754228 }, + { -2637277,-13483075,8488727,-14303896,12728761,-1622493,7141596,11724556,22761615,-10134141 }, + }, + { + { 16918416,11729663,-18083579,3022987,-31015732,-13339659,-28741185,-12227393,32851222,11717399 }, + { 11166634,7338049,-6722523,4531520,-29468672,-7302055,31474879,3483633,-1193175,-4030831 }, + { -185635,9921305,31456609,-13536438,-12013818,13348923,33142652,6546660,-19985279,-3948376 }, + }, + { + { -32460596,11266712,-11197107,-7899103,31703694,3855903,-8537131,-12833048,-30772034,-15486313 }, + { -18006477,12709068,3991746,-6479188,-21491523,-10550425,-31135347,-16049879,10928917,3011958 }, + { -6957757,-15594337,31696059,334240,29576716,14796075,-30831056,-12805180,18008031,10258577 }, + }, + { + { -22448644,15655569,7018479,-4410003,-30314266,-1201591,-1853465,1367120,25127874,6671743 }, + { 29701166,-14373934,-10878120,9279288,-17568,13127210,21382910,11042292,25838796,4642684 }, + { -20430234,14955537,-24126347,8124619,-5369288,-5990470,30468147,-13900640,18423289,4177476 }, + }, + }, +} ; +static void select(ge_precomp *t,int pos,signed char b) +{ + ge_precomp minust; + unsigned char bnegative = negative(b); + unsigned char babs = b - (((-bnegative) & b) << 1); + ge_precomp_0(t); + ge_precomp_cmov(t,&base[pos][0],equal(babs,1)); + ge_precomp_cmov(t,&base[pos][1],equal(babs,2)); + ge_precomp_cmov(t,&base[pos][2],equal(babs,3)); + ge_precomp_cmov(t,&base[pos][3],equal(babs,4)); + ge_precomp_cmov(t,&base[pos][4],equal(babs,5)); + ge_precomp_cmov(t,&base[pos][5],equal(babs,6)); + ge_precomp_cmov(t,&base[pos][6],equal(babs,7)); + ge_precomp_cmov(t,&base[pos][7],equal(babs,8)); + fe_copy(minust.yplusx,t->yminusx); + fe_copy(minust.yminusx,t->yplusx); + fe_neg(minust.xy2d,t->xy2d); + ge_precomp_cmov(t,&minust,bnegative); +} +/* +h = a * B +where a = a[0]+256*a[1]+...+256^31 a[31] +B is the Ed25519 base point (x,4/5) with x positive. +Preconditions: + a[31] <= 127 +*/ +void ge_scalarmult_base(ge_p3 *h,const unsigned char *a) +{ + signed char e[64]; + signed char carry; + ge_p1p1 r; + ge_p2 s; + ge_precomp t; + int i; + for (i = 0; i < 32; ++i) { + e[2 * i + 0] = (a[i] >> 0) & 15; + e[2 * i + 1] = (a[i] >> 4) & 15; + } + /* each e[i] is between 0 and 15 */ + /* e[63] is between 0 and 7 */ + carry = 0; + for (i = 0; i < 63; ++i) { + e[i] += carry; + carry = e[i] + 8; + carry >>= 4; + e[i] -= carry << 4; + } + e[63] += carry; + /* each e[i] is between -8 and 8 */ + ge_p3_0(h); + for (i = 1; i < 64; i += 2) { + select(&t,i / 2,e[i]); + ge_madd(&r,h,&t); + ge_p1p1_to_p3(h,&r); + } + ge_p3_dbl(&r,h); + ge_p1p1_to_p2(&s,&r); + ge_p2_dbl(&r,&s); + ge_p1p1_to_p2(&s,&r); + ge_p2_dbl(&r,&s); + ge_p1p1_to_p2(&s,&r); + ge_p2_dbl(&r,&s); + ge_p1p1_to_p3(h,&r); + for (i = 0; i < 64; i += 2) { + select(&t,i / 2,e[i]); + ge_madd(&r,h,&t); + ge_p1p1_to_p3(h,&r); + } +} +/* +r = p - q +*/ +void ge_sub(ge_p1p1 *r,const ge_p3 *p,const ge_cached *q) +{ + fe t0; + fe_add(r->X,p->Y,p->X); + fe_sub(r->Y,p->Y,p->X); + fe_mul(r->Z,r->X,q->YminusX); + fe_mul(r->Y,r->Y,q->YplusX); + fe_mul(r->T,q->T2d,p->T); + fe_mul(r->X,p->Z,q->Z); + fe_add(t0,r->X,r->X); + fe_sub(r->X,r->Z,r->Y); + fe_add(r->Y,r->Z,r->Y); + fe_sub(r->Z,t0,r->T); + fe_add(r->T,t0,r->T); +} + +void ge_tobytes(unsigned char *s,const ge_p2 *h) +{ + fe recip; + fe x; + fe y; + + fe_invert(recip,h->Z); + fe_mul(x,h->X,recip); + fe_mul(y,h->Y,recip); + fe_tobytes(s,y); + s[31] ^= fe_isnegative(x) << 7; +} +/* + * + * xmr specific code + * + * +This code is from the original CryptoNote. +Some additional functions were needed to compute ring signatures +which are not needed for signing. +Note that sc_sub and sc_mulsub have been given their own file +since these have been rewritten + +*/ +/*Code inherited from the original cryptonote (I didn't write these) */ +/*These functions either don't exist in, or are modified from ref10*/ + + +/* From fe_isnonzero.c, modified */ + +//x +static int fe_isnonzero(const fe f) { + unsigned char s[32]; + fe_tobytes(s, f); + return (((int) (s[0] | s[1] | s[2] | s[3] | s[4] | s[5] | s[6] | s[7] | s[8] | + s[9] | s[10] | s[11] | s[12] | s[13] | s[14] | s[15] | s[16] | s[17] | + s[18] | s[19] | s[20] | s[21] | s[22] | s[23] | s[24] | s[25] | s[26] | + s[27] | s[28] | s[29] | s[30] | s[31]) - 1) >> 8) + 1; +} + +//double scalar mult precomp +void ge_dsm_precomp(ge_dsmp r, const ge_p3 *s) { + ge_p1p1 t; + ge_p3 s2, u; + ge_p3_to_cached(&r[0], s); + ge_p3_dbl(&t, s); + ge_p1p1_to_p3(&s2, &t); + ge_add(&t, &s2, &r[0]); + ge_p1p1_to_p3(&u, &t); + ge_p3_to_cached(&r[1], &u); + ge_add(&t, &s2, &r[1]); + ge_p1p1_to_p3(&u, &t); + ge_p3_to_cached(&r[2], &u); + ge_add(&t, &s2, &r[2]); + ge_p1p1_to_p3(&u, &t); + ge_p3_to_cached(&r[3], &u); + ge_add(&t, &s2, &r[3]); + ge_p1p1_to_p3(&u, &t); + ge_p3_to_cached(&r[4], &u); + ge_add(&t, &s2, &r[4]); + ge_p1p1_to_p3(&u, &t); + ge_p3_to_cached(&r[5], &u); + ge_add(&t, &s2, &r[5]); + ge_p1p1_to_p3(&u, &t); + ge_p3_to_cached(&r[6], &u); + ge_add(&t, &s2, &r[6]); + ge_p1p1_to_p3(&u, &t); + ge_p3_to_cached(&r[7], &u); +} + +/* +r = a * A + b * B +where a = a[0]+256*a[1]+...+256^31 a[31]. +and b = b[0]+256*b[1]+...+256^31 b[31]. +B is the Ed25519 base point (x,4/5) with x positive. +*/ + +void ge_double_scalarmult_base_vartime(ge_p2 *r, const unsigned char *a, const ge_p3 *A, const unsigned char *b) { + signed char aslide[256]; + signed char bslide[256]; + ge_dsmp Ai; /* A, 3A, 5A, 7A, 9A, 11A, 13A, 15A */ + ge_p1p1 t; + ge_p3 u; + int i; + + slide(aslide, a); + slide(bslide, b); + ge_dsm_precomp(Ai, A);/* A, 3A, 5A, 7A, 9A, 11A, 13A, 15A */ + + ge_p2_0(r); + + for (i = 255; i >= 0; --i) { + //so this gets us to the highest i such that both have a nonzero + if (aslide[i] || bslide[i]) break; + } + + for (; i >= 0; --i) { + ge_p2_dbl(&t, r);//simple double and add + + if (aslide[i] > 0) { + ge_p1p1_to_p3(&u, &t); + ge_add(&t, &u, &Ai[aslide[i]/2]); + } else if (aslide[i] < 0) { + ge_p1p1_to_p3(&u, &t); + ge_sub(&t, &u, &Ai[(-aslide[i])/2]); + } + + if (bslide[i] > 0) { + ge_p1p1_to_p3(&u, &t); + ge_madd(&t, &u, &ge_Bi[bslide[i]/2]); + } else if (bslide[i] < 0) { + ge_p1p1_to_p3(&u, &t); + ge_msub(&t, &u, &ge_Bi[(-bslide[i])/2]); + } + + ge_p1p1_to_p2(r, &t); + } +} + + +/* From ge_frombytes.c, modified */ +//this is like xrecover .. +//x +int ge_frombytes_vartime(ge_p3 *h, const unsigned char *s) { + fe u; + fe v; + fe vxx; + fe check; + + /* From fe_frombytes.c */ + + int64_t h0 = load_4(s); + int64_t h1 = load_3(s + 4) << 6; + int64_t h2 = load_3(s + 7) << 5; + int64_t h3 = load_3(s + 10) << 3; + int64_t h4 = load_3(s + 13) << 2; + int64_t h5 = load_4(s + 16); + int64_t h6 = load_3(s + 20) << 7; + int64_t h7 = load_3(s + 23) << 5; + int64_t h8 = load_3(s + 26) << 4; + int64_t h9 = (load_3(s + 29) & 8388607) << 2; + int64_t carry0; + int64_t carry1; + int64_t carry2; + int64_t carry3; + int64_t carry4; + int64_t carry5; + int64_t carry6; + int64_t carry7; + int64_t carry8; + int64_t carry9; + + /* Validate the number to be canonical */ + if (h9 == 33554428 && h8 == 268435440 && h7 == 536870880 && h6 == 2147483520 && + h5 == 4294967295 && h4 == 67108860 && h3 == 134217720 && h2 == 536870880 && + h1 == 1073741760 && h0 >= 4294967277) { + return -1; + } + + carry9 = (h9 + (int64_t) (1<<24)) >> 25; + h0 += carry9 * 19; + h9 -= carry9 << 25; + carry1 = (h1 + (int64_t) (1<<24)) >> 25; + h2 += carry1; + h1 -= carry1 << 25; + carry3 = (h3 + (int64_t) (1<<24)) >> 25; + h4 += carry3; + h3 -= carry3 << 25; + carry5 = (h5 + (int64_t) (1<<24)) >> 25; + h6 += carry5; + h5 -= carry5 << 25; + carry7 = (h7 + (int64_t) (1<<24)) >> 25; + h8 += carry7; + h7 -= carry7 << 25; + + carry0 = (h0 + (int64_t) (1<<25)) >> 26; + h1 += carry0; + h0 -= carry0 << 26; + carry2 = (h2 + (int64_t) (1<<25)) >> 26; + h3 += carry2; + h2 -= carry2 << 26; + carry4 = (h4 + (int64_t) (1<<25)) >> 26; + h5 += carry4; + h4 -= carry4 << 26; + carry6 = (h6 + (int64_t) (1<<25)) >> 26; + h7 += carry6; + h6 -= carry6 << 26; + carry8 = (h8 + (int64_t) (1<<25)) >> 26; + h9 += carry8; + h8 -= carry8 << 26; + + h->Y[0] = h0; + h->Y[1] = h1; + h->Y[2] = h2; + h->Y[3] = h3; + h->Y[4] = h4; + h->Y[5] = h5; + h->Y[6] = h6; + h->Y[7] = h7; + h->Y[8] = h8; + h->Y[9] = h9; + + /* End fe_frombytes.c */ + + fe_1(h->Z); + fe_sq(u, h->Y); + fe_mul(v, u, fe_d); + fe_sub(u, u, h->Z); /* u = y^2-1 */ + fe_add(v, v, h->Z); /* v = dy^2+1 */ + + fe_divpowm1(h->X, u, v); /* x = uv^3(uv^7)^((q-5)/8) */ + + fe_sq(vxx, h->X); + fe_mul(vxx, vxx, v); + fe_sub(check, vxx, u); /* vx^2-u */ + if (fe_isnonzero(check)) { + fe_add(check, vxx, u); /* vx^2+u */ + if (fe_isnonzero(check)) { + return -1; + } + fe_mul(h->X, h->X, fe_sqrtm1); //this is mapping X to X * sqrt(-1) c.f. 3.1 in hisil, dong, etc. + } + + if (fe_isnegative(h->X) != (s[31] >> 7)) { + /* If x = 0, the sign must be positive */ + if (!fe_isnonzero(h->X)) { + return -1; + } + fe_neg(h->X, h->X); + } + + fe_mul(h->T, h->X, h->Y); + return 0; +} + +/* New code */ +/* (u / v)^(m + 1) */ +static void fe_divpowm1(fe r, const fe u, const fe v) { + fe v3, uv7, t0, t1, t2; + int i; + + fe_sq(v3, v); + fe_mul(v3, v3, v); /* v3 = v^3 */ + fe_sq(uv7, v3); + fe_mul(uv7, uv7, v); + fe_mul(uv7, uv7, u); /* uv7 = uv^7 */ + + /*fe_pow22523(uv7, uv7);*/ + + /* From fe_pow22523.c */ + + fe_sq(t0, uv7); + fe_sq(t1, t0); + fe_sq(t1, t1); + fe_mul(t1, uv7, t1); + fe_mul(t0, t0, t1); + fe_sq(t0, t0); + fe_mul(t0, t1, t0); + fe_sq(t1, t0); + for (i = 0; i < 4; ++i) { + fe_sq(t1, t1); + } + fe_mul(t0, t1, t0); + fe_sq(t1, t0); + for (i = 0; i < 9; ++i) { + fe_sq(t1, t1); + } + fe_mul(t1, t1, t0); + fe_sq(t2, t1); + for (i = 0; i < 19; ++i) { + fe_sq(t2, t2); + } + fe_mul(t1, t2, t1); + for (i = 0; i < 10; ++i) { + fe_sq(t1, t1); + } + fe_mul(t0, t1, t0); + fe_sq(t1, t0); + for (i = 0; i < 49; ++i) { + fe_sq(t1, t1); + } + fe_mul(t1, t1, t0); + fe_sq(t2, t1); + for (i = 0; i < 99; ++i) { + fe_sq(t2, t2); + } + fe_mul(t1, t2, t1); + for (i = 0; i < 50; ++i) { + fe_sq(t1, t1); + } + fe_mul(t0, t1, t0); + fe_sq(t0, t0); + fe_sq(t0, t0); + fe_mul(t0, t0, uv7); + + /* End fe_pow22523.c */ + /* t0 = (uv^7)^((q-5)/8) */ + fe_mul(t0, t0, v3); + fe_mul(r, t0, u); /* u^(m+1)v^(-(m+1)) */ +} + +static void ge_cached_0(ge_cached *r) { + fe_1(r->YplusX); + fe_1(r->YminusX); + fe_1(r->Z); + fe_0(r->T2d); +} + +static void ge_cached_cmov(ge_cached *t, const ge_cached *u, unsigned char b) { + fe_cmov(t->YplusX, u->YplusX, b); + fe_cmov(t->YminusX, u->YminusX, b); + fe_cmov(t->Z, u->Z, b); + fe_cmov(t->T2d, u->T2d, b); +} + +/* Assumes that a[31] <= 127 */ +void ge_scalarmult(ge_p2 *r, const unsigned char *a, const ge_p3 *A) { + signed char e[64]; + int carry, carry2, i; + ge_cached Ai[8]; /* 1 * A, 2 * A, ..., 8 * A */ + ge_p1p1 t; + ge_p3 u; + + carry = 0; /* 0..1 */ + for (i = 0; i < 31; i++) { + carry += a[i]; /* 0..256 */ + carry2 = (carry + 8) >> 4; /* 0..16 */ + e[2 * i] = carry - (carry2 << 4); /* -8..7 */ + carry = (carry2 + 8) >> 4; /* 0..1 */ + e[2 * i + 1] = carry2 - (carry << 4); /* -8..7 */ + } + carry += a[31]; /* 0..128 */ + carry2 = (carry + 8) >> 4; /* 0..8 */ + e[62] = carry - (carry2 << 4); /* -8..7 */ + e[63] = carry2; /* 0..8 */ + + ge_p3_to_cached(&Ai[0], A); + for (i = 0; i < 7; i++) { + ge_add(&t, A, &Ai[i]); + ge_p1p1_to_p3(&u, &t); + ge_p3_to_cached(&Ai[i + 1], &u); + } + + ge_p2_0(r); + for (i = 63; i >= 0; i--) { + signed char b = e[i]; + unsigned char bnegative = negative(b); + unsigned char babs = b - (((-bnegative) & b) << 1); + ge_cached cur, minuscur; + ge_p2_dbl(&t, r); + ge_p1p1_to_p2(r, &t); + ge_p2_dbl(&t, r); + ge_p1p1_to_p2(r, &t); + ge_p2_dbl(&t, r); + ge_p1p1_to_p2(r, &t); + ge_p2_dbl(&t, r); + ge_p1p1_to_p3(&u, &t); + ge_cached_0(&cur); + ge_cached_cmov(&cur, &Ai[0], equal(babs, 1)); + ge_cached_cmov(&cur, &Ai[1], equal(babs, 2)); + ge_cached_cmov(&cur, &Ai[2], equal(babs, 3)); + ge_cached_cmov(&cur, &Ai[3], equal(babs, 4)); + ge_cached_cmov(&cur, &Ai[4], equal(babs, 5)); + ge_cached_cmov(&cur, &Ai[5], equal(babs, 6)); + ge_cached_cmov(&cur, &Ai[6], equal(babs, 7)); + ge_cached_cmov(&cur, &Ai[7], equal(babs, 8)); + fe_copy(minuscur.YplusX, cur.YminusX); + fe_copy(minuscur.YminusX, cur.YplusX); + fe_copy(minuscur.Z, cur.Z); + fe_neg(minuscur.T2d, cur.T2d); + ge_cached_cmov(&cur, &minuscur, bnegative); + ge_add(&t, &u, &cur); + ge_p1p1_to_p2(r, &t); + } +} + +//assume Bi has precomputed multiples +void ge_double_scalarmult_precomp_vartime(ge_p2 *r, const unsigned char *a, const ge_p3 *A, const unsigned char *b, const ge_dsmp Bii) { + signed char aslide[256]; + signed char bslide[256]; + ge_dsmp Ai; /* A, 3A, 5A, 7A, 9A, 11A, 13A, 15A */ //precomps + ge_p1p1 t; + ge_p3 u; + int i; + + slide(aslide, a); + slide(bslide, b); + ge_dsm_precomp(Ai, A); + + ge_p2_0(r); + + for (i = 255; i >= 0; --i) { + if (aslide[i] || bslide[i]) break; + } + + for (; i >= 0; --i) { + ge_p2_dbl(&t, r); + + if (aslide[i] > 0) { + ge_p1p1_to_p3(&u, &t); + ge_add(&t, &u, &Ai[aslide[i]/2]); + } else if (aslide[i] < 0) { + ge_p1p1_to_p3(&u, &t); + ge_sub(&t, &u, &Ai[(-aslide[i])/2]); + } + + if (bslide[i] > 0) { + ge_p1p1_to_p3(&u, &t); + ge_add(&t, &u, &Bii[bslide[i]/2]); + } else if (bslide[i] < 0) { + ge_p1p1_to_p3(&u, &t); + ge_sub(&t, &u, &Bii[(-bslide[i])/2]); + } + + ge_p1p1_to_p2(r, &t); + } +} + +//x +void ge_mul8(ge_p1p1 *r, const ge_p2 *t) { + ge_p2 u; + ge_p2_dbl(r, t); + ge_p1p1_to_p2(&u, r); + ge_p2_dbl(r, &u); + ge_p1p1_to_p2(&u, r); + ge_p2_dbl(r, &u); +} + +//x +void ge_fromfe_frombytes_vartime(ge_p2 *r, const unsigned char *s) { + fe u, v, w, x, y, z; + unsigned char sign; + + /* From fe_frombytes.c */ + + int64_t h0 = load_4(s); + int64_t h1 = load_3(s + 4) << 6; + int64_t h2 = load_3(s + 7) << 5; + int64_t h3 = load_3(s + 10) << 3; + int64_t h4 = load_3(s + 13) << 2; + int64_t h5 = load_4(s + 16); + int64_t h6 = load_3(s + 20) << 7; + int64_t h7 = load_3(s + 23) << 5; + int64_t h8 = load_3(s + 26) << 4; + int64_t h9 = load_3(s + 29) << 2; + int64_t carry0; + int64_t carry1; + int64_t carry2; + int64_t carry3; + int64_t carry4; + int64_t carry5; + int64_t carry6; + int64_t carry7; + int64_t carry8; + int64_t carry9; + + carry9 = (h9 + (int64_t) (1<<24)) >> 25; + h0 += carry9 * 19; + h9 -= carry9 << 25; + carry1 = (h1 + (int64_t) (1<<24)) >> 25; + h2 += carry1; + h1 -= carry1 << 25; + carry3 = (h3 + (int64_t) (1<<24)) >> 25; + h4 += carry3; + h3 -= carry3 << 25; + carry5 = (h5 + (int64_t) (1<<24)) >> 25; + h6 += carry5; + h5 -= carry5 << 25; + carry7 = (h7 + (int64_t) (1<<24)) >> 25; + h8 += carry7; + h7 -= carry7 << 25; + + carry0 = (h0 + (int64_t) (1<<25)) >> 26; + h1 += carry0; + h0 -= carry0 << 26; + carry2 = (h2 + (int64_t) (1<<25)) >> 26; + h3 += carry2; + h2 -= carry2 << 26; + carry4 = (h4 + (int64_t) (1<<25)) >> 26; + h5 += carry4; + h4 -= carry4 << 26; + carry6 = (h6 + (int64_t) (1<<25)) >> 26; + h7 += carry6; + h6 -= carry6 << 26; + carry8 = (h8 + (int64_t) (1<<25)) >> 26; + h9 += carry8; + h8 -= carry8 << 26; + + u[0] = h0; + u[1] = h1; + u[2] = h2; + u[3] = h3; + u[4] = h4; + u[5] = h5; + u[6] = h6; + u[7] = h7; + u[8] = h8; + u[9] = h9; + + /* End fe_frombytes.c */ + + fe_sq2(v, u); /* 2 * u^2 */ + fe_1(w); + fe_add(w, v, w); /* w = 2 * u^2 + 1 */ + fe_sq(x, w); /* w^2 */ + fe_mul(y, fe_ma2, v); /* -2 * A^2 * u^2 */ + fe_add(x, x, y); /* x = w^2 - 2 * A^2 * u^2 */ + fe_divpowm1(r->X, w, x); /* (w / x)^(m + 1) */ + fe_sq(y, r->X); + fe_mul(x, y, x); + fe_sub(y, w, x); + fe_copy(z, fe_ma); + if (fe_isnonzero(y)) { + fe_add(y, w, x); + if (fe_isnonzero(y)) { + goto negative; + } else { + fe_mul(r->X, r->X, fe_fffb1); + } + } else { + fe_mul(r->X, r->X, fe_fffb2); + } + fe_mul(r->X, r->X, u); /* u * sqrt(2 * A * (A + 2) * w / x) */ + fe_mul(z, z, v); /* -2 * A * u^2 */ + sign = 0; + goto setsign; +negative: + fe_mul(x, x, fe_sqrtm1); + fe_sub(y, w, x); + if (fe_isnonzero(y)) { + assert((fe_add(y, w, x), !fe_isnonzero(y))); + fe_mul(r->X, r->X, fe_fffb3); + } else { + fe_mul(r->X, r->X, fe_fffb4); + } + /* r->X = sqrt(A * (A + 2) * w / x) */ + /* z = -A */ + sign = 1; +setsign: + if (fe_isnegative(r->X) != sign) { + assert(fe_isnonzero(r->X)); + fe_neg(r->X, r->X); + } + fe_add(r->Z, z, w); + fe_sub(r->Y, z, w); + fe_mul(r->X, r->X, r->Z); +#if !defined(NDEBUG) + { + fe check_x, check_y, check_iz, check_v; + fe_invert(check_iz, r->Z); + fe_mul(check_x, r->X, check_iz); + fe_mul(check_y, r->Y, check_iz); + fe_sq(check_x, check_x); + fe_sq(check_y, check_y); + fe_mul(check_v, check_x, check_y); + fe_mul(check_v, fe_d, check_v); + fe_add(check_v, check_v, check_x); + fe_sub(check_v, check_v, check_y); + fe_1(check_x); + fe_add(check_v, check_v, check_x); + assert(!fe_isnonzero(check_v)); + } +#endif +} + +//x +void sc_0(unsigned char *s) { + int i; + for (i = 0; i < 32; i++) { + s[i] = 0; + } +} + +//x +void sc_reduce32(unsigned char *s) { + int64_t s0 = 2097151 & load_3(s); + int64_t s1 = 2097151 & (load_4(s + 2) >> 5); + int64_t s2 = 2097151 & (load_3(s + 5) >> 2); + int64_t s3 = 2097151 & (load_4(s + 7) >> 7); + int64_t s4 = 2097151 & (load_4(s + 10) >> 4); + int64_t s5 = 2097151 & (load_3(s + 13) >> 1); + int64_t s6 = 2097151 & (load_4(s + 15) >> 6); + int64_t s7 = 2097151 & (load_3(s + 18) >> 3); + int64_t s8 = 2097151 & load_3(s + 21); + int64_t s9 = 2097151 & (load_4(s + 23) >> 5); + int64_t s10 = 2097151 & (load_3(s + 26) >> 2); + int64_t s11 = (load_4(s + 28) >> 7); + int64_t s12 = 0; + int64_t carry0; + int64_t carry1; + int64_t carry2; + int64_t carry3; + int64_t carry4; + int64_t carry5; + int64_t carry6; + int64_t carry7; + int64_t carry8; + int64_t carry9; + int64_t carry10; + int64_t carry11; + + carry0 = (s0 + (1<<20)) >> 21; + s1 += carry0; + s0 -= carry0 << 21; + carry2 = (s2 + (1<<20)) >> 21; + s3 += carry2; + s2 -= carry2 << 21; + carry4 = (s4 + (1<<20)) >> 21; + s5 += carry4; + s4 -= carry4 << 21; + carry6 = (s6 + (1<<20)) >> 21; + s7 += carry6; + s6 -= carry6 << 21; + carry8 = (s8 + (1<<20)) >> 21; + s9 += carry8; + s8 -= carry8 << 21; + carry10 = (s10 + (1<<20)) >> 21; + s11 += carry10; + s10 -= carry10 << 21; + + carry1 = (s1 + (1<<20)) >> 21; + s2 += carry1; + s1 -= carry1 << 21; + carry3 = (s3 + (1<<20)) >> 21; + s4 += carry3; + s3 -= carry3 << 21; + carry5 = (s5 + (1<<20)) >> 21; + s6 += carry5; + s5 -= carry5 << 21; + carry7 = (s7 + (1<<20)) >> 21; + s8 += carry7; + s7 -= carry7 << 21; + carry9 = (s9 + (1<<20)) >> 21; + s10 += carry9; + s9 -= carry9 << 21; + carry11 = (s11 + (1<<20)) >> 21; + s12 += carry11; + s11 -= carry11 << 21; + + s0 += s12 * 666643; + s1 += s12 * 470296; + s2 += s12 * 654183; + s3 -= s12 * 997805; + s4 += s12 * 136657; + s5 -= s12 * 683901; + s12 = 0; + + carry0 = s0 >> 21; + s1 += carry0; + s0 -= carry0 << 21; + carry1 = s1 >> 21; + s2 += carry1; + s1 -= carry1 << 21; + carry2 = s2 >> 21; + s3 += carry2; + s2 -= carry2 << 21; + carry3 = s3 >> 21; + s4 += carry3; + s3 -= carry3 << 21; + carry4 = s4 >> 21; + s5 += carry4; + s4 -= carry4 << 21; + carry5 = s5 >> 21; + s6 += carry5; + s5 -= carry5 << 21; + carry6 = s6 >> 21; + s7 += carry6; + s6 -= carry6 << 21; + carry7 = s7 >> 21; + s8 += carry7; + s7 -= carry7 << 21; + carry8 = s8 >> 21; + s9 += carry8; + s8 -= carry8 << 21; + carry9 = s9 >> 21; + s10 += carry9; + s9 -= carry9 << 21; + carry10 = s10 >> 21; + s11 += carry10; + s10 -= carry10 << 21; + carry11 = s11 >> 21; + s12 += carry11; + s11 -= carry11 << 21; + + s0 += s12 * 666643; + s1 += s12 * 470296; + s2 += s12 * 654183; + s3 -= s12 * 997805; + s4 += s12 * 136657; + s5 -= s12 * 683901; + + carry0 = s0 >> 21; + s1 += carry0; + s0 -= carry0 << 21; + carry1 = s1 >> 21; + s2 += carry1; + s1 -= carry1 << 21; + carry2 = s2 >> 21; + s3 += carry2; + s2 -= carry2 << 21; + carry3 = s3 >> 21; + s4 += carry3; + s3 -= carry3 << 21; + carry4 = s4 >> 21; + s5 += carry4; + s4 -= carry4 << 21; + carry5 = s5 >> 21; + s6 += carry5; + s5 -= carry5 << 21; + carry6 = s6 >> 21; + s7 += carry6; + s6 -= carry6 << 21; + carry7 = s7 >> 21; + s8 += carry7; + s7 -= carry7 << 21; + carry8 = s8 >> 21; + s9 += carry8; + s8 -= carry8 << 21; + carry9 = s9 >> 21; + s10 += carry9; + s9 -= carry9 << 21; + carry10 = s10 >> 21; + s11 += carry10; + s10 -= carry10 << 21; + + s[0] = s0 >> 0; + s[1] = s0 >> 8; + s[2] = (s0 >> 16) | (s1 << 5); + s[3] = s1 >> 3; + s[4] = s1 >> 11; + s[5] = (s1 >> 19) | (s2 << 2); + s[6] = s2 >> 6; + s[7] = (s2 >> 14) | (s3 << 7); + s[8] = s3 >> 1; + s[9] = s3 >> 9; + s[10] = (s3 >> 17) | (s4 << 4); + s[11] = s4 >> 4; + s[12] = s4 >> 12; + s[13] = (s4 >> 20) | (s5 << 1); + s[14] = s5 >> 7; + s[15] = (s5 >> 15) | (s6 << 6); + s[16] = s6 >> 2; + s[17] = s6 >> 10; + s[18] = (s6 >> 18) | (s7 << 3); + s[19] = s7 >> 5; + s[20] = s7 >> 13; + s[21] = s8 >> 0; + s[22] = s8 >> 8; + s[23] = (s8 >> 16) | (s9 << 5); + s[24] = s9 >> 3; + s[25] = s9 >> 11; + s[26] = (s9 >> 19) | (s10 << 2); + s[27] = s10 >> 6; + s[28] = (s10 >> 14) | (s11 << 7); + s[29] = s11 >> 1; + s[30] = s11 >> 9; + s[31] = s11 >> 17; +} + +//x +void sc_reduce32copy(unsigned char * scopy, const unsigned char *s) { + int64_t s0 = 2097151 & load_3(s); + int64_t s1 = 2097151 & (load_4(s + 2) >> 5); + int64_t s2 = 2097151 & (load_3(s + 5) >> 2); + int64_t s3 = 2097151 & (load_4(s + 7) >> 7); + int64_t s4 = 2097151 & (load_4(s + 10) >> 4); + int64_t s5 = 2097151 & (load_3(s + 13) >> 1); + int64_t s6 = 2097151 & (load_4(s + 15) >> 6); + int64_t s7 = 2097151 & (load_3(s + 18) >> 3); + int64_t s8 = 2097151 & load_3(s + 21); + int64_t s9 = 2097151 & (load_4(s + 23) >> 5); + int64_t s10 = 2097151 & (load_3(s + 26) >> 2); + int64_t s11 = (load_4(s + 28) >> 7); + int64_t s12 = 0; + int64_t carry0; + int64_t carry1; + int64_t carry2; + int64_t carry3; + int64_t carry4; + int64_t carry5; + int64_t carry6; + int64_t carry7; + int64_t carry8; + int64_t carry9; + int64_t carry10; + int64_t carry11; + + carry0 = (s0 + (1<<20)) >> 21; + s1 += carry0; + s0 -= carry0 << 21; + carry2 = (s2 + (1<<20)) >> 21; + s3 += carry2; + s2 -= carry2 << 21; + carry4 = (s4 + (1<<20)) >> 21; + s5 += carry4; + s4 -= carry4 << 21; + carry6 = (s6 + (1<<20)) >> 21; + s7 += carry6; + s6 -= carry6 << 21; + carry8 = (s8 + (1<<20)) >> 21; + s9 += carry8; + s8 -= carry8 << 21; + carry10 = (s10 + (1<<20)) >> 21; + s11 += carry10; + s10 -= carry10 << 21; + + carry1 = (s1 + (1<<20)) >> 21; + s2 += carry1; + s1 -= carry1 << 21; + carry3 = (s3 + (1<<20)) >> 21; + s4 += carry3; + s3 -= carry3 << 21; + carry5 = (s5 + (1<<20)) >> 21; + s6 += carry5; + s5 -= carry5 << 21; + carry7 = (s7 + (1<<20)) >> 21; + s8 += carry7; + s7 -= carry7 << 21; + carry9 = (s9 + (1<<20)) >> 21; + s10 += carry9; + s9 -= carry9 << 21; + carry11 = (s11 + (1<<20)) >> 21; + s12 += carry11; + s11 -= carry11 << 21; + + s0 += s12 * 666643; + s1 += s12 * 470296; + s2 += s12 * 654183; + s3 -= s12 * 997805; + s4 += s12 * 136657; + s5 -= s12 * 683901; + s12 = 0; + + carry0 = s0 >> 21; + s1 += carry0; + s0 -= carry0 << 21; + carry1 = s1 >> 21; + s2 += carry1; + s1 -= carry1 << 21; + carry2 = s2 >> 21; + s3 += carry2; + s2 -= carry2 << 21; + carry3 = s3 >> 21; + s4 += carry3; + s3 -= carry3 << 21; + carry4 = s4 >> 21; + s5 += carry4; + s4 -= carry4 << 21; + carry5 = s5 >> 21; + s6 += carry5; + s5 -= carry5 << 21; + carry6 = s6 >> 21; + s7 += carry6; + s6 -= carry6 << 21; + carry7 = s7 >> 21; + s8 += carry7; + s7 -= carry7 << 21; + carry8 = s8 >> 21; + s9 += carry8; + s8 -= carry8 << 21; + carry9 = s9 >> 21; + s10 += carry9; + s9 -= carry9 << 21; + carry10 = s10 >> 21; + s11 += carry10; + s10 -= carry10 << 21; + carry11 = s11 >> 21; + s12 += carry11; + s11 -= carry11 << 21; + + s0 += s12 * 666643; + s1 += s12 * 470296; + s2 += s12 * 654183; + s3 -= s12 * 997805; + s4 += s12 * 136657; + s5 -= s12 * 683901; + + carry0 = s0 >> 21; + s1 += carry0; + s0 -= carry0 << 21; + carry1 = s1 >> 21; + s2 += carry1; + s1 -= carry1 << 21; + carry2 = s2 >> 21; + s3 += carry2; + s2 -= carry2 << 21; + carry3 = s3 >> 21; + s4 += carry3; + s3 -= carry3 << 21; + carry4 = s4 >> 21; + s5 += carry4; + s4 -= carry4 << 21; + carry5 = s5 >> 21; + s6 += carry5; + s5 -= carry5 << 21; + carry6 = s6 >> 21; + s7 += carry6; + s6 -= carry6 << 21; + carry7 = s7 >> 21; + s8 += carry7; + s7 -= carry7 << 21; + carry8 = s8 >> 21; + s9 += carry8; + s8 -= carry8 << 21; + carry9 = s9 >> 21; + s10 += carry9; + s9 -= carry9 << 21; + carry10 = s10 >> 21; + s11 += carry10; + s10 -= carry10 << 21; + + scopy[0] = s0 >> 0; + scopy[1] = s0 >> 8; + scopy[2] = (s0 >> 16) | (s1 << 5); + scopy[3] = s1 >> 3; + scopy[4] = s1 >> 11; + scopy[5] = (s1 >> 19) | (s2 << 2); + scopy[6] = s2 >> 6; + scopy[7] = (s2 >> 14) | (s3 << 7); + scopy[8] = s3 >> 1; + scopy[9] = s3 >> 9; + scopy[10] = (s3 >> 17) | (s4 << 4); + scopy[11] = s4 >> 4; + scopy[12] = s4 >> 12; + scopy[13] = (s4 >> 20) | (s5 << 1); + scopy[14] = s5 >> 7; + scopy[15] = (s5 >> 15) | (s6 << 6); + scopy[16] = s6 >> 2; + scopy[17] = s6 >> 10; + scopy[18] = (s6 >> 18) | (s7 << 3); + scopy[19] = s7 >> 5; + scopy[20] = s7 >> 13; + scopy[21] = s8 >> 0; + scopy[22] = s8 >> 8; + scopy[23] = (s8 >> 16) | (s9 << 5); + scopy[24] = s9 >> 3; + scopy[25] = s9 >> 11; + scopy[26] = (s9 >> 19) | (s10 << 2); + scopy[27] = s10 >> 6; + scopy[28] = (s10 >> 14) | (s11 << 7); + scopy[29] = s11 >> 1; + scopy[30] = s11 >> 9; + scopy[31] = s11 >> 17; +} + + + +//x +void sc_add(unsigned char *s, const unsigned char *a, const unsigned char *b) { + int64_t a0 = 2097151 & load_3(a); + int64_t a1 = 2097151 & (load_4(a + 2) >> 5); + int64_t a2 = 2097151 & (load_3(a + 5) >> 2); + int64_t a3 = 2097151 & (load_4(a + 7) >> 7); + int64_t a4 = 2097151 & (load_4(a + 10) >> 4); + int64_t a5 = 2097151 & (load_3(a + 13) >> 1); + int64_t a6 = 2097151 & (load_4(a + 15) >> 6); + int64_t a7 = 2097151 & (load_3(a + 18) >> 3); + int64_t a8 = 2097151 & load_3(a + 21); + int64_t a9 = 2097151 & (load_4(a + 23) >> 5); + int64_t a10 = 2097151 & (load_3(a + 26) >> 2); + int64_t a11 = (load_4(a + 28) >> 7); + int64_t b0 = 2097151 & load_3(b); + int64_t b1 = 2097151 & (load_4(b + 2) >> 5); + int64_t b2 = 2097151 & (load_3(b + 5) >> 2); + int64_t b3 = 2097151 & (load_4(b + 7) >> 7); + int64_t b4 = 2097151 & (load_4(b + 10) >> 4); + int64_t b5 = 2097151 & (load_3(b + 13) >> 1); + int64_t b6 = 2097151 & (load_4(b + 15) >> 6); + int64_t b7 = 2097151 & (load_3(b + 18) >> 3); + int64_t b8 = 2097151 & load_3(b + 21); + int64_t b9 = 2097151 & (load_4(b + 23) >> 5); + int64_t b10 = 2097151 & (load_3(b + 26) >> 2); + int64_t b11 = (load_4(b + 28) >> 7); + int64_t s0 = a0 + b0; + int64_t s1 = a1 + b1; + int64_t s2 = a2 + b2; + int64_t s3 = a3 + b3; + int64_t s4 = a4 + b4; + int64_t s5 = a5 + b5; + int64_t s6 = a6 + b6; + int64_t s7 = a7 + b7; + int64_t s8 = a8 + b8; + int64_t s9 = a9 + b9; + int64_t s10 = a10 + b10; + int64_t s11 = a11 + b11; + int64_t s12 = 0; + int64_t carry0; + int64_t carry1; + int64_t carry2; + int64_t carry3; + int64_t carry4; + int64_t carry5; + int64_t carry6; + int64_t carry7; + int64_t carry8; + int64_t carry9; + int64_t carry10; + int64_t carry11; + + carry0 = (s0 + (1<<20)) >> 21; + s1 += carry0; + s0 -= carry0 << 21; + carry2 = (s2 + (1<<20)) >> 21; + s3 += carry2; + s2 -= carry2 << 21; + carry4 = (s4 + (1<<20)) >> 21; + s5 += carry4; + s4 -= carry4 << 21; + carry6 = (s6 + (1<<20)) >> 21; + s7 += carry6; + s6 -= carry6 << 21; + carry8 = (s8 + (1<<20)) >> 21; + s9 += carry8; + s8 -= carry8 << 21; + carry10 = (s10 + (1<<20)) >> 21; + s11 += carry10; + s10 -= carry10 << 21; + + carry1 = (s1 + (1<<20)) >> 21; + s2 += carry1; + s1 -= carry1 << 21; + carry3 = (s3 + (1<<20)) >> 21; + s4 += carry3; + s3 -= carry3 << 21; + carry5 = (s5 + (1<<20)) >> 21; + s6 += carry5; + s5 -= carry5 << 21; + carry7 = (s7 + (1<<20)) >> 21; + s8 += carry7; + s7 -= carry7 << 21; + carry9 = (s9 + (1<<20)) >> 21; + s10 += carry9; + s9 -= carry9 << 21; + carry11 = (s11 + (1<<20)) >> 21; + s12 += carry11; + s11 -= carry11 << 21; + + s0 += s12 * 666643; + s1 += s12 * 470296; + s2 += s12 * 654183; + s3 -= s12 * 997805; + s4 += s12 * 136657; + s5 -= s12 * 683901; + s12 = 0; + + carry0 = s0 >> 21; + s1 += carry0; + s0 -= carry0 << 21; + carry1 = s1 >> 21; + s2 += carry1; + s1 -= carry1 << 21; + carry2 = s2 >> 21; + s3 += carry2; + s2 -= carry2 << 21; + carry3 = s3 >> 21; + s4 += carry3; + s3 -= carry3 << 21; + carry4 = s4 >> 21; + s5 += carry4; + s4 -= carry4 << 21; + carry5 = s5 >> 21; + s6 += carry5; + s5 -= carry5 << 21; + carry6 = s6 >> 21; + s7 += carry6; + s6 -= carry6 << 21; + carry7 = s7 >> 21; + s8 += carry7; + s7 -= carry7 << 21; + carry8 = s8 >> 21; + s9 += carry8; + s8 -= carry8 << 21; + carry9 = s9 >> 21; + s10 += carry9; + s9 -= carry9 << 21; + carry10 = s10 >> 21; + s11 += carry10; + s10 -= carry10 << 21; + carry11 = s11 >> 21; + s12 += carry11; + s11 -= carry11 << 21; + + s0 += s12 * 666643; + s1 += s12 * 470296; + s2 += s12 * 654183; + s3 -= s12 * 997805; + s4 += s12 * 136657; + s5 -= s12 * 683901; + + carry0 = s0 >> 21; + s1 += carry0; + s0 -= carry0 << 21; + carry1 = s1 >> 21; + s2 += carry1; + s1 -= carry1 << 21; + carry2 = s2 >> 21; + s3 += carry2; + s2 -= carry2 << 21; + carry3 = s3 >> 21; + s4 += carry3; + s3 -= carry3 << 21; + carry4 = s4 >> 21; + s5 += carry4; + s4 -= carry4 << 21; + carry5 = s5 >> 21; + s6 += carry5; + s5 -= carry5 << 21; + carry6 = s6 >> 21; + s7 += carry6; + s6 -= carry6 << 21; + carry7 = s7 >> 21; + s8 += carry7; + s7 -= carry7 << 21; + carry8 = s8 >> 21; + s9 += carry8; + s8 -= carry8 << 21; + carry9 = s9 >> 21; + s10 += carry9; + s9 -= carry9 << 21; + carry10 = s10 >> 21; + s11 += carry10; + s10 -= carry10 << 21; + + s[0] = s0 >> 0; + s[1] = s0 >> 8; + s[2] = (s0 >> 16) | (s1 << 5); + s[3] = s1 >> 3; + s[4] = s1 >> 11; + s[5] = (s1 >> 19) | (s2 << 2); + s[6] = s2 >> 6; + s[7] = (s2 >> 14) | (s3 << 7); + s[8] = s3 >> 1; + s[9] = s3 >> 9; + s[10] = (s3 >> 17) | (s4 << 4); + s[11] = s4 >> 4; + s[12] = s4 >> 12; + s[13] = (s4 >> 20) | (s5 << 1); + s[14] = s5 >> 7; + s[15] = (s5 >> 15) | (s6 << 6); + s[16] = s6 >> 2; + s[17] = s6 >> 10; + s[18] = (s6 >> 18) | (s7 << 3); + s[19] = s7 >> 5; + s[20] = s7 >> 13; + s[21] = s8 >> 0; + s[22] = s8 >> 8; + s[23] = (s8 >> 16) | (s9 << 5); + s[24] = s9 >> 3; + s[25] = s9 >> 11; + s[26] = (s9 >> 19) | (s10 << 2); + s[27] = s10 >> 6; + s[28] = (s10 >> 14) | (s11 << 7); + s[29] = s11 >> 1; + s[30] = s11 >> 9; + s[31] = s11 >> 17; +} + +/* Assumes that a != INT64_MIN */ +//x c.f. lt in 32 bit ref +static int64_t signum(int64_t a) { + return (a >> 63) - ((-a) >> 63); +} + +//x +int sc_check(const unsigned char *s) { + int64_t s0 = load_4(s); + int64_t s1 = load_4(s + 4); + int64_t s2 = load_4(s + 8); + int64_t s3 = load_4(s + 12); + int64_t s4 = load_4(s + 16); + int64_t s5 = load_4(s + 20); + int64_t s6 = load_4(s + 24); + int64_t s7 = load_4(s + 28); + return (signum(1559614444 - s0) + (signum(1477600026 - s1) << 1) + (signum(2734136534 - s2) << 2) + (signum(350157278 - s3) << 3) + (signum(-s4) << 4) + (signum(-s5) << 5) + (signum(-s6) << 6) + (signum(268435456 - s7) << 7)) >> 8; +} + +//x +int sc_isnonzero(const unsigned char *s) { + return (((int) (s[0] | s[1] | s[2] | s[3] | s[4] | s[5] | s[6] | s[7] | s[8] | + s[9] | s[10] | s[11] | s[12] | s[13] | s[14] | s[15] | s[16] | s[17] | + s[18] | s[19] | s[20] | s[21] | s[22] | s[23] | s[24] | s[25] | s[26] | + s[27] | s[28] | s[29] | s[30] | s[31]) - 1) >> 8) + 1; +} diff --git a/source-code/RingCT/crypto-ops.h b/source-code/RingCT/crypto-ops.h new file mode 100644 index 0000000..c09a319 --- /dev/null +++ b/source-code/RingCT/crypto-ops.h @@ -0,0 +1,150 @@ +// Copyright (c) 2014-2015, The Monero Project +// +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without modification, are +// permitted provided that the following conditions are met: +// +// 1. Redistributions of source code must retain the above copyright notice, this list of +// conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright notice, this list +// of conditions and the following disclaimer in the documentation and/or other +// materials provided with the distribution. +// +// 3. Neither the name of the copyright holder nor the names of its contributors may be +// used to endorse or promote products derived from this software without specific +// prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL +// THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF +// THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Parts of this file are originally copyright (c) 2012-2013 The Cryptonote developers + +#pragma once + +/* From fe.h */ + +typedef int32_t fe[10]; + +/* From ge.h */ + +typedef struct { + fe X; + fe Y; + fe Z; +} ge_p2; + +typedef struct { + fe X; + fe Y; + fe Z; + fe T; +} ge_p3; + +typedef struct { + fe X; + fe Y; + fe Z; + fe T; +} ge_p1p1; + +typedef struct { + fe yplusx; + fe yminusx; + fe xy2d; +} ge_precomp; + +typedef struct { + fe YplusX; + fe YminusX; + fe Z; + fe T2d; +} ge_cached; + +/* From ge_add.c */ + +void ge_add(ge_p1p1 *, const ge_p3 *, const ge_cached *); + +/* From ge_sub.c */ + +void ge_sub(ge_p1p1 *, const ge_p3 *, const ge_cached *); + +/* From ge_double_scalarmult.c, modified */ + +typedef ge_cached ge_dsmp[8]; +extern const ge_precomp ge_Bi[8]; +void ge_dsm_precomp(ge_dsmp r, const ge_p3 *s); +void ge_double_scalarmult_base_vartime(ge_p2 *, const unsigned char *, const ge_p3 *, const unsigned char *); + +/* From ge_frombytes.c, modified */ + +extern const fe fe_sqrtm1; +extern const fe fe_d; +int ge_frombytes_vartime(ge_p3 *, const unsigned char *); + +/* From ge_p1p1_to_p2.c */ + +void ge_p1p1_to_p2(ge_p2 *, const ge_p1p1 *); + +/* From ge_p1p1_to_p3.c */ + +void ge_p1p1_to_p3(ge_p3 *, const ge_p1p1 *); + +/* From ge_p2_dbl.c */ + +void ge_p2_dbl(ge_p1p1 *, const ge_p2 *); + +/* From ge_p3_to_cached.c */ + +extern const fe fe_d2; +void ge_p3_to_cached(ge_cached *, const ge_p3 *); + +/* From ge_p3_to_p2.c */ + +void ge_p3_to_p2(ge_p2 *, const ge_p3 *); + +/* From ge_p3_tobytes.c */ + +void ge_p3_tobytes(unsigned char *, const ge_p3 *); + +/* From ge_scalarmult_base.c */ + +extern const ge_precomp ge_base[32][8]; +void ge_scalarmult_base(ge_p3 *, const unsigned char *); + +/* From ge_tobytes.c */ + +void ge_tobytes(unsigned char *, const ge_p2 *); + +/* From sc_reduce.c */ + +void sc_reduce(unsigned char *); + +/* New code */ + +void ge_scalarmult(ge_p2 *, const unsigned char *, const ge_p3 *); +void ge_double_scalarmult_precomp_vartime(ge_p2 *, const unsigned char *, const ge_p3 *, const unsigned char *, const ge_dsmp); +void ge_mul8(ge_p1p1 *, const ge_p2 *); +extern const fe fe_ma2; +extern const fe fe_ma; +extern const fe fe_fffb1; +extern const fe fe_fffb2; +extern const fe fe_fffb3; +extern const fe fe_fffb4; +void ge_fromfe_frombytes_vartime(ge_p2 *, const unsigned char *); +void sc_0(unsigned char *); +void sc_reduce32(unsigned char *); +void sc_reduce32copy(unsigned char *, const unsigned char *); +void sc_add(unsigned char *, const unsigned char *, const unsigned char *); +void sc_sub(unsigned char *, const unsigned char *, const unsigned char *); +void sc_mulsub(unsigned char *, const unsigned char *, const unsigned char *, const unsigned char *); +int sc_check(const unsigned char *); +int sc_isnonzero(const unsigned char *); /* Doesn't normalize */ diff --git a/source-code/RingCT/crypto.cpp b/source-code/RingCT/crypto.cpp new file mode 100644 index 0000000..2749a98 --- /dev/null +++ b/source-code/RingCT/crypto.cpp @@ -0,0 +1,364 @@ +#include +#include +#include +#include +#include +#include +#include + +#include "varint.h" +#include "warnings.h" +#include "crypto.h" +#include "keccak.h" +#include "hash-ops.h" +#include "generic-ops.h" + + + +#include + + + + +namespace crypto { + + using std::abort; + using std::int32_t; + using std::int64_t; + using std::lock_guard; + using std::mutex; + using std::size_t; + using std::uint32_t; + using std::uint64_t; + + extern "C" { +#include "crypto-ops.h" +#include "random.h" + } + + + + mutex random_lock; + + + + + static inline unsigned char *operator &(ec_point &point) { + return &reinterpret_cast(point); + } + + static inline const unsigned char *operator &(const ec_point &point) { + return &reinterpret_cast(point); + } + + static inline unsigned char *operator &(ec_scalar &scalar) { + return &reinterpret_cast(scalar); + } + + static inline const unsigned char *operator &(const ec_scalar &scalar) { + return &reinterpret_cast(scalar); + } + + /* generate a random 32-byte (256-bit) integer and copy it to res */ + static inline void random_scalar(ec_scalar &res) { + unsigned char tmp[64]; + generate_random_bytes(64, tmp); + sc_reduce(tmp); + memcpy(&res, tmp, 32); + } + + static void hash_to_scalar(const void *data, size_t length, ec_scalar &res) { //was static inline void + cn_fast_hashh(data, length, reinterpret_cast(res)); //this is the void one.. reinterp is trying to get it from ec_scalar to the correct thing... + + sc_reduce32(&res); + } + + /* + * generate public and secret keys from a random 256-bit integer + * TODO: allow specifiying random value (for wallet recovery) + * + */ + secret_key crypto_ops::generate_keys(public_key &pub, secret_key &sec, const secret_key& recovery_key, bool recover) { + lock_guard lock(random_lock); + ge_p3 point; + + secret_key rng; + + if (recover) + { + rng = recovery_key; + } + else + { + random_scalar(rng); + } + sec = rng; + sc_reduce32(&sec); // reduce in case second round of keys (sendkeys) + + ge_scalarmult_base(&point, &sec); + ge_p3_tobytes(&pub, &point); + + return rng; + } + + bool crypto_ops::check_key(const public_key &key) { + ge_p3 point; + return ge_frombytes_vartime(&point, &key) == 0; + } + + bool crypto_ops::secret_key_to_public_key(const secret_key &sec, public_key &pub) { + ge_p3 point; + if (sc_check(&sec) != 0) { + return false; + } + ge_scalarmult_base(&point, &sec); + ge_p3_tobytes(&pub, &point); + return true; + } + + bool crypto_ops::generate_key_derivation(const public_key &key1, const secret_key &key2, key_derivation &derivation) { + ge_p3 point; + ge_p2 point2; + ge_p1p1 point3; + assert(sc_check(&key2) == 0); + if (ge_frombytes_vartime(&point, &key1) != 0) { + return false; + } + ge_scalarmult(&point2, &key2, &point); + ge_mul8(&point3, &point2); + ge_p1p1_to_p2(&point2, &point3); + ge_tobytes(&derivation, &point2); + return true; + } + + static void derivation_to_scalar(const key_derivation &derivation, size_t output_index, ec_scalar &res) { + struct { + key_derivation derivation; + char output_index[(sizeof(size_t) * 8 + 6) / 7]; + } buf; + char *end = buf.output_index; + buf.derivation = derivation; + tools::write_varint(end, output_index); + assert(end <= buf.output_index + sizeof buf.output_index); + hash_to_scalar(&buf, end - reinterpret_cast(&buf), res); + } + + bool crypto_ops::derive_public_key(const key_derivation &derivation, size_t output_index, + const public_key &base, public_key &derived_key) { + ec_scalar scalar; + ge_p3 point1; + ge_p3 point2; + ge_cached point3; + ge_p1p1 point4; + ge_p2 point5; + if (ge_frombytes_vartime(&point1, &base) != 0) { + return false; + } + derivation_to_scalar(derivation, output_index, scalar); + ge_scalarmult_base(&point2, &scalar); + ge_p3_to_cached(&point3, &point2); + ge_add(&point4, &point1, &point3); + ge_p1p1_to_p2(&point5, &point4); + ge_tobytes(&derived_key, &point5); + return true; + } + + void crypto_ops::derive_secret_key(const key_derivation &derivation, size_t output_index, + const secret_key &base, secret_key &derived_key) { + ec_scalar scalar; + assert(sc_check(&base) == 0); + derivation_to_scalar(derivation, output_index, scalar); + sc_add(&derived_key, &base, &scalar); + } + + struct s_comm { + hash h; + ec_point key; + ec_point comm; + }; + + void crypto_ops::generate_signature(const hash &prefix_hash, const public_key &pub, const secret_key &sec, signature &sig) { + lock_guard lock(random_lock); + ge_p3 tmp3; + ec_scalar k; + //ec_scalar k = {{0xbf, 0x4b, 0xa0, 0xc8, 0x81, 0xda, 0x40, 0xc9, 0x89, 0x29, 0x27, 0x75, 0x43, 0xe7, 0x38, 0x25, 0xb8, 0xcc, 0x5a, 0x73, 0x21, 0x8a, 0x12, 0x65, 0xa0, 0xf8, 0x33, 0x37, 0x60, 0x17, 0x92, 0x06}}; //uncomment for testing purposes + + s_comm buf; +#if !defined(NDEBUG) + { + ge_p3 t; + public_key t2; + assert(sc_check(&sec) == 0); + ge_scalarmult_base(&t, &sec); + ge_p3_tobytes(&t2, &t); + assert(pub == t2); + } +#endif + buf.h = prefix_hash; + buf.key = pub; + random_scalar(k); //fix a scalar k for testing purposes + + ge_scalarmult_base(&tmp3, &k); + ge_p3_tobytes(&buf.comm, &tmp3); + //printv(buf.comm.data, "comm"); //testing + hash_to_scalar(&buf, sizeof(s_comm), sig.c); + //printf("here2\n"); + sc_mulsub(&sig.r, &sig.c, &sec, &k); //k - c*sec mod l + } + + bool crypto_ops::check_signature(const hash &prefix_hash, const public_key &pub, const signature &sig) { + ge_p2 tmp2; + ge_p3 tmp3; + ec_scalar c; + s_comm buf; + assert(check_key(pub)); + buf.h = prefix_hash; + buf.key = pub; + if (ge_frombytes_vartime(&tmp3, &pub) != 0) { + abort(); + } + if (sc_check(&sig.c) != 0 || sc_check(&sig.r) != 0) { + return false; + } + ge_double_scalarmult_base_vartime(&tmp2, &sig.c, &tmp3, &sig.r); //tmp2 = cP + rG + ge_tobytes(&buf.comm, &tmp2); + hash_to_scalar(&buf, sizeof(s_comm), c); + sc_sub(&c, &c, &sig.c); + return sc_isnonzero(&c) == 0; + } + + static void hash_to_ec(const public_key &key, ge_p3 &res) { + hash h; + ge_p2 point; + ge_p1p1 point2; + cn_fast_hashh(std::addressof(key), sizeof(public_key), h); + ge_fromfe_frombytes_vartime(&point, reinterpret_cast(&h)); + ge_mul8(&point2, &point); + ge_p1p1_to_p3(&res, &point2); + } + + void crypto_ops::generate_key_image(const public_key &pub, const secret_key &sec, key_image &image) { + ge_p3 point; + ge_p2 point2; + assert(sc_check(&sec) == 0); + hash_to_ec(pub, point); + ge_scalarmult(&point2, &sec, &point); + ge_tobytes(&image, &point2); + } + + struct rs_comm { + hash h; + struct { + ec_point a, b; + } ab[]; + }; + + static inline size_t rs_comm_size(size_t pubs_count) { + return sizeof(rs_comm) + pubs_count * sizeof(rs_comm().ab[0]); + } + + void crypto_ops::generate_ring_signature(const hash &prefix_hash, const key_image &image, + const public_key *const *pubs, size_t pubs_count, + const secret_key &sec, size_t sec_index, + signature *sig) { + lock_guard lock(random_lock); + size_t i; + ge_p3 image_unp; + ge_dsmp image_pre; + ec_scalar sum, k, h; + rs_comm *const buf = reinterpret_cast(alloca(rs_comm_size(pubs_count))); + assert(sec_index < pubs_count); +#if !defined(NDEBUG) + { + ge_p3 t; + public_key t2; + key_image t3; + assert(sc_check(&sec) == 0); + ge_scalarmult_base(&t, &sec); + ge_p3_tobytes(&t2, &t); + assert(*pubs[sec_index] == t2); + generate_key_image(*pubs[sec_index], sec, t3); + assert(image == t3); + for (i = 0; i < pubs_count; i++) { + assert(check_key(*pubs[i])); + } + } +#endif + if (ge_frombytes_vartime(&image_unp, &image) != 0) { + abort(); + } + ge_dsm_precomp(image_pre, &image_unp); + sc_0(&sum); + buf->h = prefix_hash; + for (i = 0; i < pubs_count; i++) { + ge_p2 tmp2; + ge_p3 tmp3; + if (i == sec_index) { + random_scalar(k); + ge_scalarmult_base(&tmp3, &k); + ge_p3_tobytes(&buf->ab[i].a, &tmp3); + hash_to_ec(*pubs[i], tmp3); + ge_scalarmult(&tmp2, &k, &tmp3); + ge_tobytes(&buf->ab[i].b, &tmp2); + } else { + random_scalar(sig[i].c); + random_scalar(sig[i].r); + if (ge_frombytes_vartime(&tmp3, &*pubs[i]) != 0) { + abort(); + } + ge_double_scalarmult_base_vartime(&tmp2, &sig[i].c, &tmp3, &sig[i].r); + ge_tobytes(&buf->ab[i].a, &tmp2); + hash_to_ec(*pubs[i], tmp3); + ge_double_scalarmult_precomp_vartime(&tmp2, &sig[i].r, &tmp3, &sig[i].c, image_pre); + ge_tobytes(&buf->ab[i].b, &tmp2); + sc_add(&sum, &sum, &sig[i].c); + } + } + hash_to_scalar(buf, rs_comm_size(pubs_count), h); + sc_sub(&sig[sec_index].c, &h, &sum); + sc_mulsub(&sig[sec_index].r, &sig[sec_index].c, &sec, &k); + } + + bool crypto_ops::check_ring_signature(const hash &prefix_hash, const key_image &image, + const public_key *const *pubs, size_t pubs_count, + const signature *sig) { + size_t i; + ge_p3 image_unp; + ge_dsmp image_pre; + ec_scalar sum, h; + rs_comm *const buf = reinterpret_cast(alloca(rs_comm_size(pubs_count))); +#if !defined(NDEBUG) + for (i = 0; i < pubs_count; i++) { + assert(check_key(*pubs[i])); + } +#endif + if (ge_frombytes_vartime(&image_unp, &image) != 0) { + return false; + } + ge_dsm_precomp(image_pre, &image_unp); + sc_0(&sum); + buf->h = prefix_hash; + for (i = 0; i < pubs_count; i++) { + ge_p2 tmp2; + ge_p3 tmp3; + if (sc_check(&sig[i].c) != 0 || sc_check(&sig[i].r) != 0) { + return false; + } + if (ge_frombytes_vartime(&tmp3, &*pubs[i]) != 0) { + abort(); + } + ge_double_scalarmult_base_vartime(&tmp2, &sig[i].c, &tmp3, &sig[i].r); + ge_tobytes(&buf->ab[i].a, &tmp2); + hash_to_ec(*pubs[i], tmp3); + ge_double_scalarmult_precomp_vartime(&tmp2, &sig[i].r, &tmp3, &sig[i].c, image_pre); + ge_tobytes(&buf->ab[i].b, &tmp2); + sc_add(&sum, &sum, &sig[i].c); + } + hash_to_scalar(buf, rs_comm_size(pubs_count), h); + sc_sub(&h, &h, &sum); + return sc_isnonzero(&h) == 0; + } +} + +CRYPTO_MAKE_HASHABLE(hash) //these are in generic-ops.h +CRYPTO_MAKE_COMPARABLE(hash8) diff --git a/source-code/RingCT/crypto.h b/source-code/RingCT/crypto.h new file mode 100644 index 0000000..1791b3e --- /dev/null +++ b/source-code/RingCT/crypto.h @@ -0,0 +1,258 @@ +#pragma once + +#include +#include +#include + +#include "generic-ops.h" + +#include "crypto-ops.h" +#include "random.h" +#include "keccak.h" + + + +#include "hash-ops.h" + +namespace crypto { + + extern "C" { +#include "random.h" + + } + + extern std::mutex random_lock; + + + +#pragma pack(push, 1) + + struct hash { + char data[HASH_SIZE]; //HASH_SIZE = 32 I believe.. + }; + struct hash8 { + char data[8]; + }; + + static_assert(sizeof(hash) == HASH_SIZE, "Invalid structure size"); + static_assert(sizeof(hash8) == 8, "Invalid structure size"); + + /* + Cryptonight hash functions + */ + + inline void hash_permutation(union hash_state *state) { + keccakf((uint64_t*)state, 24); + } + + inline void hash_process(union hash_state *state, const uint8_t *buf, size_t count) { + + keccak1600(buf, count, (uint8_t*)state); + } + + inline void cn_fast_hash(const void *data, size_t length, char * hash) { + uint8_t md2[32]; + int j = 0; + //printf("length: %d\n", (int)sizeof(data)); + keccak((uint8_t *) data, (int)sizeof(data), md2, 32); //note for signatures, you need 96, for just hashing a key you need 32, so it's really best to be able to detect + for (j= 0 ; j < 32 ; j++) { + hash[j] = (unsigned char)md2[j]; + } + } + + + + inline void cn_fast_hashh(const void *data, std::size_t length, hash &hash) { + cn_fast_hash(data, length, reinterpret_cast(&hash)); + } + + inline hash cn_fast_hash2(const void *data, std::size_t length) { + hash h; + cn_fast_hash(data, length, reinterpret_cast(&h)); + return h; + } + + + + struct ec_point { + char data[32]; + }; + + struct ec_scalar { + char data[32]; + }; + + struct public_key: ec_point { + friend class crypto_ops; + }; + + struct secret_key: ec_scalar { + friend class crypto_ops; + }; + + struct public_keyV { + std::vector keys; + int rows; + }; + + struct secret_keyV { + std::vector keys; + int rows; + }; + + struct public_keyM { + int cols; + int rows; + std::vector column_vectors; + }; + + struct key_derivation: ec_point { + friend class crypto_ops; + }; + + struct key_image: ec_point { + friend class crypto_ops; + }; + + struct signature { + ec_scalar c, r; + friend class crypto_ops; + }; +#pragma pack(pop) + + static_assert(sizeof(ec_point) == 32 && sizeof(ec_scalar) == 32 && + sizeof(public_key) == 32 && sizeof(secret_key) == 32 && + sizeof(key_derivation) == 32 && sizeof(key_image) == 32 && + sizeof(signature) == 64, "Invalid structure size"); + + class crypto_ops { + crypto_ops(); + crypto_ops(const crypto_ops &); + void operator=(const crypto_ops &); + ~crypto_ops(); + + static secret_key generate_keys(public_key &pub, secret_key &sec, const secret_key& recovery_key = secret_key(), bool recover = false); + friend secret_key generate_keys(public_key &pub, secret_key &sec, const secret_key& recovery_key, bool recover); + static bool check_key(const public_key &); + friend bool check_key(const public_key &); + static bool secret_key_to_public_key(const secret_key &, public_key &); + friend bool secret_key_to_public_key(const secret_key &, public_key &); + static bool generate_key_derivation(const public_key &, const secret_key &, key_derivation &); + friend bool generate_key_derivation(const public_key &, const secret_key &, key_derivation &); + static bool derive_public_key(const key_derivation &, std::size_t, const public_key &, public_key &); + friend bool derive_public_key(const key_derivation &, std::size_t, const public_key &, public_key &); + static void derive_secret_key(const key_derivation &, std::size_t, const secret_key &, secret_key &); + friend void derive_secret_key(const key_derivation &, std::size_t, const secret_key &, secret_key &); + static void generate_signature(const hash &, const public_key &, const secret_key &, signature &); + friend void generate_signature(const hash &, const public_key &, const secret_key &, signature &); + static bool check_signature(const hash &, const public_key &, const signature &); + friend bool check_signature(const hash &, const public_key &, const signature &); + static void generate_key_image(const public_key &, const secret_key &, key_image &); + friend void generate_key_image(const public_key &, const secret_key &, key_image &); + static void generate_ring_signature(const hash &, const key_image &, + const public_key *const *, std::size_t, const secret_key &, std::size_t, signature *); + friend void generate_ring_signature(const hash &, const key_image &, + const public_key *const *, std::size_t, const secret_key &, std::size_t, signature *); + static bool check_ring_signature(const hash &, const key_image &, + const public_key *const *, std::size_t, const signature *); + friend bool check_ring_signature(const hash &, const key_image &, + const public_key *const *, std::size_t, const signature *); + }; + + /* Generate a value filled with random bytes. + */ + template + typename std::enable_if::value, T>::type rand() { + typename std::remove_cv::type res; + std::lock_guard lock(random_lock); + generate_random_bytes(sizeof(T), &res); + return res; + } + + /* Generate a new key pair + */ + inline secret_key generate_keys(public_key &pub, secret_key &sec, const secret_key& recovery_key = secret_key(), bool recover = false) { + return crypto_ops::generate_keys(pub, sec, recovery_key, recover); + } + + + /* Check a public key. Returns true if it is valid, false otherwise. + */ + inline bool check_key(const public_key &key) { + return crypto_ops::check_key(key); + } + + /* Checks a private key and computes the corresponding public key. + */ + inline bool secret_key_to_public_key(const secret_key &sec, public_key &pub) { + return crypto_ops::secret_key_to_public_key(sec, pub); + } + + /* To generate an ephemeral key used to send money to: + * * The sender generates a new key pair, which becomes the transaction key. The public transaction key is included in "extra" field. + * * Both the sender and the receiver generate key derivation from the transaction key, the receivers' "view" key and the output index. + * * The sender uses key derivation and the receivers' "spend" key to derive an ephemeral public key. + * * The receiver can either derive the public key (to check that the transaction is addressed to him) or the private key (to spend the money). + */ + inline bool generate_key_derivation(const public_key &key1, const secret_key &key2, key_derivation &derivation) { + return crypto_ops::generate_key_derivation(key1, key2, derivation); + } + inline bool derive_public_key(const key_derivation &derivation, std::size_t output_index, + const public_key &base, public_key &derived_key) { + return crypto_ops::derive_public_key(derivation, output_index, base, derived_key); + } + inline void derive_secret_key(const key_derivation &derivation, std::size_t output_index, + const secret_key &base, secret_key &derived_key) { + crypto_ops::derive_secret_key(derivation, output_index, base, derived_key); + } + + /* Generation and checking of a standard signature. + */ + inline void generate_signature(const hash &prefix_hash, const public_key &pub, const secret_key &sec, signature &sig) { + crypto_ops::generate_signature(prefix_hash, pub, sec, sig); + } + inline bool check_signature(const hash &prefix_hash, const public_key &pub, const signature &sig) { + return crypto_ops::check_signature(prefix_hash, pub, sig); + } + + /* To send money to a key: + * * The sender generates an ephemeral key and includes it in transaction output. + * * To spend the money, the receiver generates a key image from it. + * * Then he selects a bunch of outputs, including the one he spends, and uses them to generate a ring signature. + * To check the signature, it is necessary to collect all the keys that were used to generate it. To detect double spends, it is necessary to check that each key image is used at most once. + */ + inline void generate_key_image(const public_key &pub, const secret_key &sec, key_image &image) { + crypto_ops::generate_key_image(pub, sec, image); + } + inline void generate_ring_signature(const hash &prefix_hash, const key_image &image, + const public_key *const *pubs, std::size_t pubs_count, + const secret_key &sec, std::size_t sec_index, + signature *sig) { + crypto_ops::generate_ring_signature(prefix_hash, image, pubs, pubs_count, sec, sec_index, sig); + } + inline bool check_ring_signature(const hash &prefix_hash, const key_image &image, + const public_key *const *pubs, std::size_t pubs_count, + const signature *sig) { + return crypto_ops::check_ring_signature(prefix_hash, image, pubs, pubs_count, sig); + } + + /* Variants with vector parameters. + */ + inline void generate_ring_signature(const hash &prefix_hash, const key_image &image, + const std::vector &pubs, + const secret_key &sec, std::size_t sec_index, + signature *sig) { + generate_ring_signature(prefix_hash, image, pubs.data(), pubs.size(), sec, sec_index, sig); + } + inline bool check_ring_signature(const hash &prefix_hash, const key_image &image, + const std::vector &pubs, + const signature *sig) { + return check_ring_signature(prefix_hash, image, pubs.data(), pubs.size(), sig); + } + + +} + +CRYPTO_MAKE_COMPARABLE(public_key) +CRYPTO_MAKE_HASHABLE(key_image) +CRYPTO_MAKE_COMPARABLE(signature) diff --git a/source-code/RingCT/generic-ops.h b/source-code/RingCT/generic-ops.h new file mode 100644 index 0000000..6c419ac --- /dev/null +++ b/source-code/RingCT/generic-ops.h @@ -0,0 +1,32 @@ +#pragma once + +#include +#include +#include + +#define CRYPTO_MAKE_COMPARABLE(type) \ +namespace crypto { \ + inline bool operator==(const type &_v1, const type &_v2) { \ + return std::memcmp(&_v1, &_v2, sizeof(type)) == 0; \ + } \ + inline bool operator!=(const type &_v1, const type &_v2) { \ + return std::memcmp(&_v1, &_v2, sizeof(type)) != 0; \ + } \ +} + +#define CRYPTO_MAKE_HASHABLE(type) \ +CRYPTO_MAKE_COMPARABLE(type) \ +namespace crypto { \ + static_assert(sizeof(std::size_t) <= sizeof(type), "Size of " #type " must be at least that of size_t"); \ + inline std::size_t hash_value(const type &_v) { \ + return reinterpret_cast(_v); \ + } \ +} \ +namespace std { \ + template<> \ + struct hash { \ + std::size_t operator()(const crypto::type &_v) const { \ + return reinterpret_cast(_v); \ + } \ + }; \ +} diff --git a/source-code/RingCT/hash-ops.h b/source-code/RingCT/hash-ops.h new file mode 100644 index 0000000..2a7c3fd --- /dev/null +++ b/source-code/RingCT/hash-ops.h @@ -0,0 +1,44 @@ +#pragma once + +#include +#include +#include +#include + +#include "int-util.h" +#include "warnings.h" +//#include "crypto.h" + +static inline void *padd(void *p, size_t i) { + return (char *) p + i; +} + +static inline const void *cpadd(const void *p, size_t i) { + return (const char *) p + i; +} + +static_assert(sizeof(size_t) == 4 || sizeof(size_t) == 8, "size_t must be 4 or 8 bytes long"); +static inline void place_length(uint8_t *buffer, size_t bufsize, size_t length) { + if (sizeof(size_t) == 4) { + *(uint32_t *) padd(buffer, bufsize - 4) = swap32be(length); + } else { + *(uint64_t *) padd(buffer, bufsize - 8) = swap64be(length); + } +} + +#pragma pack(push, 1) +union hash_state { + uint8_t b[200]; + uint64_t w[25]; +}; +#pragma pack(pop) +static_assert(sizeof(union hash_state) == 200, "Invalid structure size"); + +void hash_permutation(union hash_state *state); + +enum { + HASH_SIZE = 32, + HASH_DATA_AREA = 136 +}; + +//void cn_fast_hash(const void *data, size_t length, char *hash); diff --git a/source-code/RingCT/initializer.h b/source-code/RingCT/initializer.h new file mode 100644 index 0000000..44c24c1 --- /dev/null +++ b/source-code/RingCT/initializer.h @@ -0,0 +1,28 @@ +#pragma once + +#if defined(__GNUC__) +#define INITIALIZER(name) __attribute__((constructor(101))) static void name(void) +#define FINALIZER(name) __attribute__((destructor(101))) static void name(void) +#define REGISTER_FINALIZER(name) ((void) 0) + +#elif defined(_MSC_VER) +#include +#include +// http://stackoverflow.com/questions/1113409/attribute-constructor-equivalent-in-vc +// http://msdn.microsoft.com/en-us/library/bb918180.aspx +#pragma section(".CRT$XCT", read) +#define INITIALIZER(name) \ + static void __cdecl name(void); \ + __declspec(allocate(".CRT$XCT")) void (__cdecl *const _##name)(void) = &name; \ + static void __cdecl name(void) +#define FINALIZER(name) \ + static void __cdecl name(void) +#define REGISTER_FINALIZER(name) \ + do { \ + int _res = atexit(name); \ + assert(_res == 0); \ + } while (0); + +#else +#error Unsupported compiler +#endif diff --git a/source-code/RingCT/int-util.h b/source-code/RingCT/int-util.h new file mode 100644 index 0000000..9643867 --- /dev/null +++ b/source-code/RingCT/int-util.h @@ -0,0 +1,201 @@ +#pragma once + +#include +#include +#include +#include +#include "param.h" + +#if defined(_MSC_VER) +#include + +static inline uint32_t rol32(uint32_t x, int r) { + static_assert(sizeof(uint32_t) == sizeof(unsigned int), "this code assumes 32-bit integers"); + return _rotl(x, r); +} + +static inline uint64_t rol64(uint64_t x, int r) { + return _rotl64(x, r); +} + +#else + +static inline uint32_t rol32(uint32_t x, int r) { + return (x << (r & 31)) | (x >> (-r & 31)); +} + +static inline uint64_t rol64(uint64_t x, int r) { + return (x << (r & 63)) | (x >> (-r & 63)); +} + +#endif + +static inline uint64_t hi_dword(uint64_t val) { + return val >> 32; +} + +static inline uint64_t lo_dword(uint64_t val) { + return val & 0xFFFFFFFF; +} + +static inline uint64_t mul128(uint64_t multiplier, uint64_t multiplicand, uint64_t* product_hi) { + // multiplier = ab = a * 2^32 + b + // multiplicand = cd = c * 2^32 + d + // ab * cd = a * c * 2^64 + (a * d + b * c) * 2^32 + b * d + uint64_t a = hi_dword(multiplier); + uint64_t b = lo_dword(multiplier); + uint64_t c = hi_dword(multiplicand); + uint64_t d = lo_dword(multiplicand); + + uint64_t ac = a * c; + uint64_t ad = a * d; + uint64_t bc = b * c; + uint64_t bd = b * d; + + uint64_t adbc = ad + bc; + uint64_t adbc_carry = adbc < ad ? 1 : 0; + + // multiplier * multiplicand = product_hi * 2^64 + product_lo + uint64_t product_lo = bd + (adbc << 32); + uint64_t product_lo_carry = product_lo < bd ? 1 : 0; + *product_hi = ac + (adbc >> 32) + (adbc_carry << 32) + product_lo_carry; + assert(ac <= *product_hi); + + return product_lo; +} + +static inline uint64_t div_with_reminder(uint64_t dividend, uint32_t divisor, uint32_t* remainder) { + dividend |= ((uint64_t)*remainder) << 32; + *remainder = dividend % divisor; + return dividend / divisor; +} + +// Long division with 2^32 base +static inline uint32_t div128_32(uint64_t dividend_hi, uint64_t dividend_lo, uint32_t divisor, uint64_t* quotient_hi, uint64_t* quotient_lo) { + uint64_t dividend_dwords[4]; + uint32_t remainder = 0; + + dividend_dwords[3] = hi_dword(dividend_hi); + dividend_dwords[2] = lo_dword(dividend_hi); + dividend_dwords[1] = hi_dword(dividend_lo); + dividend_dwords[0] = lo_dword(dividend_lo); + + *quotient_hi = div_with_reminder(dividend_dwords[3], divisor, &remainder) << 32; + *quotient_hi |= div_with_reminder(dividend_dwords[2], divisor, &remainder); + *quotient_lo = div_with_reminder(dividend_dwords[1], divisor, &remainder) << 32; + *quotient_lo |= div_with_reminder(dividend_dwords[0], divisor, &remainder); + + return remainder; +} + +#define IDENT32(x) ((uint32_t) (x)) +#define IDENT64(x) ((uint64_t) (x)) + +#define SWAP32(x) ((((uint32_t) (x) & 0x000000ff) << 24) | \ + (((uint32_t) (x) & 0x0000ff00) << 8) | \ + (((uint32_t) (x) & 0x00ff0000) >> 8) | \ + (((uint32_t) (x) & 0xff000000) >> 24)) +#define SWAP64(x) ((((uint64_t) (x) & 0x00000000000000ff) << 56) | \ + (((uint64_t) (x) & 0x000000000000ff00) << 40) | \ + (((uint64_t) (x) & 0x0000000000ff0000) << 24) | \ + (((uint64_t) (x) & 0x00000000ff000000) << 8) | \ + (((uint64_t) (x) & 0x000000ff00000000) >> 8) | \ + (((uint64_t) (x) & 0x0000ff0000000000) >> 24) | \ + (((uint64_t) (x) & 0x00ff000000000000) >> 40) | \ + (((uint64_t) (x) & 0xff00000000000000) >> 56)) + +static inline uint32_t ident32(uint32_t x) { return x; } +static inline uint64_t ident64(uint64_t x) { return x; } + +static inline uint32_t swap32(uint32_t x) { + x = ((x & 0x00ff00ff) << 8) | ((x & 0xff00ff00) >> 8); + return (x << 16) | (x >> 16); +} +static inline uint64_t swap64(uint64_t x) { + x = ((x & 0x00ff00ff00ff00ff) << 8) | ((x & 0xff00ff00ff00ff00) >> 8); + x = ((x & 0x0000ffff0000ffff) << 16) | ((x & 0xffff0000ffff0000) >> 16); + return (x << 32) | (x >> 32); +} + +#if defined(__GNUC__) +#define UNUSED __attribute__((unused)) +#else +#define UNUSED +#endif +static inline void mem_inplace_ident(void *mem UNUSED, size_t n UNUSED) { } +#undef UNUSED + +static inline void mem_inplace_swap32(void *mem, size_t n) { + size_t i; + for (i = 0; i < n; i++) { + ((uint32_t *) mem)[i] = swap32(((const uint32_t *) mem)[i]); + } +} +static inline void mem_inplace_swap64(void *mem, size_t n) { + size_t i; + for (i = 0; i < n; i++) { + ((uint64_t *) mem)[i] = swap64(((const uint64_t *) mem)[i]); + } +} + +static inline void memcpy_ident32(void *dst, const void *src, size_t n) { + memcpy(dst, src, 4 * n); +} +static inline void memcpy_ident64(void *dst, const void *src, size_t n) { + memcpy(dst, src, 8 * n); +} + +static inline void memcpy_swap32(void *dst, const void *src, size_t n) { + size_t i; + for (i = 0; i < n; i++) { + ((uint32_t *) dst)[i] = swap32(((const uint32_t *) src)[i]); + } +} +static inline void memcpy_swap64(void *dst, const void *src, size_t n) { + size_t i; + for (i = 0; i < n; i++) { + ((uint64_t *) dst)[i] = swap64(((const uint64_t *) src)[i]); + } +} + +#if !defined(BYTE_ORDER) || !defined(LITTLE_ENDIAN) || !defined(BIG_ENDIAN) +static_assert(false, "BYTE_ORDER is undefined. Perhaps, GNU extensions are not enabled"); +#endif + +#if BYTE_ORDER == LITTLE_ENDIAN +#define SWAP32LE IDENT32 +#define SWAP32BE SWAP32 +#define swap32le ident32 +#define swap32be swap32 +#define mem_inplace_swap32le mem_inplace_ident +#define mem_inplace_swap32be mem_inplace_swap32 +#define memcpy_swap32le memcpy_ident32 +#define memcpy_swap32be memcpy_swap32 +#define SWAP64LE IDENT64 +#define SWAP64BE SWAP64 +#define swap64le ident64 +#define swap64be swap64 +#define mem_inplace_swap64le mem_inplace_ident +#define mem_inplace_swap64be mem_inplace_swap64 +#define memcpy_swap64le memcpy_ident64 +#define memcpy_swap64be memcpy_swap64 +#endif + +#if BYTE_ORDER == BIG_ENDIAN +#define SWAP32BE IDENT32 +#define SWAP32LE SWAP32 +#define swap32be ident32 +#define swap32le swap32 +#define mem_inplace_swap32be mem_inplace_ident +#define mem_inplace_swap32le mem_inplace_swap32 +#define memcpy_swap32be memcpy_ident32 +#define memcpy_swap32le memcpy_swap32 +#define SWAP64BE IDENT64 +#define SWAP64LE SWAP64 +#define swap64be ident64 +#define swap64le swap64 +#define mem_inplace_swap64be mem_inplace_ident +#define mem_inplace_swap64le mem_inplace_swap64 +#define memcpy_swap64be memcpy_ident64 +#define memcpy_swap64le memcpy_swap64 +#endif diff --git a/source-code/RingCT/keccak.c b/source-code/RingCT/keccak.c new file mode 100644 index 0000000..97cbc62 --- /dev/null +++ b/source-code/RingCT/keccak.c @@ -0,0 +1,115 @@ +// keccak.c +// 19-Nov-11 Markku-Juhani O. Saarinen +// A baseline Keccak (3rd round) implementation. +// + +#include "hash-ops.h" +#include "keccak.h" + +const uint64_t keccakf_rndc[24] = +{ + 0x0000000000000001, 0x0000000000008082, 0x800000000000808a, + 0x8000000080008000, 0x000000000000808b, 0x0000000080000001, + 0x8000000080008081, 0x8000000000008009, 0x000000000000008a, + 0x0000000000000088, 0x0000000080008009, 0x000000008000000a, + 0x000000008000808b, 0x800000000000008b, 0x8000000000008089, + 0x8000000000008003, 0x8000000000008002, 0x8000000000000080, + 0x000000000000800a, 0x800000008000000a, 0x8000000080008081, + 0x8000000000008080, 0x0000000080000001, 0x8000000080008008 +}; + +const int keccakf_rotc[24] = +{ + 1, 3, 6, 10, 15, 21, 28, 36, 45, 55, 2, 14, + 27, 41, 56, 8, 25, 43, 62, 18, 39, 61, 20, 44 +}; + +const int keccakf_piln[24] = +{ + 10, 7, 11, 17, 18, 3, 5, 16, 8, 21, 24, 4, + 15, 23, 19, 13, 12, 2, 20, 14, 22, 9, 6, 1 +}; + +// update the state with given number of rounds + +void keccakf(uint64_t st[25], int rounds) +{ + int i, j, round; + uint64_t t, bc[5]; + + for (round = 0; round < rounds; round++) { + + // Theta + for (i = 0; i < 5; i++) + bc[i] = st[i] ^ st[i + 5] ^ st[i + 10] ^ st[i + 15] ^ st[i + 20]; + + for (i = 0; i < 5; i++) { + t = bc[(i + 4) % 5] ^ ROTL64(bc[(i + 1) % 5], 1); + for (j = 0; j < 25; j += 5) + st[j + i] ^= t; + } + + // Rho Pi + t = st[1]; + for (i = 0; i < 24; i++) { + j = keccakf_piln[i]; + bc[0] = st[j]; + st[j] = ROTL64(t, keccakf_rotc[i]); + t = bc[0]; + } + + // Chi + for (j = 0; j < 25; j += 5) { + for (i = 0; i < 5; i++) + bc[i] = st[j + i]; + for (i = 0; i < 5; i++) + st[j + i] ^= (~bc[(i + 1) % 5]) & bc[(i + 2) % 5]; + } + + // Iota + st[0] ^= keccakf_rndc[round]; + } +} + +// compute a keccak hash (md) of given byte length from "in" +typedef uint64_t state_t[25]; + +//Changed inlen to size_t (s.n. MRL labs) +int keccak(const uint8_t *in, std::size_t inlen, uint8_t *md, int mdlen) +{ + state_t st; + uint8_t temp[144]; + std::size_t i, rsiz, rsizw; + + rsiz = sizeof(state_t) == mdlen ? HASH_DATA_AREA : 200 - 2 * mdlen; + rsizw = rsiz / 8; + + memset(st, 0, sizeof(st)); + + for ( ; inlen >= rsiz; inlen -= rsiz, in += rsiz) { + for (i = 0; i < rsizw; i++) + st[i] ^= ((uint64_t *) in)[i]; + keccakf(st, KECCAK_ROUNDS); + } + + // last block and padding + memcpy(temp, in, inlen); + temp[inlen++] = 1; + memset(temp + inlen, 0, rsiz - inlen); + temp[rsiz - 1] |= 0x80; + + for (i = 0; i < rsizw; i++) + st[i] ^= ((uint64_t *) temp)[i]; + + keccakf(st, KECCAK_ROUNDS); + + memcpy(md, st, mdlen); + + return 0; +} + +//Changed inlen to size_t (s.n. MRL labs) +void keccak1600(const uint8_t *in, std::size_t inlen, uint8_t *md) +{ + keccak(in, inlen, md, sizeof(state_t)); +} diff --git a/source-code/RingCT/keccak.h b/source-code/RingCT/keccak.h new file mode 100644 index 0000000..f8933a6 --- /dev/null +++ b/source-code/RingCT/keccak.h @@ -0,0 +1,29 @@ +// keccak.h +// 19-Nov-11 Markku-Juhani O. Saarinen + + +#ifndef keccak_H +#define keccak_H +#include +#include +#include + +#ifndef KECCAK_ROUNDS +#define KECCAK_ROUNDS 24 +#endif + +#ifndef ROTL64 +#define ROTL64(x, y) (((x) << (y)) | ((x) >> (64 - (y)))) +#endif + +//Changed inlen to size_t (s.n. MRL labs) +// compute a keccak hash (md) of given byte length from "in" +int keccak(const uint8_t *in, std::size_t inlen, uint8_t *md, int mdlen); + +// update the state +void keccakf(uint64_t st[25], int norounds); + +//Changed inlen to size_t (s.n. MRL labs) +void keccak1600(const uint8_t *in, std::size_t inlen, uint8_t *md); + +#endif diff --git a/source-code/RingCT/param.h b/source-code/RingCT/param.h new file mode 100644 index 0000000..0db360a --- /dev/null +++ b/source-code/RingCT/param.h @@ -0,0 +1,36 @@ +// Copyright (c) 2014-2015, The Monero Project +// +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without modification, are +// permitted provided that the following conditions are met: +// +// 1. Redistributions of source code must retain the above copyright notice, this list of +// conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright notice, this list +// of conditions and the following disclaimer in the documentation and/or other +// materials provided with the distribution. +// +// 3. Neither the name of the copyright holder nor the names of its contributors may be +// used to endorse or promote products derived from this software without specific +// prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL +// THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF +// THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Parts of this file are originally copyright (c) 2012-2013 The Cryptonote developers + +#pragma once + +#define LITTLE_ENDIAN 1234 +#define BIG_ENDIAN 4321 +#define PDP_ENDIAN 3412 +#define BYTE_ORDER LITTLE_ENDIAN diff --git a/source-code/RingCT/random.c b/source-code/RingCT/random.c new file mode 100644 index 0000000..080cfa3 --- /dev/null +++ b/source-code/RingCT/random.c @@ -0,0 +1,114 @@ +#include +#include +#include + +#include "hash-ops.h" + +#include "initializer.h" +#include "random.h" + +static void generate_system_random_bytes(size_t n, void *result); + +#include +#include + +static void generate_system_random_bytes(size_t n, void *result) { + HCRYPTPROV prov; +#define must_succeed(x) do if (!(x)) assert(0); while (0) + must_succeed(CryptAcquireContext(&prov, NULL, NULL, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT | CRYPT_SILENT)); + must_succeed(CryptGenRandom(prov, (DWORD)n, result)); + must_succeed(CryptReleaseContext(prov, 0)); +#undef must_succeed +} + +//uncomment for nix +/* + +#include +#include +#include +#include +#include +#include +#include + +static void generate_system_random_bytes(size_t n, void *result) { + int fd; + if ((fd = open("/dev/urandom", O_RDONLY | O_NOCTTY | O_CLOEXEC)) < 0) { + err(EXIT_FAILURE, "open /dev/urandom"); + } + for (;;) { + ssize_t res = read(fd, result, n); + if ((size_t) res == n) { + break; + } + if (res < 0) { + if (errno != EINTR) { + err(EXIT_FAILURE, "read /dev/urandom"); + } + } else if (res == 0) { + errx(EXIT_FAILURE, "read /dev/urandom: end of file"); + } else { + result = padd(result, (size_t) res); + n -= (size_t) res; + } + } + if (close(fd) < 0) { + err(EXIT_FAILURE, "close /dev/urandom"); + } +} + +#endif +*/ + +static union hash_state state; + +#if !defined(NDEBUG) +static volatile int curstate; /* To catch thread safety problems. */ +#endif + +FINALIZER(deinit_random) { +#if !defined(NDEBUG) + assert(curstate == 1); + curstate = 0; +#endif + memset(&state, 0, sizeof(union hash_state)); +} + +INITIALIZER(init_random) { + generate_system_random_bytes(32, &state); + REGISTER_FINALIZER(deinit_random); +#if !defined(NDEBUG) + assert(curstate == 0); + curstate = 1; +#endif +} + +void generate_random_bytes(size_t n, void *result) { +#if !defined(NDEBUG) + assert(curstate == 1); + curstate = 2; +#endif + if (n == 0) { +#if !defined(NDEBUG) + assert(curstate == 2); + curstate = 1; +#endif + return; + } + for (;;) { + hash_permutation(&state); + if (n <= HASH_DATA_AREA) { + memcpy(result, &state, n); +#if !defined(NDEBUG) + assert(curstate == 2); + curstate = 1; +#endif + return; + } else { + memcpy(result, &state, HASH_DATA_AREA); + result = padd(result, HASH_DATA_AREA); + n -= HASH_DATA_AREA; + } + } +} diff --git a/source-code/RingCT/random.h b/source-code/RingCT/random.h new file mode 100644 index 0000000..f3c9d03 --- /dev/null +++ b/source-code/RingCT/random.h @@ -0,0 +1,11 @@ +#pragma once + +#include +#include "hash-ops.h" //needed for hash_permutation +#include "keccak.h" + +void generate_random_bytes(size_t n, void *result); +inline void hash_permutation(union hash_state *state) { + keccakf((uint64_t*)state, 24); +} //brought over from hash.h + diff --git a/source-code/RingCT/rctMSig.cpp b/source-code/RingCT/rctMSig.cpp new file mode 100644 index 0000000..df51e4f --- /dev/null +++ b/source-code/RingCT/rctMSig.cpp @@ -0,0 +1,37 @@ +// Copyright (c) 2016, Monero Research Labs +// +// Author: Shen Noether +// +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without modification, are +// permitted provided that the following conditions are met: +// +// 1. Redistributions of source code must retain the above copyright notice, this list of +// conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright notice, this list +// of conditions and the following disclaimer in the documentation and/or other +// materials provided with the distribution. +// +// 3. Neither the name of the copyright holder nor the names of its contributors may be +// used to endorse or promote products derived from this software without specific +// prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL +// THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF +// THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#include "rctMSig.h" +using namespace crypto; +using namespace std; + +namespace rct { + + } \ No newline at end of file diff --git a/source-code/RingCT/rctMSig.h b/source-code/RingCT/rctMSig.h new file mode 100644 index 0000000..681b761 --- /dev/null +++ b/source-code/RingCT/rctMSig.h @@ -0,0 +1,68 @@ +// Copyright (c) 2016, Monero Research Labs +// +// Author: Shen Noether +// +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without modification, are +// permitted provided that the following conditions are met: +// +// 1. Redistributions of source code must retain the above copyright notice, this list of +// conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright notice, this list +// of conditions and the following disclaimer in the documentation and/or other +// materials provided with the distribution. +// +// 3. Neither the name of the copyright holder nor the names of its contributors may be +// used to endorse or promote products derived from this software without specific +// prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL +// THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF +// THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#pragma once + +#define DBG + +#ifndef RCTSIGS_H +#define RCTSIGS_H + +#include +#include +#include +#include + +#include "generic-ops.h" + +#include "crypto-ops.h" +#include "random.h" +#include "keccak.h" +#include "crypto.h" + + +#include "rctTypes.h" +#include "rctOps.h" + + + + +using namespace std; +using namespace crypto; + +namespace rct { + + int i; + //rctSig genRMS(ctkeyV & inSk, ctkeyV & inPk, const keyV & destinations, const vector amounts, const int mixin); + + + +} +#endif diff --git a/source-code/RingCT/rctOps.cpp b/source-code/RingCT/rctOps.cpp new file mode 100644 index 0000000..7c2c4ff --- /dev/null +++ b/source-code/RingCT/rctOps.cpp @@ -0,0 +1,395 @@ +// Copyright (c) 2016, Monero Research Labs +// +// Author: Shen Noether +// +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without modification, are +// permitted provided that the following conditions are met: +// +// 1. Redistributions of source code must retain the above copyright notice, this list of +// conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright notice, this list +// of conditions and the following disclaimer in the documentation and/or other +// materials provided with the distribution. +// +// 3. Neither the name of the copyright holder nor the names of its contributors may be +// used to endorse or promote products derived from this software without specific +// prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL +// THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF +// THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#include "rctOps.h" +using namespace crypto; +using namespace std; + +namespace rct { + + //Various key initialization functions + + //Creates a zero scalar + void zero(key &zero) { + int i = 0; + for (i = 0; i < 32; i++) { + zero[i] = (unsigned char)(0x00); + } + } + + //Creates a zero scalar + key zero() { + return{ {0x00, 0x00, 0x00,0x00 , 0x00, 0x00, 0x00,0x00 , 0x00, 0x00, 0x00,0x00 , 0x00, 0x00, 0x00,0x00 , 0x00, 0x00, 0x00,0x00 , 0x00, 0x00, 0x00,0x00 , 0x00, 0x00, 0x00,0x00 , 0x00, 0x00, 0x00,0x00 } }; + } + + //Creates a zero elliptic curve point + void identity(key &Id) { + int i = 0; + Id[0] = (unsigned char)(0x01); + for (i = 1; i < 32; i++) { + Id[i] = (unsigned char)(0x00); + } + } + + //Creates a zero elliptic curve point + key identity() { + key Id; + int i = 0; + Id[0] = (unsigned char)(0x01); + for (i = 1; i < 32; i++) { + Id[i] = (unsigned char)(0x00); + } + return Id; + } + + //copies a scalar or point + void copy(key &AA, const key &A) { + int i = 0; + for (i = 0; i < 32; i++) { + AA[i] = A[i]; + } + } + + //copies a scalar or point + key copy(const key &A) { + int i = 0; + key AA; + for (i = 0; i < 32; i++) { + AA[i] = A[i]; + } + return AA; + } + + + //initializes a key matrix; + //first parameter is rows, + //second is columns + keyM keyMInit(int rows, int cols) { + keyM rv(cols); + int i = 0; + for (i = 0 ; i < cols ; i++) { + rv[i] = keyV(rows); + } + return rv; + } + + + + + //Various key generation functions + + //generates a random scalar which can be used as a secret key or mask + void skGen(key &sk) { + unsigned char tmp[64]; + generate_random_bytes(64, tmp); + sc_reduce(tmp); + memcpy(sk.bytes, tmp, 32); + } + + //generates a random scalar which can be used as a secret key or mask + key skGen() { + unsigned char tmp[64]; + generate_random_bytes(64, tmp); + sc_reduce(tmp); + key sk; + memcpy(sk.bytes, tmp, 32); + return sk; + } + + //Generates a vector of secret key + //Mainly used in testing + keyV skvGen(int rows ) { + keyV rv(rows); + int i = 0; + for (i = 0 ; i < rows ; i++) { + skGen(rv[i]); + } + return rv; + } + + //generates a random curve point (for testing) + key pkGen() { + key sk = skGen(); + key pk = scalarmultBase(sk); + return pk; + } + + //generates a random secret and corresponding public key + void skpkGen(key &sk, key &pk) { + skGen(sk); + scalarmultBase(pk, sk); + } + + //generates a random secret and corresponding public key + tuple skpkGen() { + key sk = skGen(); + key pk = scalarmultBase(sk); + return make_tuple(sk, pk); + } + + //generates a / Pedersen commitment to the amount + tuple ctskpkGen(xmr_amount amount) { + ctkey sk, pk; + skpkGen(sk.dest, pk.dest); + skpkGen(sk.mask, pk.mask); + key am = d2h(amount); + key aH = scalarmultH(am); + addKeys(pk.mask, pk.mask, aH); + return make_tuple(sk, pk); + } + + + //generates a / Pedersen commitment but takes bH as input + tuple ctskpkGen(key bH) { + ctkey sk, pk; + skpkGen(sk.dest, pk.dest); + skpkGen(sk.mask, pk.mask); + //key am = d2h(amount); + //key aH = scalarmultH(am); + addKeys(pk.mask, pk.mask, bH); + return make_tuple(sk, pk); + } + + //generates a random uint long long + xmr_amount randXmrAmount(xmr_amount upperlimit) { + return h2d(skGen()) % (upperlimit); + } + + //Scalar multiplications of curve points + + //does a * G where a is a scalar and G is the curve basepoint + void scalarmultBase(key &aG,const key &a) { + ge_p3 point; + sc_reduce32copy(aG.bytes, a.bytes); //do this beforehand! + ge_scalarmult_base(&point, aG.bytes); + ge_p3_tobytes(aG.bytes, &point); + } + + //does a * G where a is a scalar and G is the curve basepoint + key scalarmultBase(const key & a) { + ge_p3 point; + key aG; + sc_reduce32copy(aG.bytes, a.bytes); //do this beforehand + ge_scalarmult_base(&point, aG.bytes); + ge_p3_tobytes(aG.bytes, &point); + return aG; + } + + //does a * P where a is a scalar and P is an arbitrary point + void scalarmultKey(key & aP, const key &P, const key &a) { + ge_p3 A; + ge_p2 R; + ge_frombytes_vartime(&A, P.bytes); + ge_scalarmult(&R, a.bytes, &A); + ge_tobytes(aP.bytes, &R); + } + + //does a * P where a is a scalar and P is an arbitrary point + key scalarmultKey(const key & P, const key & a) { + ge_p3 A; + ge_p2 R; + ge_frombytes_vartime(&A, P.bytes); + ge_scalarmult(&R, a.bytes, &A); + key aP; + ge_tobytes(aP.bytes, &R); + return aP; + } + + + //Computes aH where H= toPoint(cn_fast_hash(G)), G the basepoint + key scalarmultH(const key & a) { + ge_p3 A; + ge_p2 R; + key Htmp = { {0x8b, 0x65, 0x59, 0x70, 0x15, 0x37, 0x99, 0xaf, 0x2a, 0xea, 0xdc, 0x9f, 0xf1, 0xad, 0xd0, 0xea, 0x6c, 0x72, 0x51, 0xd5, 0x41, 0x54, 0xcf, 0xa9, 0x2c, 0x17, 0x3a, 0x0d, 0xd3, 0x9c, 0x1f, 0x94} }; + ge_frombytes_vartime(&A, Htmp.bytes); + ge_scalarmult(&R, a.bytes, &A); + key aP; + ge_tobytes(aP.bytes, &R); + return aP; + } + + //Curve addition / subtractions + + //for curve points: AB = A + B + void addKeys(key &AB, const key &A, const key &B) { + ge_p3 B2, A2; + ge_frombytes_vartime(&B2, B.bytes); + ge_frombytes_vartime(&A2, A.bytes); + ge_cached tmp2; + ge_p3_to_cached(&tmp2, &B2); + ge_p1p1 tmp3; + ge_add(&tmp3, &A2, &tmp2); + key rv; + ge_p1p1_to_p3(&A2, &tmp3); + ge_p3_tobytes(AB.bytes, &A2); + } + + + //addKeys1 + //aGB = aG + B where a is a scalar, G is the basepoint, and B is a point + void addKeys1(key &aGB, const key &a, const key & B) { + key aG = scalarmultBase(a); + addKeys(aGB, aG, B); + } + + //addKeys2 + //aGbB = aG + bB where a, b are scalars, G is the basepoint and B is a point + void addKeys2(key &aGbB, const key &a, const key &b, const key & B) { + ge_p2 rv; + ge_p3 B2; + ge_frombytes_vartime(&B2, B.bytes); + ge_double_scalarmult_base_vartime(&rv, b.bytes, &B2, a.bytes); + ge_tobytes(aGbB.bytes, &rv); + } + + //Does some precomputation to make addKeys3 more efficient + // input B a curve point and output a ge_dsmp which has precomputation applied + void precomp(ge_dsmp rv, const key & B) { + ge_p3 B2; + ge_frombytes_vartime(&B2, B.bytes); + ge_dsm_precomp(rv, &B2); + } + + //addKeys3 + //aAbB = a*A + b*B where a, b are scalars, A, B are curve points + //B must be input after applying "precomp" + void addKeys3(key &aAbB, const key &a, const key &A, const key &b, const ge_dsmp B) { + ge_p2 rv; + ge_p3 A2; + ge_frombytes_vartime(&A2, A.bytes); + ge_double_scalarmult_precomp_vartime(&rv, a.bytes, &A2, b.bytes, B); + ge_tobytes(aAbB.bytes, &rv); + } + + + //subtract Keys (subtracts curve points) + //AB = A - B where A, B are curve points + void subKeys(key & AB, const key &A, const key &B) { + ge_p3 B2, A2; + ge_frombytes_vartime(&B2, B.bytes); + ge_frombytes_vartime(&A2, A.bytes); + ge_cached tmp2; + ge_p3_to_cached(&tmp2, &B2); + ge_p1p1 tmp3; + ge_sub(&tmp3, &A2, &tmp2); + ge_p1p1_to_p3(&A2, &tmp3); + ge_p3_tobytes(AB.bytes, &A2); + } + + //checks if A, B are equal as curve points + //without doing curve operations + bool equalKeys(key & a, key & b) { + key eqk; + sc_sub(eqk.bytes, cn_fast_hash(a).bytes, cn_fast_hash(b).bytes); + if (sc_isnonzero(eqk.bytes) ) { + DP("eq bytes"); + DP(eqk); + return false; + } + return true; + } + + //Hashing - cn_fast_hash + //be careful these are also in crypto namespace + //cn_fast_hash for arbitrary multiples of 32 bytes + void cn_fast_hash(key &hash, const void * data, const std::size_t l) { + uint8_t md2[32]; + int j = 0; + keccak((uint8_t *)data, l, md2, 32); + for (j = 0; j < 32; j++) { + hash[j] = (unsigned char)md2[j]; + } + sc_reduce32(hash.bytes); + } + + //cn_fast_hash for a 32 byte key + void cn_fast_hash(key & hash, const key & in) { + uint8_t md2[32]; + int j = 0; + keccak((uint8_t *)in.bytes, 32, md2, 32); + for (j = 0; j < 32; j++) { + hash[j] = (unsigned char)md2[j]; + } + sc_reduce32(hash.bytes); + } + + //cn_fast_hash for a 32 byte key + key cn_fast_hash(const key & in) { + uint8_t md2[32]; + int j = 0; + key hash; + keccak((uint8_t *)in.bytes, 32, md2, 32); + for (j = 0; j < 32; j++) { + hash[j] = (unsigned char)md2[j]; + } + sc_reduce32(hash.bytes); + return hash; + } + + //returns cn_fast_hash(input) * G where G is the basepoint + key hashToPoint(const key & in) { + return scalarmultBase(cn_fast_hash(in)); + } + + //returns cn_fast_hash(input) * G where G is the basepoint + void hashToPoint(key & out, const key & in) { + scalarmultBase(out, cn_fast_hash(in)); + } + + //sums a vector of curve points (for scalars use sc_add) + void sumKeys(key & Csum, const keyV & Cis) { + identity(Csum); + int i = 0; + for (i = 0; i < Cis.size(); i++) { + addKeys(Csum, Csum, Cis[i]); + } + } + + //Elliptic Curve Diffie Helman: encodes and decodes the amount b and mask a + // where C= aG + bH + void ecdhEncode(ecdhTuple & unmasked, const key & receiverPk) { + key esk; + //compute shared secret + skpkGen(esk, unmasked.senderPk); + key sharedSec1 = cn_fast_hash(scalarmultKey(receiverPk, esk)); + key sharedSec2 = cn_fast_hash(sharedSec1); + //encode + sc_add(unmasked.mask.bytes, unmasked.mask.bytes, sharedSec1.bytes); + sc_add(unmasked.amount.bytes, unmasked.amount.bytes, sharedSec1.bytes); + } + void ecdhDecode(ecdhTuple & masked, const key & receiverSk) { + //compute shared secret + key sharedSec1 = cn_fast_hash(scalarmultKey(masked.senderPk, receiverSk)); + key sharedSec2 = cn_fast_hash(sharedSec1); + //encode + sc_sub(masked.mask.bytes, masked.mask.bytes, sharedSec1.bytes); + sc_sub(masked.amount.bytes, masked.amount.bytes, sharedSec1.bytes); + } +} diff --git a/source-code/RingCT/rctOps.h b/source-code/RingCT/rctOps.h new file mode 100644 index 0000000..56568e0 --- /dev/null +++ b/source-code/RingCT/rctOps.h @@ -0,0 +1,144 @@ +#define DBG +// Copyright (c) 2016, Monero Research Labs +// +// Author: Shen Noether +// +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without modification, are +// permitted provided that the following conditions are met: +// +// 1. Redistributions of source code must retain the above copyright notice, this list of +// conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright notice, this list +// of conditions and the following disclaimer in the documentation and/or other +// materials provided with the distribution. +// +// 3. Neither the name of the copyright holder nor the names of its contributors may be +// used to endorse or promote products derived from this software without specific +// prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL +// THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF +// THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#pragma once + +#ifndef RCTOPS_H +#define RCTOPS_H + +#include +#include +#include +#include + +#include "generic-ops.h" + +#include "crypto-ops.h" +#include "random.h" +#include "keccak.h" +#include "crypto.h" + +#include "rctTypes.h" + +using namespace std; +using namespace crypto; + +namespace rct { + + //Various key initialization functions + + //Creates a zero scalar + key zero(); + void zero(key &z); + //Creates a zero elliptic curve point + key identity(); + void identity(key &Id); + //copies a scalar or point + void copy(key &AA, const key &A); + key copy(const key & AA); + //initializes a key matrix; + //first parameter is rows, + //second is columns + keyM keyMInit(int, int); + + //Various key generation functions + + //generates a random scalar which can be used as a secret key or mask + key skGen(); + void skGen(key &); + + //generates a vector of secret keys of size "int" + keyV skvGen(int ); + + //generates a random curve point (for testing) + key pkGen(); + //generates a random secret and corresponding public key + void skpkGen(key &sk, key &pk); + tuple skpkGen(); + //generates a / Pedersen commitment to the amount + tuple ctskpkGen(xmr_amount amount); + //this one is mainly for testing, can take arbitrary amounts.. + tuple ctskpkGen(key bH); + //generates a random uint long long + xmr_amount randXmrAmount(xmr_amount upperlimit); + + //Scalar multiplications of curve points + + //does a * G where a is a scalar and G is the curve basepoint + void scalarmultBase(key & aG, const key &a); + key scalarmultBase(const key & a); + //does a * P where a is a scalar and P is an arbitrary point + void scalarmultKey(key &aP, const key &P, const key &a); + key scalarmultKey(const key &P, const key &a); + //Computes aH where H= toPoint(cn_fast_hash(G)), G the basepoint + key scalarmultH(const key & a); + + //Curve addition / subtractions + + //for curve points: AB = A + B + void addKeys(key &AB, const key &A, const key &B); + //aGB = aG + B where a is a scalar, G is the basepoint, and B is a point + void addKeys1(key &aGB, const key &a, const key & B); + //aGbB = aG + bB where a, b are scalars, G is the basepoint and B is a point + void addKeys2(key &aGbB, const key &a, const key &b, const key &B); + //Does some precomputation to make addKeys3 more efficient + // input B a curve point and output a ge_dsmp which has precomputation applied + void precomp(ge_dsmp rv, const key &B); + //aAbB = a*A + b*B where a, b are scalars, A, B are curve points + //B must be input after applying "precomp" + void addKeys3(key &aAbB, const key &a, const key &A, const key &b, const ge_dsmp B); + //AB = A - B where A, B are curve points + void subKeys(key &AB, const key &A, const key &B); + //checks if A, B are equal as curve points + bool equalKeys(key & A, key & B); + + //Hashing - cn_fast_hash + //be careful these are also in crypto namespace + //cn_fast_hash for arbitrary multiples of 32 bytes + void cn_fast_hash(key &hash, const void * data, const size_t l); + //cn_fast_hash for a 32 byte key + void cn_fast_hash(key &hash, const key &in); + //cn_fast_hash for a 32 byte key + key cn_fast_hash(const key &in); + + //returns cn_fast_hash(input) * G where G is the basepoint + key hashToPoint(const key &in); + void hashToPoint(key &out, const key &in); + + //sums a vector of curve points (for scalars use sc_add) + void sumKeys(key & Csum, const key &Cis); + + //Elliptic Curve Diffie Helman: encodes and decodes the amount b and mask a + // where C= aG + bH + void ecdhEncode(ecdhTuple & unmasked, const key & receiverPk); + void ecdhDecode(ecdhTuple & masked, const key & receiverSk); +} +#endif /* RCTOPS_H */ diff --git a/source-code/RingCT/rctSigs.cpp b/source-code/RingCT/rctSigs.cpp new file mode 100644 index 0000000..323fc92 --- /dev/null +++ b/source-code/RingCT/rctSigs.cpp @@ -0,0 +1,540 @@ +// Copyright (c) 2016, Monero Research Labs +// +// Author: Shen Noether +// +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without modification, are +// permitted provided that the following conditions are met: +// +// 1. Redistributions of source code must retain the above copyright notice, this list of +// conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright notice, this list +// of conditions and the following disclaimer in the documentation and/or other +// materials provided with the distribution. +// +// 3. Neither the name of the copyright holder nor the names of its contributors may be +// used to endorse or promote products derived from this software without specific +// prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL +// THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF +// THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#include "rctSigs.h" +using namespace crypto; +using namespace std; + +namespace rct { + + //Schnorr Non-linkable + //Gen Gives a signature (L1, s1, s2) proving that the sender knows "x" such that xG = one of P1 or P2 + //Ver Verifies that signer knows an "x" such that xG = one of P1 or P2 + //These are called in the below ASNL sig generation + + void GenSchnorrNonLinkable(key & L1, key & s1, key & s2, const key & x, const key & P1, const key & P2, int index) { + key c1, c2, L2; + key a = skGen(); + if (index == 0) { + scalarmultBase(L1, a); + skGen(s2); + cn_fast_hash(c2, L1); + addKeys2(L2, s2, c2, P2); + cn_fast_hash(c1, L2); + sc_mulsub(s1.bytes, x.bytes, c1.bytes, a.bytes); + } + if (index == 1) { + scalarmultBase(L2, a); + skGen(s1); + cn_fast_hash(c1, L2); + addKeys2(L1, s1, c1, P1); + cn_fast_hash(c2, L1); + sc_mulsub(s2.bytes, x.bytes, c2.bytes, a.bytes); + } + } + + //Schnorr Non-linkable + //Gen Gives a signature (L1, s1, s2) proving that the sender knows "x" such that xG = one of P1 or P2 + //Ver Verifies that signer knows an "x" such that xG = one of P1 or P2 + //These are called in the below ASNL sig generation + bool VerSchnorrNonLinkable(const key & P1, const key & P2, const key & L1, const key & s1, const key & s2) { + key c2, L2, c1, L1p, cc; + cn_fast_hash(c2, L1); + addKeys2(L2, s2, c2, P2); + cn_fast_hash(c1, L2); + addKeys2(L1p, s1, c1, P1); + sc_sub(cc.bytes, L1.bytes, L1p.bytes); + return sc_isnonzero(cc.bytes) == 0; + } + + //Aggregate Schnorr Non-linkable Ring Signature (ASNL) + // c.f. http://eprint.iacr.org/2015/1098 section 5. + // These are used in range proofs (alternatively Borromean could be used) + // Gen gives a signature which proves the signer knows, for each i, + // an x[i] such that x[i]G = one of P1[i] or P2[i] + // Ver Verifies the signer knows a key for one of P1[i], P2[i] at each i + asnlSig GenASNL(key64 x, key64 P1, key64 P2, bits indices) { + DP("Generating Aggregate Schnorr Non-linkable Ring Signature\n"); + key64 s1; + int j = 0; + asnlSig rv; + rv.s = zero(); + for (j = 0; j < ATOMS; j++) { + //void GenSchnorrNonLinkable(Bytes L1, Bytes s1, Bytes s2, const Bytes x, const Bytes P1,const Bytes P2, int index) { + GenSchnorrNonLinkable(rv.L1[j], s1[j], rv.s2[j], x[j], P1[j], P2[j], indices[j]); + sc_add(rv.s.bytes, rv.s.bytes, s1[j].bytes); + } + return rv; + } + + //Aggregate Schnorr Non-linkable Ring Signature (ASNL) + // c.f. http://eprint.iacr.org/2015/1098 section 5. + // These are used in range proofs (alternatively Borromean could be used) + // Gen gives a signature which proves the signer knows, for each i, + // an x[i] such that x[i]G = one of P1[i] or P2[i] + // Ver Verifies the signer knows a key for one of P1[i], P2[i] at each i + bool VerASNL(key64 P1, key64 P2, asnlSig &as) { + DP("Verifying Aggregate Schnorr Non-linkable Ring Signature\n"); + key LHS = identity(); + key RHS = scalarmultBase(as.s); + key c2, L2, c1; + int j = 0; + for (j = 0; j < ATOMS; j++) { + cn_fast_hash(c2, as.L1[j]); + addKeys2(L2, as.s2[j], c2, P2[j]); + addKeys(LHS, LHS, as.L1[j]); + cn_fast_hash(c1, L2); + addKeys(RHS, RHS, scalarmultKey(P1[j], c1)); + } + key cc; + sc_sub(cc.bytes, LHS.bytes, RHS.bytes); + return sc_isnonzero(cc.bytes) == 0; + } + + //Multilayered Spontaneous Anonymous Group Signatures (MLSAG signatures) + //These are aka MG signatutes in earlier drafts of the ring ct paper + // c.f. http://eprint.iacr.org/2015/1098 section 2. + // keyImageV just does I[i] = xx[i] * Hash(xx[i] * G) for each i + // Gen creates a signature which proves that for some column in the keymatrix "pk" + // the signer knows a secret key for each row in that column + // Ver verifies that the MG sig was created correctly + keyV keyImageV(const keyV &xx) { + keyV II(xx.size()); + int i = 0; + for (i = 0; i < xx.size(); i++) { + II[i] = scalarmultKey(hashToPoint(scalarmultBase(xx[i])), xx[i]); + } + return II; + } + +/* + keyV skvGen(int n) { + keyV rv(n); + int i = 0; + for (i = 0; i < n; i++) { + skGen(rv[i]); + } + return rv; + } + */ + + //Multilayered Spontaneous Anonymous Group Signatures (MLSAG signatures) + //These are aka MG signatutes in earlier drafts of the ring ct paper + // c.f. http://eprint.iacr.org/2015/1098 section 2. + // keyImageV just does I[i] = xx[i] * Hash(xx[i] * G) for each i + // Gen creates a signature which proves that for some column in the keymatrix "pk" + // the signer knows a secret key for each row in that column + // Ver verifies that the MG sig was created correctly + mgSig MLSAG_Gen(const keyM & pk, const keyV & xx, const int index) { + + mgSig rv; + int rows = pk[0].size(); + int cols = pk.size(); + if (cols < 2) { + printf("Error! What is c if cols = 1!"); + } + int i = 0, j = 0; + + keyV c(cols); + keyV alpha = skvGen(rows); + rv.II = keyImageV(xx); + DP(rv.II); + vector Ip(rows); + keyM L(cols, rv.II); + keyM R(cols, rv.II); + rv.ss = keyM(cols, rv.II); + keyV Hi(rows); + for (i = 0; i < rows; i++) { + L[index][i] = scalarmultBase(alpha[i]); + hashToPoint(Hi[i], pk[index][i]); + R[index][i] = scalarmultKey(Hi[i], alpha[i]); + precomp(Ip[i], rv.II[i]); + } + char * m1 = (char *)malloc(32 * rows * (cols + 2)); + //vector m1(32 * rows * (cols + 2)); + for (i = 0; i < cols; i++) { + for (j = 0; j < rows; j++) { + memcpy(m1 + rows * 32 * i + (32 * j), pk[i][j].bytes, 32); + } + } + + int oldi = index; + i = (index + 1) % cols; + for (j = 0; j < rows; j++) { + memcpy(m1 + rows * 32 * cols + (32 * j), L[oldi][j].bytes, 32); + memcpy(m1 + rows * 32 * (cols + 1) + (32 * j), R[oldi][j].bytes, 32); + } + while (i != index) { + + cn_fast_hash(c[i], m1, 32 * rows * (cols + 2)); + + rv.ss[i] = skvGen(rows); + for (j = 0; j < rows; j++) { + addKeys2(L[i][j], rv.ss[i][j], c[i], pk[i][j]); + hashToPoint(Hi[j], pk[i][j]); + addKeys3(R[i][j], rv.ss[i][j], Hi[j], c[i], Ip[j]); + } + oldi = i; + i = (i + 1) % cols; + for (j = 0; j < rows; j++) { + memcpy(m1 + rows * 32 * cols + (32 * j), L[oldi][j].bytes, 32); + memcpy(m1 + rows * 32 * (cols + 1) + (32 * j), R[oldi][j].bytes, 32); + } + } + cn_fast_hash(c[index], m1, 32 * rows * (cols + 2)); + for (j = 0; j < rows; j++) { + sc_mulsub(rv.ss[index][j].bytes, c[index].bytes, xx[j].bytes, alpha[j].bytes); + } + memcpy(rv.cc.bytes, c[0].bytes, 32); + free(m1); + return rv; + } + + + //Multilayered Spontaneous Anonymous Group Signatures (MLSAG signatures) + //These are aka MG signatutes in earlier drafts of the ring ct paper + // c.f. http://eprint.iacr.org/2015/1098 section 2. + // keyImageV just does I[i] = xx[i] * Hash(xx[i] * G) for each i + // Gen creates a signature which proves that for some column in the keymatrix "pk" + // the signer knows a secret key for each row in that column + // Ver verifies that the MG sig was created correctly + bool MLSAG_Ver(keyM &pk, mgSig &sig) { + int rows = pk[0].size(); + int cols = pk.size(); + if (cols < 2) { + printf("Error! What is c if cols = 1!"); + + } + DP("Verifying MG sig"); + keyV c(cols + 1); + memcpy(c[0].bytes, sig.cc.bytes, 32); + vector Ip(rows); + keyM L(cols, pk[0]); + keyM R(cols, pk[0]); + + int i = 0, oldi = 0, j = 0; + keyV Hi(rows); + for (i = 0; i < rows; i++) { + precomp(Ip[i], sig.II[i]); + } + i = 0; + char * m1 = (char *)malloc(32 * rows * (cols + 2)); + //vector m1(32 * rows * (cols + 2)); + for (i = 0; i < cols; i++) { + for (j = 0; j < rows; j++) { + memcpy(m1 + rows * 32 * i + (32 * j), pk[i][j].bytes, 32); + } + } + i = 0; + while (i < cols) { + for (j = 0; j < rows; j++) { + addKeys2(L[i][j], sig.ss[i][j], c[i], pk[i][j]); + hashToPoint(Hi[j], pk[i][j]); + addKeys3(R[i][j], sig.ss[i][j], Hi[j], c[i], Ip[j]); + } + oldi = i; + i = (i + 1); + for (j = 0; j < rows; j++) { + memcpy(m1 + rows * 32 * cols + (32 * j), L[oldi][j].bytes, 32); + memcpy(m1 + rows * 32 * (cols + 1) + (32 * j), R[oldi][j].bytes, 32); + } + cn_fast_hash(c[i], m1, 32 * rows * (cols + 2)); + } + key cc; + + sc_sub(cc.bytes, c[0].bytes, c[cols].bytes); + free(m1); + return sc_isnonzero(cc.bytes) == 0; + } + + //proveRange and verRange + //proveRange gives C, and mask such that \sumCi = C + // c.f. http://eprint.iacr.org/2015/1098 section 5.1 + // and Ci is a commitment to either 0 or 2^i, i=0,...,63 + // thus this proves that "amount" is in [0, 2^64] + // mask is a such that C = aG + bH, and b = amount + //verRange verifies that \sum Ci = C and that each Ci is a commitment to 0 or 2^i + rangeSig proveRange(key & C, key & mask, const xmr_amount & amount) { + sc_0(mask.bytes); + identity(C); + bits b; + d2b(b, amount); + rangeSig sig; + key64 ai; + key64 CiH; + int i = 0; + for (i = 0; i < ATOMS; i++) { + sc_0(ai[i].bytes); + if (b[i] == 0) { + scalarmultBase(sig.Ci[i], ai[i]); + } + if (b[i] == 1) { + addKeys1(sig.Ci[i], ai[i], H2[i]); + } + subKeys(CiH[i], sig.Ci[i], H2[i]); + sc_add(mask.bytes, mask.bytes, ai[i].bytes); + addKeys(C, C, sig.Ci[i]); + } + sig.asig = GenASNL(ai, sig.Ci, CiH, b); + return sig; + } + + //proveRange and verRange + //proveRange gives C, and mask such that \sumCi = C + // c.f. http://eprint.iacr.org/2015/1098 section 5.1 + // and Ci is a commitment to either 0 or 2^i, i=0,...,63 + // thus this proves that "amount" is in [0, 2^64] + // mask is a such that C = aG + bH, and b = amount + //verRange verifies that \sum Ci = C and that each Ci is a commitment to 0 or 2^i + bool verRange(key & C, rangeSig & as) { + key64 CiH; + int i = 0; + key Ctmp = identity(); + for (i = 0; i < 64; i++) { + subKeys(CiH[i], as.Ci[i], H2[i]); + addKeys(Ctmp, Ctmp, as.Ci[i]); + } + bool reb = equalKeys(C, Ctmp); + DP("is sum Ci = C:"); + DP(reb); + bool rab = VerASNL(as.Ci, CiH, as.asig); + DP("Is in range?"); DP(rab); + return (reb && rab); + } + + //Ring-ct MG sigs + //Prove: + // c.f. http://eprint.iacr.org/2015/1098 section 4. definition 10. + // This does the MG sig on the "dest" part of the given key matrix, and + // the last row is the sum of input commitments from that column - sum output commitments + // this shows that sum inputs = sum outputs + //Ver: + // verifies the above sig is created corretly + mgSig proveRctMG(const ctkeyM & pubs, const ctkeyV & inSk, const ctkeyV &outSk, const ctkeyV & outPk, int index) { + mgSig mg; + //setup vars + int rows = pubs[0].size(); + int cols = pubs.size(); + keyV sk(rows + 1); + keyV tmp(rows + 1); + int i = 0, j = 0; + for (i = 0; i < rows + 1; i++) { + sc_0(sk[i].bytes); + identity(tmp[i]); + } + keyM M(cols, tmp); + //create the matrix to mg sig + for (i = 0; i < cols; i++) { + M[i][rows] = identity(); + for (j = 0; j < rows; j++) { + M[i][j] = pubs[i][j].dest; + addKeys(M[i][rows], M[i][rows], pubs[i][j].mask); + } + } + sc_0(sk[rows].bytes); + for (j = 0; j < rows; j++) { + sk[j] = copy(inSk[j].dest); + sc_add(sk[rows].bytes, sk[rows].bytes, inSk[j].mask.bytes); + } + for (i = 0; i < cols; i++) { + for (j = 0; j < outPk.size(); j++) { + subKeys(M[i][rows], M[i][rows], outPk[j].mask); + } + } + for (j = 0; j < outPk.size(); j++) { + sc_sub(sk[rows].bytes, sk[rows].bytes, outSk[j].mask.bytes); + } + return MLSAG_Gen(M, sk, index); + } + + + //Ring-ct MG sigs + //Prove: + // c.f. http://eprint.iacr.org/2015/1098 section 4. definition 10. + // This does the MG sig on the "dest" part of the given key matrix, and + // the last row is the sum of input commitments from that column - sum output commitments + // this shows that sum inputs = sum outputs + //Ver: + // verifies the above sig is created corretly + bool verRctMG(mgSig mg, ctkeyM & pubs, ctkeyV & outPk) { + //setup vars + int rows = pubs[0].size(); + int cols = pubs.size(); + keyV tmp(rows + 1); + int i = 0, j = 0; + for (i = 0; i < rows + 1; i++) { + identity(tmp[i]); + } + keyM M(cols, tmp); + + //create the matrix to mg sig + for (j = 0; j < rows; j++) { + for (i = 0; i < cols; i++) { + M[i][j] = pubs[i][j].dest; + addKeys(M[i][rows], M[i][rows], pubs[i][j].mask); + } + } + for (j = 0; j < outPk.size(); j++) { + for (i = 0; i < cols; i++) { + subKeys(M[i][rows], M[i][rows], outPk[j].mask); + } + + } + return MLSAG_Ver(M, mg); + + } + + //These functions get keys from blockchain + //replace these when connecting blockchain + //getKeyFromBlockchain grabs a key from the blockchain at "reference_index" to mix with + //populateFromBlockchain creates a keymatrix with "mixin" columns and one of the columns is inPk + // the return value are the key matrix, and the index where inPk was put (random). + void getKeyFromBlockchain(ctkey & a, size_t reference_index) { + a.mask = pkGen(); + a.dest = pkGen(); + } + + //These functions get keys from blockchain + //replace these when connecting blockchain + //getKeyFromBlockchain grabs a key from the blockchain at "reference_index" to mix with + //populateFromBlockchain creates a keymatrix with "mixin" columns and one of the columns is inPk + // the return value are the key matrix, and the index where inPk was put (random). + tuple populateFromBlockchain(ctkeyV inPk, int mixin) { + int rows = inPk.size(); + ctkeyM rv(mixin, inPk); + int index = randXmrAmount(mixin); + int i = 0, j = 0; + for (i = 0; i < mixin; i++) { + if (i != index) { + for (j = 0; j < rows; j++) { + getKeyFromBlockchain(rv[i][j], (size_t)randXmrAmount); + } + } + } + return make_tuple(rv, index); + } + + //RingCT protocol + //genRct: + // creates an rctSig with all data necessary to verify the rangeProofs and that the signer owns one of the + // columns that are claimed as inputs, and that the sum of inputs = sum of outputs. + // Also contains masked "amount" and "mask" so the receiver can see how much they received + //verRct: + // verifies that all signatures (rangeProogs, MG sig, sum inputs = outputs) are correct + //decodeRct: (c.f. http://eprint.iacr.org/2015/1098 section 5.1.1) + // uses the attached ecdh info to find the amounts represented by each output commitment + // must know the destination private key to find the correct amount, else will return a random number + rctSig genRct(ctkeyV & inSk, ctkeyV & inPk, const keyV & destinations, const vector amounts, const int mixin) { + rctSig rv; + rv.outPk.resize(destinations.size()); + rv.rangeSigs.resize(destinations.size()); + rv.ecdhInfo.resize(destinations.size()); + + int i = 0; + keyV masks(destinations.size()); //sk mask.. + ctkeyV outSk(destinations.size()); + for (i = 0; i < destinations.size(); i++) { + //add destination to sig + rv.outPk[i].dest = copy(destinations[i]); + //compute range proof + rv.rangeSigs[i] = proveRange(rv.outPk[i].mask, outSk[i].mask, amounts[i]); + #ifdef DBG + verRange(rv.outPk[i].mask, rv.rangeSigs[i]); + #endif + + //mask amount and mask + rv.ecdhInfo[i].mask = copy(outSk[i].mask); + rv.ecdhInfo[i].amount = d2h(amounts[i]); + ecdhEncode(rv.ecdhInfo[i], destinations[i]); + + } + + int index; + tie(rv.mixRing, index) = populateFromBlockchain(inPk, mixin); + rv.MG = proveRctMG(rv.mixRing, inSk, outSk, rv.outPk, index); + return rv; + } + + //RingCT protocol + //genRct: + // creates an rctSig with all data necessary to verify the rangeProofs and that the signer owns one of the + // columns that are claimed as inputs, and that the sum of inputs = sum of outputs. + // Also contains masked "amount" and "mask" so the receiver can see how much they received + //verRct: + // verifies that all signatures (rangeProogs, MG sig, sum inputs = outputs) are correct + //decodeRct: (c.f. http://eprint.iacr.org/2015/1098 section 5.1.1) + // uses the attached ecdh info to find the amounts represented by each output commitment + // must know the destination private key to find the correct amount, else will return a random number + bool verRct(rctSig & rv) { + int i = 0; + bool rvb = true; + bool tmp; + DP("range proofs verified?"); + for (i = 0; i < rv.outPk.size(); i++) { + tmp = verRange(rv.outPk[i].mask, rv.rangeSigs[i]); + DP(tmp); + rvb = (rvb && tmp); + } + bool mgVerd = verRctMG(rv.MG, rv.mixRing, rv.outPk); + DP("mg sig verified?"); + DP(mgVerd); + + return (rvb && mgVerd); + } + + //RingCT protocol + //genRct: + // creates an rctSig with all data necessary to verify the rangeProofs and that the signer owns one of the + // columns that are claimed as inputs, and that the sum of inputs = sum of outputs. + // Also contains masked "amount" and "mask" so the receiver can see how much they received + //verRct: + // verifies that all signatures (rangeProogs, MG sig, sum inputs = outputs) are correct + //decodeRct: (c.f. http://eprint.iacr.org/2015/1098 section 5.1.1) + // uses the attached ecdh info to find the amounts represented by each output commitment + // must know the destination private key to find the correct amount, else will return a random number + xmr_amount decodeRct(rctSig & rv, key & sk, int i) { + //mask amount and mask + ecdhDecode(rv.ecdhInfo[i], sk); + key mask = rv.ecdhInfo[i].mask; + key amount = rv.ecdhInfo[i].amount; + key C = rv.outPk[i].mask; + DP("C"); + DP(C); + key Ctmp; + addKeys2(Ctmp, mask, amount, H); + DP("Ctmp"); + DP(Ctmp); + if (equalKeys(C, Ctmp) == false) { + printf("warning, amount decoded incorrectly, will be unable to spend"); + } + return h2d(amount); + } + +} \ No newline at end of file diff --git a/source-code/RingCT/rctSigs.h b/source-code/RingCT/rctSigs.h new file mode 100644 index 0000000..e1f9a4e --- /dev/null +++ b/source-code/RingCT/rctSigs.h @@ -0,0 +1,136 @@ +// Copyright (c) 2016, Monero Research Labs +// +// Author: Shen Noether +// +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without modification, are +// permitted provided that the following conditions are met: +// +// 1. Redistributions of source code must retain the above copyright notice, this list of +// conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright notice, this list +// of conditions and the following disclaimer in the documentation and/or other +// materials provided with the distribution. +// +// 3. Neither the name of the copyright holder nor the names of its contributors may be +// used to endorse or promote products derived from this software without specific +// prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL +// THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF +// THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#pragma once + +#define DBG + +#ifndef RCTSIGS_H +#define RCTSIGS_H + +#include +#include +#include +#include + +#include "generic-ops.h" + +#include "crypto-ops.h" +#include "random.h" +#include "keccak.h" +#include "crypto.h" + + +#include "rctTypes.h" +#include "rctOps.h" + + + + +using namespace std; +using namespace crypto; + +namespace rct { + + //Schnorr Non-linkable + //Gen Gives a signature (L1, s1, s2) proving that the sender knows "x" such that xG = one of P1 or P2 + //Ver Verifies that signer knows an "x" such that xG = one of P1 or P2 + //These are called in the below ASNL sig generation + void GenSchnorrNonLinkable(key & L1, key & s1, key & s2, const key & x, const key & P1, const key & P2, int index); + bool VerSchnorrNonLinkable(const key & P1, const key & P2, const key & L1, const key & s1, const key & s2); + + //Aggregate Schnorr Non-linkable Ring Signature (ASNL) + // c.f. http://eprint.iacr.org/2015/1098 section 5. + // These are used in range proofs (alternatively Borromean could be used) + // Gen gives a signature which proves the signer knows, for each i, + // an x[i] such that x[i]G = one of P1[i] or P2[i] + // Ver Verifies the signer knows a key for one of P1[i], P2[i] at each i + asnlSig GenASNL(key64 x, key64 P1, key64 P2, bits indices); + bool VerASNL(key64 P1, key64 P2, asnlSig &as); + + //Multilayered Spontaneous Anonymous Group Signatures (MLSAG signatures) + //These are aka MG signatutes in earlier drafts of the ring ct paper + // c.f. http://eprint.iacr.org/2015/1098 section 2. + // keyImageV just does I[i] = xx[i] * Hash(xx[i] * G) for each i + // Gen creates a signature which proves that for some column in the keymatrix "pk" + // the signer knows a secret key for each row in that column + // Ver verifies that the MG sig was created correctly + keyV keyImageV(const keyV &xx); + mgSig MLSAG_Gen(const keyM &pk, const keyV &xx, const int index); + bool MLSAG_Ver(keyM &pk, mgSig &sig); + + //proveRange and verRange + //proveRange gives C, and mask such that \sumCi = C + // c.f. http://eprint.iacr.org/2015/1098 section 5.1 + // and Ci is a commitment to either 0 or 2^i, i=0,...,63 + // thus this proves that "amount" is in [0, 2^64] + // mask is a such that C = aG + bH, and b = amount + //verRange verifies that \sum Ci = C and that each Ci is a commitment to 0 or 2^i + rangeSig proveRange(key & C, key & mask, const xmr_amount & amount); + bool verRange(key & C, rangeSig & as); + + //Ring-ct MG sigs + //Prove: + // c.f. http://eprint.iacr.org/2015/1098 section 4. definition 10. + // This does the MG sig on the "dest" part of the given key matrix, and + // the last row is the sum of input commitments from that column - sum output commitments + // this shows that sum inputs = sum outputs + //Ver: + // verifies the above sig is created corretly + mgSig proveRctMG(const ctkeyM & pubs, const ctkeyV & inSk, const keyV &outMasks, const ctkeyV & outPk, int index); + bool verRctMG(mgSig mg, ctkeyM & pubs, ctkeyV & outPk); + + //These functions get keys from blockchain + //replace these when connecting blockchain + //getKeyFromBlockchain grabs a key from the blockchain at "reference_index" to mix with + //populateFromBlockchain creates a keymatrix with "mixin" columns and one of the columns is inPk + // the return value are the key matrix, and the index where inPk was put (random). + void getKeyFromBlockchain(ctkey & a, size_t reference_index); + tuple populateFromBlockchain(ctkeyV inPk, int mixin); + + //RingCT protocol + //genRct: + // creates an rctSig with all data necessary to verify the rangeProofs and that the signer owns one of the + // columns that are claimed as inputs, and that the sum of inputs = sum of outputs. + // Also contains masked "amount" and "mask" so the receiver can see how much they received + //verRct: + // verifies that all signatures (rangeProogs, MG sig, sum inputs = outputs) are correct + //decodeRct: (c.f. http://eprint.iacr.org/2015/1098 section 5.1.1) + // uses the attached ecdh info to find the amounts represented by each output commitment + // must know the destination private key to find the correct amount, else will return a random number + rctSig genRct(ctkeyV & inSk, ctkeyV & inPk, const keyV & destinations, const vector amounts, const int mixin); + bool verRct(rctSig & rv); + xmr_amount decodeRct(rctSig & rv, key & sk, int i); + + + +} +#endif /* RCTSIGS_H */ + diff --git a/source-code/RingCT/rctTypes.cpp b/source-code/RingCT/rctTypes.cpp new file mode 100644 index 0000000..1eb0716 --- /dev/null +++ b/source-code/RingCT/rctTypes.cpp @@ -0,0 +1,209 @@ +// Copyright (c) 2016, Monero Research Labs +// +// Author: Shen Noether +// +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without modification, are +// permitted provided that the following conditions are met: +// +// 1. Redistributions of source code must retain the above copyright notice, this list of +// conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright notice, this list +// of conditions and the following disclaimer in the documentation and/or other +// materials provided with the distribution. +// +// 3. Neither the name of the copyright holder nor the names of its contributors may be +// used to endorse or promote products derived from this software without specific +// prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL +// THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF +// THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#include "rctTypes.h" +using namespace crypto; +using namespace std; + +namespace rct { + + //dp + //Debug printing for the above types + //Actually use DP(value) and #define DBG + + void dp(key a) { + int j = 0; + printf("\""); + for (j = 0; j < 32; j++) { + printf("%02x", (unsigned char)a.bytes[j]); + } + printf("\""); + printf("\n"); + } + + void dp(bool a) { + printf(" ... %s ... ", a ? "true" : "false"); + printf("\n"); + } + + void dp(char * a, int l) { + int j = 0; + printf("\""); + for (j = 0; j < l; j++) { + printf("%02x", (unsigned char)a[j]); + } + printf("\""); + printf("\n"); + } + void dp(keyV a) { + int j = 0; + printf("["); + for (j = 0; j < a.size(); j++) { + dp(a[j]); + if (j < a.size() - 1) { + printf(","); + } + } + printf("]"); + printf("\n"); + } + void dp(keyM a) { + int j = 0; + printf("["); + for (j = 0; j < a.size(); j++) { + dp(a[j]); + if (j < a.size() - 1) { + printf(","); + } + } + printf("]"); + printf("\n"); + } + void dp(xmr_amount vali) { + printf("x: %"PRIu64"\n", vali); + printf("\n"); + } + + void dp(int vali) { + printf("x: %d\n", vali); + printf("\n"); + } + void dp(bits amountb) { + int i = 0; + for (int i = 0; i < 64; i++) { + printf("%d", amountb[i]); + } + printf("\n"); + + } + + void dp(char * st) { + printf("%s\n", st); + } + + //Various Conversions + + //uint long long to 32 byte key + void d2h(key & amounth, const xmr_amount in) { + sc_0(amounth.bytes); + xmr_amount val = in; + int i = 0, byte = 0; + while (val != 0) { + amounth[i] = (unsigned char)(val & 0xFF); + i++; + val /= (xmr_amount)256; + } + } + + //uint long long to 32 byte key + key d2h(const xmr_amount in) { + key amounth; + sc_0(amounth.bytes); + xmr_amount val = in; + int i = 0; + while (val != 0) { + amounth[i] = (unsigned char)(val & 0xFF); + i++; + val /= (xmr_amount)256; + } + return amounth; + } + + //uint long long to int[64] + void d2b(bits amountb, xmr_amount val) { + amountb; + int i = 0; + while (val != 0) { + amountb[i] = val & 1; + i++; + val >>= 1; + } + while (i < 64) { + amountb[i] = 0; + i++; + } + } + + //32 byte key to uint long long + // if the key holds a value > 2^64 + // then the value in the first 8 bytes is returned + xmr_amount h2d(const key & test) { + xmr_amount vali = 0; + int j = 0; + for (j = 7; j >= 0; j--) { + vali = (xmr_amount)(vali * 256 + (unsigned char)test[j]); + } + return vali; + } + + //32 byte key to int[64] + void h2b(bits amountb2, const key & test) { + int val = 0, i = 0, j = 0; + for (j = 0; j < 8; j++) { + val = (unsigned char)test[j]; + i = 8 * j; + while (val != 0) { + amountb2[i] = val & 1; + i++; + val >>= 1; + } + while (i < 8 * (j + 1)) { + amountb2[i] = 0; + } + } + } + + //int[64] to 32 byte key + void b2h(key & amountdh, const bits amountb2) { + int byte, i, j; + for (j = 0; j < 8; j++) { + byte = 0; + //val = (unsigned char) test[j]; + i = 8 * j; + for (i = 7; i > -1; i--) { + byte = byte * 2 + amountb2[8 * j + i]; + } + amountdh[j] = (unsigned char)byte; + } + for (j = 8; j < 32; j++) { + amountdh[j] = (unsigned char)(0x00); + } + } + + //int[64] to uint long long + xmr_amount b2d(bits amountb) { + xmr_amount vali = 0; + int j = 0; + for (j = 63; j >= 0; j--) { + vali = (xmr_amount)(vali * 2 + amountb[j]); + } + } + +} \ No newline at end of file diff --git a/source-code/RingCT/rctTypes.h b/source-code/RingCT/rctTypes.h new file mode 100644 index 0000000..41b3d35 --- /dev/null +++ b/source-code/RingCT/rctTypes.h @@ -0,0 +1,259 @@ +// Copyright (c) 2016, Monero Research Labs +// +// Author: Shen Noether +// +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without modification, are +// permitted provided that the following conditions are met: +// +// 1. Redistributions of source code must retain the above copyright notice, this list of +// conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright notice, this list +// of conditions and the following disclaimer in the documentation and/or other +// materials provided with the distribution. +// +// 3. Neither the name of the copyright holder nor the names of its contributors may be +// used to endorse or promote products derived from this software without specific +// prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL +// THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF +// THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#pragma once +#ifndef RCT_TYPES_H +#define RCT_TYPES_H + +#include +#include +#include +#include + +#include "generic-ops.h" +#include "crypto-ops.h" +#include "random.h" +#include "keccak.h" +#include "crypto.h" + +//Define this flag when debugging to get additional info on the console +#ifdef DBG +#define DP(x) dp(x) +#else +#define DP(x) +#endif + +//atomic units of moneros +#define ATOMS 64 + +//for printing large ints +#undef PRIu64 +#define PRIu64 "I64u" + +using namespace std; +using namespace crypto; + +//Namespace specifically for ring ct code +namespace rct { + //basic ops containers + typedef unsigned char * Bytes; + + // Can contain a secret or public key + // similar to secret_key / public_key of crypto-ops, + // but uses unsigned chars, + // also includes an operator for accessing the i'th byte. + typedef struct key { + unsigned char & operator[](int i) { + return bytes[i]; + } + unsigned char bytes[32]; + }; + typedef vector keyV; //vector of keys + typedef vector keyM; //matrix of keys (indexed by column first) + + //containers For CT operations + //if it's representing a private ctkey then "dest" contains the secret key of the address + // while "mask" contains a where C = aG + bH is CT pedersen commitment and b is the amount + // (store b, the amount, separately + //if it's representing a public ctkey, then "dest" = P the address, mask = C the commitment + struct ctkey { + key dest; + key mask; //C here if public + }; + typedef vector ctkeyV; + typedef vector ctkeyM; + + //data for passing the amount to the receiver secretly + // If the pedersen commitment to an amount is C = aG + bH, + // "mask" contains a 32 byte key a + // "amount" contains a hex representation (in 32 bytes) of a 64 bit number + // "senderPk" is not the senders actual public key, but a one-time public key generated for + // the purpose of the ECDH exchange + struct ecdhTuple { + key mask; + key amount; + key senderPk; + }; + + //containers for representing amounts + typedef uint64_t xmr_amount; + typedef unsigned int bits[ATOMS]; + typedef key key64[64]; + + //just contains the necessary keys to represent asnlSigs + //c.f. http://eprint.iacr.org/2015/1098 + struct asnlSig { + key64 L1; + key64 s2; + key s; + }; + //just contains the necessary keys to represent MLSAG sigs + //c.f. http://eprint.iacr.org/2015/1098 + struct mgSig { + keyM ss; + key cc; + keyV II; + }; + //contains the data for an asnl sig + // also contains the "Ci" values such that + // \sum Ci = C + // and the signature proves that each Ci is either + // a Pedersen commitment to 0 or to 2^i + //thus proving that C is in the range of [0, 2^64] + struct rangeSig { + asnlSig asig; + key64 Ci; + }; + //A container to hold all signatures necessary for RingCT + // rangeSigs holds all the rangeproof data of a transaction + // MG holds the MLSAG signature of a transaction + // mixRing holds all the public keypairs (P, C) for a transaction + // ecdhInfo holds an encoded mask / amount to be passed to each receiver + // outPk contains public keypairs which are destinations (P, C), + // P = address, C = commitment to amount + struct rctSig { + vector rangeSigs; + mgSig MG; + ctkeyM mixRing; //the set of all pubkeys / copy + //pairs that you mix with + vector ecdhInfo; + ctkeyV outPk; + }; + + struct rmsSig { + vector rangeSigs; + mgSig MG; + ctkeyM mixRing; + vector destinationEcdhInfo; + vector participantEcdhInfo; + ctkeyV outPk; + }; + + //other basepoint H = toPoint(cn_fast_hash(G)), G the basepoint + static const key H = { {0x8b, 0x65, 0x59, 0x70, 0x15, 0x37, 0x99, 0xaf, 0x2a, 0xea, 0xdc, 0x9f, 0xf1, 0xad, 0xd0, 0xea, 0x6c, 0x72, 0x51, 0xd5, 0x41, 0x54, 0xcf, 0xa9, 0x2c, 0x17, 0x3a, 0x0d, 0xd3, 0x9c, 0x1f, 0x94} }; + + //H2 contains 2^i H in each index, i.e. H, 2H, 4H, 8H, ... + //This is used for the range proofG + static const key64 H2 = { {0x8b, 0x65, 0x59, 0x70, 0x15, 0x37, 0x99, 0xaf, 0x2a, 0xea, 0xdc, 0x9f, 0xf1, 0xad, 0xd0, 0xea, 0x6c, 0x72, 0x51, 0xd5, 0x41, 0x54, 0xcf, 0xa9, 0x2c, 0x17, 0x3a, 0x0d, 0xd3, 0x9c, 0x1f, 0x94}, + {0x8f, 0xaa, 0x44, 0x8a, 0xe4, 0xb3, 0xe2, 0xbb, 0x3d, 0x4d, 0x13, 0x09, 0x09, 0xf5, 0x5f, 0xcd, 0x79, 0x71, 0x1c, 0x1c, 0x83, 0xcd, 0xbc, 0xca, 0xdd, 0x42, 0xcb, 0xe1, 0x51, 0x5e, 0x87, 0x12}, + {0x12, 0xa7, 0xd6, 0x2c, 0x77, 0x91, 0x65, 0x4a, 0x57, 0xf3, 0xe6, 0x76, 0x94, 0xed, 0x50, 0xb4, 0x9a, 0x7d, 0x9e, 0x3f, 0xc1, 0xe4, 0xc7, 0xa0, 0xbd, 0xe2, 0x9d, 0x18, 0x7e, 0x9c, 0xc7, 0x1d}, + {0x78, 0x9a, 0xb9, 0x93, 0x4b, 0x49, 0xc4, 0xf9, 0xe6, 0x78, 0x5c, 0x6d, 0x57, 0xa4, 0x98, 0xb3, 0xea, 0xd4, 0x43, 0xf0, 0x4f, 0x13, 0xdf, 0x11, 0x0c, 0x54, 0x27, 0xb4, 0xf2, 0x14, 0xc7, 0x39}, + {0x77, 0x1e, 0x92, 0x99, 0xd9, 0x4f, 0x02, 0xac, 0x72, 0xe3, 0x8e, 0x44, 0xde, 0x56, 0x8a, 0xc1, 0xdc, 0xb2, 0xed, 0xc6, 0xed, 0xb6, 0x1f, 0x83, 0xca, 0x41, 0x8e, 0x10, 0x77, 0xce, 0x3d, 0xe8}, + {0x73, 0xb9, 0x6d, 0xb4, 0x30, 0x39, 0x81, 0x9b, 0xda, 0xf5, 0x68, 0x0e, 0x5c, 0x32, 0xd7, 0x41, 0x48, 0x88, 0x84, 0xd1, 0x8d, 0x93, 0x86, 0x6d, 0x40, 0x74, 0xa8, 0x49, 0x18, 0x2a, 0x8a, 0x64}, + {0x8d, 0x45, 0x8e, 0x1c, 0x2f, 0x68, 0xeb, 0xeb, 0xcc, 0xd2, 0xfd, 0x5d, 0x37, 0x9f, 0x5e, 0x58, 0xf8, 0x13, 0x4d, 0xf3, 0xe0, 0xe8, 0x8c, 0xad, 0x3d, 0x46, 0x70, 0x10, 0x63, 0xa8, 0xd4, 0x12}, + {0x09, 0x55, 0x1e, 0xdb, 0xe4, 0x94, 0x41, 0x8e, 0x81, 0x28, 0x44, 0x55, 0xd6, 0x4b, 0x35, 0xee, 0x8a, 0xc0, 0x93, 0x06, 0x8a, 0x5f, 0x16, 0x1f, 0xa6, 0x63, 0x75, 0x59, 0x17, 0x7e, 0xf4, 0x04}, + {0xd0, 0x5a, 0x88, 0x66, 0xf4, 0xdf, 0x8c, 0xee, 0x1e, 0x26, 0x8b, 0x1d, 0x23, 0xa4, 0xc5, 0x8c, 0x92, 0xe7, 0x60, 0x30, 0x97, 0x86, 0xcd, 0xac, 0x0f, 0xed, 0xa1, 0xd2, 0x47, 0xa9, 0xc9, 0xa7}, + {0x55, 0xcd, 0xaa, 0xd5, 0x18, 0xbd, 0x87, 0x1d, 0xd1, 0xeb, 0x7b, 0xc7, 0x02, 0x3e, 0x1d, 0xc0, 0xfd, 0xf3, 0x33, 0x98, 0x64, 0xf8, 0x8f, 0xdd, 0x2d, 0xe2, 0x69, 0xfe, 0x9e, 0xe1, 0x83, 0x2d}, + {0xe7, 0x69, 0x7e, 0x95, 0x1a, 0x98, 0xcf, 0xd5, 0x71, 0x2b, 0x84, 0xbb, 0xe5, 0xf3, 0x4e, 0xd7, 0x33, 0xe9, 0x47, 0x3f, 0xcb, 0x68, 0xed, 0xa6, 0x6e, 0x37, 0x88, 0xdf, 0x19, 0x58, 0xc3, 0x06}, + {0xf9, 0x2a, 0x97, 0x0b, 0xae, 0x72, 0x78, 0x29, 0x89, 0xbf, 0xc8, 0x3a, 0xdf, 0xaa, 0x92, 0xa4, 0xf4, 0x9c, 0x7e, 0x95, 0x91, 0x8b, 0x3b, 0xba, 0x3c, 0xdc, 0x7f, 0xe8, 0x8a, 0xcc, 0x8d, 0x47}, + {0x1f, 0x66, 0xc2, 0xd4, 0x91, 0xd7, 0x5a, 0xf9, 0x15, 0xc8, 0xdb, 0x6a, 0x6d, 0x1c, 0xb0, 0xcd, 0x4f, 0x7d, 0xdc, 0xd5, 0xe6, 0x3d, 0x3b, 0xa9, 0xb8, 0x3c, 0x86, 0x6c, 0x39, 0xef, 0x3a, 0x2b}, + {0x3e, 0xec, 0x98, 0x84, 0xb4, 0x3f, 0x58, 0xe9, 0x3e, 0xf8, 0xde, 0xea, 0x26, 0x00, 0x04, 0xef, 0xea, 0x2a, 0x46, 0x34, 0x4f, 0xc5, 0x96, 0x5b, 0x1a, 0x7d, 0xd5, 0xd1, 0x89, 0x97, 0xef, 0xa7}, + {0xb2, 0x9f, 0x8f, 0x0c, 0xcb, 0x96, 0x97, 0x7f, 0xe7, 0x77, 0xd4, 0x89, 0xd6, 0xbe, 0x9e, 0x7e, 0xbc, 0x19, 0xc4, 0x09, 0xb5, 0x10, 0x35, 0x68, 0xf2, 0x77, 0x61, 0x1d, 0x7e, 0xa8, 0x48, 0x94}, + {0x56, 0xb1, 0xf5, 0x12, 0x65, 0xb9, 0x55, 0x98, 0x76, 0xd5, 0x8d, 0x24, 0x9d, 0x0c, 0x14, 0x6d, 0x69, 0xa1, 0x03, 0x63, 0x66, 0x99, 0x87, 0x4d, 0x3f, 0x90, 0x47, 0x35, 0x50, 0xfe, 0x3f, 0x2c}, + {0x1d, 0x7a, 0x36, 0x57, 0x5e, 0x22, 0xf5, 0xd1, 0x39, 0xff, 0x9c, 0xc5, 0x10, 0xfa, 0x13, 0x85, 0x05, 0x57, 0x6b, 0x63, 0x81, 0x5a, 0x94, 0xe4, 0xb0, 0x12, 0xbf, 0xd4, 0x57, 0xca, 0xaa, 0xda}, + {0xd0, 0xac, 0x50, 0x7a, 0x86, 0x4e, 0xcd, 0x05, 0x93, 0xfa, 0x67, 0xbe, 0x7d, 0x23, 0x13, 0x43, 0x92, 0xd0, 0x0e, 0x40, 0x07, 0xe2, 0x53, 0x48, 0x78, 0xd9, 0xb2, 0x42, 0xe1, 0x0d, 0x76, 0x20}, + {0xf6, 0xc6, 0x84, 0x0b, 0x9c, 0xf1, 0x45, 0xbb, 0x2d, 0xcc, 0xf8, 0x6e, 0x94, 0x0b, 0xe0, 0xfc, 0x09, 0x8e, 0x32, 0xe3, 0x10, 0x99, 0xd5, 0x6f, 0x7f, 0xe0, 0x87, 0xbd, 0x5d, 0xeb, 0x50, 0x94}, + {0x28, 0x83, 0x1a, 0x33, 0x40, 0x07, 0x0e, 0xb1, 0xdb, 0x87, 0xc1, 0x2e, 0x05, 0x98, 0x0d, 0x5f, 0x33, 0xe9, 0xef, 0x90, 0xf8, 0x3a, 0x48, 0x17, 0xc9, 0xf4, 0xa0, 0xa3, 0x32, 0x27, 0xe1, 0x97}, + {0x87, 0x63, 0x22, 0x73, 0xd6, 0x29, 0xcc, 0xb7, 0xe1, 0xed, 0x1a, 0x76, 0x8f, 0xa2, 0xeb, 0xd5, 0x17, 0x60, 0xf3, 0x2e, 0x1c, 0x0b, 0x86, 0x7a, 0x5d, 0x36, 0x8d, 0x52, 0x71, 0x05, 0x5c, 0x6e}, + {0x5c, 0x7b, 0x29, 0x42, 0x43, 0x47, 0x96, 0x4d, 0x04, 0x27, 0x55, 0x17, 0xc5, 0xae, 0x14, 0xb6, 0xb5, 0xea, 0x27, 0x98, 0xb5, 0x73, 0xfc, 0x94, 0xe6, 0xe4, 0x4a, 0x53, 0x21, 0x60, 0x0c, 0xfb}, + {0xe6, 0x94, 0x50, 0x42, 0xd7, 0x8b, 0xc2, 0xc3, 0xbd, 0x6e, 0xc5, 0x8c, 0x51, 0x1a, 0x9f, 0xe8, 0x59, 0xc0, 0xad, 0x63, 0xfd, 0xe4, 0x94, 0xf5, 0x03, 0x9e, 0x0e, 0x82, 0x32, 0x61, 0x2b, 0xd5}, + {0x36, 0xd5, 0x69, 0x07, 0xe2, 0xec, 0x74, 0x5d, 0xb6, 0xe5, 0x4f, 0x0b, 0x2e, 0x1b, 0x23, 0x00, 0xab, 0xcb, 0x42, 0x2e, 0x71, 0x2d, 0xa5, 0x88, 0xa4, 0x0d, 0x3f, 0x1e, 0xbb, 0xbe, 0x02, 0xf6}, + {0x34, 0xdb, 0x6e, 0xe4, 0xd0, 0x60, 0x8e, 0x5f, 0x78, 0x36, 0x50, 0x49, 0x5a, 0x3b, 0x2f, 0x52, 0x73, 0xc5, 0x13, 0x4e, 0x52, 0x84, 0xe4, 0xfd, 0xf9, 0x66, 0x27, 0xbb, 0x16, 0xe3, 0x1e, 0x6b}, + {0x8e, 0x76, 0x59, 0xfb, 0x45, 0xa3, 0x78, 0x7d, 0x67, 0x4a, 0xe8, 0x67, 0x31, 0xfa, 0xa2, 0x53, 0x8e, 0xc0, 0xfd, 0xf4, 0x42, 0xab, 0x26, 0xe9, 0xc7, 0x91, 0xfa, 0xda, 0x08, 0x94, 0x67, 0xe9}, + {0x30, 0x06, 0xcf, 0x19, 0x8b, 0x24, 0xf3, 0x1b, 0xb4, 0xc7, 0xe6, 0x34, 0x60, 0x00, 0xab, 0xc7, 0x01, 0xe8, 0x27, 0xcf, 0xbb, 0x5d, 0xf5, 0x2d, 0xcf, 0xa4, 0x2e, 0x9c, 0xa9, 0xff, 0x08, 0x02}, + {0xf5, 0xfd, 0x40, 0x3c, 0xb6, 0xe8, 0xbe, 0x21, 0x47, 0x2e, 0x37, 0x7f, 0xfd, 0x80, 0x5a, 0x8c, 0x60, 0x83, 0xea, 0x48, 0x03, 0xb8, 0x48, 0x53, 0x89, 0xcc, 0x3e, 0xbc, 0x21, 0x5f, 0x00, 0x2a}, + {0x37, 0x31, 0xb2, 0x60, 0xeb, 0x3f, 0x94, 0x82, 0xe4, 0x5f, 0x1c, 0x3f, 0x3b, 0x9d, 0xcf, 0x83, 0x4b, 0x75, 0xe6, 0xee, 0xf8, 0xc4, 0x0f, 0x46, 0x1e, 0xa2, 0x7e, 0x8b, 0x6e, 0xd9, 0x47, 0x3d}, + {0x9f, 0x9d, 0xab, 0x09, 0xc3, 0xf5, 0xe4, 0x28, 0x55, 0xc2, 0xde, 0x97, 0x1b, 0x65, 0x93, 0x28, 0xa2, 0xdb, 0xc4, 0x54, 0x84, 0x5f, 0x39, 0x6f, 0xfc, 0x05, 0x3f, 0x0b, 0xb1, 0x92, 0xf8, 0xc3}, + {0x5e, 0x05, 0x5d, 0x25, 0xf8, 0x5f, 0xdb, 0x98, 0xf2, 0x73, 0xe4, 0xaf, 0xe0, 0x84, 0x64, 0xc0, 0x03, 0xb7, 0x0f, 0x1e, 0xf0, 0x67, 0x7b, 0xb5, 0xe2, 0x57, 0x06, 0x40, 0x0b, 0xe6, 0x20, 0xa5}, + {0x86, 0x8b, 0xcf, 0x36, 0x79, 0xcb, 0x6b, 0x50, 0x0b, 0x94, 0x41, 0x8c, 0x0b, 0x89, 0x25, 0xf9, 0x86, 0x55, 0x30, 0x30, 0x3a, 0xe4, 0xe4, 0xb2, 0x62, 0x59, 0x18, 0x65, 0x66, 0x6a, 0x45, 0x90}, + {0xb3, 0xdb, 0x6b, 0xd3, 0x89, 0x7a, 0xfb, 0xd1, 0xdf, 0x3f, 0x96, 0x44, 0xab, 0x21, 0xc8, 0x05, 0x0e, 0x1f, 0x00, 0x38, 0xa5, 0x2f, 0x7c, 0xa9, 0x5a, 0xc0, 0xc3, 0xde, 0x75, 0x58, 0xcb, 0x7a}, + {0x81, 0x19, 0xb3, 0xa0, 0x59, 0xff, 0x2c, 0xac, 0x48, 0x3e, 0x69, 0xbc, 0xd4, 0x1d, 0x6d, 0x27, 0x14, 0x94, 0x47, 0x91, 0x42, 0x88, 0xbb, 0xea, 0xee, 0x34, 0x13, 0xe6, 0xdc, 0xc6, 0xd1, 0xeb}, + {0x10, 0xfc, 0x58, 0xf3, 0x5f, 0xc7, 0xfe, 0x7a, 0xe8, 0x75, 0x52, 0x4b, 0xb5, 0x85, 0x00, 0x03, 0x00, 0x5b, 0x7f, 0x97, 0x8c, 0x0c, 0x65, 0xe2, 0xa9, 0x65, 0x46, 0x4b, 0x6d, 0x00, 0x81, 0x9c}, + {0x5a, 0xcd, 0x94, 0xeb, 0x3c, 0x57, 0x83, 0x79, 0xc1, 0xea, 0x58, 0xa3, 0x43, 0xec, 0x4f, 0xcf, 0xf9, 0x62, 0x77, 0x6f, 0xe3, 0x55, 0x21, 0xe4, 0x75, 0xa0, 0xe0, 0x6d, 0x88, 0x7b, 0x2d, 0xb9}, + {0x33, 0xda, 0xf3, 0xa2, 0x14, 0xd6, 0xe0, 0xd4, 0x2d, 0x23, 0x00, 0xa7, 0xb4, 0x4b, 0x39, 0x29, 0x0d, 0xb8, 0x98, 0x9b, 0x42, 0x79, 0x74, 0xcd, 0x86, 0x5d, 0xb0, 0x11, 0x05, 0x5a, 0x29, 0x01}, + {0xcf, 0xc6, 0x57, 0x2f, 0x29, 0xaf, 0xd1, 0x64, 0xa4, 0x94, 0xe6, 0x4e, 0x6f, 0x1a, 0xeb, 0x82, 0x0c, 0x3e, 0x7d, 0xa3, 0x55, 0x14, 0x4e, 0x51, 0x24, 0xa3, 0x91, 0xd0, 0x6e, 0x9f, 0x95, 0xea}, + {0xd5, 0x31, 0x2a, 0x4b, 0x0e, 0xf6, 0x15, 0xa3, 0x31, 0xf6, 0x35, 0x2c, 0x2e, 0xd2, 0x1d, 0xac, 0x9e, 0x7c, 0x36, 0x39, 0x8b, 0x93, 0x9a, 0xec, 0x90, 0x1c, 0x25, 0x7f, 0x6c, 0xbc, 0x9e, 0x8e}, + {0x55, 0x1d, 0x67, 0xfe, 0xfc, 0x7b, 0x5b, 0x9f, 0x9f, 0xdb, 0xf6, 0xaf, 0x57, 0xc9, 0x6c, 0x8a, 0x74, 0xd7, 0xe4, 0x5a, 0x00, 0x20, 0x78, 0xa7, 0xb5, 0xba, 0x45, 0xc6, 0xfd, 0xe9, 0x3e, 0x33}, + {0xd5, 0x0a, 0xc7, 0xbd, 0x5c, 0xa5, 0x93, 0xc6, 0x56, 0x92, 0x8f, 0x38, 0x42, 0x80, 0x17, 0xfc, 0x7b, 0xa5, 0x02, 0x85, 0x4c, 0x43, 0xd8, 0x41, 0x49, 0x50, 0xe9, 0x6e, 0xcb, 0x40, 0x5d, 0xc3}, + {0x07, 0x73, 0xe1, 0x8e, 0xa1, 0xbe, 0x44, 0xfe, 0x1a, 0x97, 0xe2, 0x39, 0x57, 0x3c, 0xfa, 0xe3, 0xe4, 0xe9, 0x5e, 0xf9, 0xaa, 0x9f, 0xaa, 0xbe, 0xac, 0x12, 0x74, 0xd3, 0xad, 0x26, 0x16, 0x04}, + {0xe9, 0xaf, 0x0e, 0x7c, 0xa8, 0x93, 0x30, 0xd2, 0xb8, 0x61, 0x5d, 0x1b, 0x41, 0x37, 0xca, 0x61, 0x7e, 0x21, 0x29, 0x7f, 0x2f, 0x0d, 0xed, 0x8e, 0x31, 0xb7, 0xd2, 0xea, 0xd8, 0x71, 0x46, 0x60}, + {0x7b, 0x12, 0x45, 0x83, 0x09, 0x7f, 0x10, 0x29, 0xa0, 0xc7, 0x41, 0x91, 0xfe, 0x73, 0x78, 0xc9, 0x10, 0x5a, 0xcc, 0x70, 0x66, 0x95, 0xed, 0x14, 0x93, 0xbb, 0x76, 0x03, 0x42, 0x26, 0xa5, 0x7b}, + {0xec, 0x40, 0x05, 0x7b, 0x99, 0x54, 0x76, 0x65, 0x0b, 0x3d, 0xb9, 0x8e, 0x9d, 0xb7, 0x57, 0x38, 0xa8, 0xcd, 0x2f, 0x94, 0xd8, 0x63, 0xb9, 0x06, 0x15, 0x0c, 0x56, 0xaa, 0xc1, 0x9c, 0xaa, 0x6b}, + {0x01, 0xd9, 0xff, 0x72, 0x9e, 0xfd, 0x39, 0xd8, 0x37, 0x84, 0xc0, 0xfe, 0x59, 0xc4, 0xae, 0x81, 0xa6, 0x70, 0x34, 0xcb, 0x53, 0xc9, 0x43, 0xfb, 0x81, 0x8b, 0x9d, 0x8a, 0xe7, 0xfc, 0x33, 0xe5}, + {0x00, 0xdf, 0xb3, 0xc6, 0x96, 0x32, 0x8c, 0x76, 0x42, 0x45, 0x19, 0xa7, 0xbe, 0xfe, 0x8e, 0x0f, 0x6c, 0x76, 0xf9, 0x47, 0xb5, 0x27, 0x67, 0x91, 0x6d, 0x24, 0x82, 0x3f, 0x73, 0x5b, 0xaf, 0x2e}, + {0x46, 0x1b, 0x79, 0x9b, 0x4d, 0x9c, 0xee, 0xa8, 0xd5, 0x80, 0xdc, 0xb7, 0x6d, 0x11, 0x15, 0x0d, 0x53, 0x5e, 0x16, 0x39, 0xd1, 0x60, 0x03, 0xc3, 0xfb, 0x7e, 0x9d, 0x1f, 0xd1, 0x30, 0x83, 0xa8}, + {0xee, 0x03, 0x03, 0x94, 0x79, 0xe5, 0x22, 0x8f, 0xdc, 0x55, 0x1c, 0xbd, 0xe7, 0x07, 0x9d, 0x34, 0x12, 0xea, 0x18, 0x6a, 0x51, 0x7c, 0xcc, 0x63, 0xe4, 0x6e, 0x9f, 0xcc, 0xe4, 0xfe, 0x3a, 0x6c}, + {0xa8, 0xcf, 0xb5, 0x43, 0x52, 0x4e, 0x7f, 0x02, 0xb9, 0xf0, 0x45, 0xac, 0xd5, 0x43, 0xc2, 0x1c, 0x37, 0x3b, 0x4c, 0x9b, 0x98, 0xac, 0x20, 0xce, 0xc4, 0x17, 0xa6, 0xdd, 0xb5, 0x74, 0x4e, 0x94}, + {0x93, 0x2b, 0x79, 0x4b, 0xf8, 0x9c, 0x6e, 0xda, 0xf5, 0xd0, 0x65, 0x0c, 0x7c, 0x4b, 0xad, 0x92, 0x42, 0xb2, 0x56, 0x26, 0xe3, 0x7e, 0xad, 0x5a, 0xa7, 0x5e, 0xc8, 0xc6, 0x4e, 0x09, 0xdd, 0x4f}, + {0x16, 0xb1, 0x0c, 0x77, 0x9c, 0xe5, 0xcf, 0xef, 0x59, 0xc7, 0x71, 0x0d, 0x2e, 0x68, 0x44, 0x1e, 0xa6, 0xfa, 0xcb, 0x68, 0xe9, 0xb5, 0xf7, 0xd5, 0x33, 0xae, 0x0b, 0xb7, 0x8e, 0x28, 0xbf, 0x57}, + {0x0f, 0x77, 0xc7, 0x67, 0x43, 0xe7, 0x39, 0x6f, 0x99, 0x10, 0x13, 0x9f, 0x49, 0x37, 0xd8, 0x37, 0xae, 0x54, 0xe2, 0x10, 0x38, 0xac, 0x5c, 0x0b, 0x3f, 0xd6, 0xef, 0x17, 0x1a, 0x28, 0xa7, 0xe4}, + {0xd7, 0xe5, 0x74, 0xb7, 0xb9, 0x52, 0xf2, 0x93, 0xe8, 0x0d, 0xde, 0x90, 0x5e, 0xb5, 0x09, 0x37, 0x3f, 0x3f, 0x6c, 0xd1, 0x09, 0xa0, 0x22, 0x08, 0xb3, 0xc1, 0xe9, 0x24, 0x08, 0x0a, 0x20, 0xca}, + {0x45, 0x66, 0x6f, 0x8c, 0x38, 0x1e, 0x3d, 0xa6, 0x75, 0x56, 0x3f, 0xf8, 0xba, 0x23, 0xf8, 0x3b, 0xfa, 0xc3, 0x0c, 0x34, 0xab, 0xdd, 0xe6, 0xe5, 0xc0, 0x97, 0x5e, 0xf9, 0xfd, 0x70, 0x0c, 0xb9}, + {0xb2, 0x46, 0x12, 0xe4, 0x54, 0x60, 0x7e, 0xb1, 0xab, 0xa4, 0x47, 0xf8, 0x16, 0xd1, 0xa4, 0x55, 0x1e, 0xf9, 0x5f, 0xa7, 0x24, 0x7f, 0xb7, 0xc1, 0xf5, 0x03, 0x02, 0x0a, 0x71, 0x77, 0xf0, 0xdd}, + {0x7e, 0x20, 0x88, 0x61, 0x85, 0x6d, 0xa4, 0x2c, 0x8b, 0xb4, 0x6a, 0x75, 0x67, 0xf8, 0x12, 0x13, 0x62, 0xd9, 0xfb, 0x24, 0x96, 0xf1, 0x31, 0xa4, 0xaa, 0x90, 0x17, 0xcf, 0x36, 0x6c, 0xdf, 0xce}, + {0x5b, 0x64, 0x6b, 0xff, 0x6a, 0xd1, 0x10, 0x01, 0x65, 0x03, 0x7a, 0x05, 0x56, 0x01, 0xea, 0x02, 0x35, 0x8c, 0x0f, 0x41, 0x05, 0x0f, 0x9d, 0xfe, 0x3c, 0x95, 0xdc, 0xcb, 0xd3, 0x08, 0x7b, 0xe0}, + {0x74, 0x6d, 0x1d, 0xcc, 0xfe, 0xd2, 0xf0, 0xff, 0x1e, 0x13, 0xc5, 0x1e, 0x2d, 0x50, 0xd5, 0x32, 0x43, 0x75, 0xfb, 0xd5, 0xbf, 0x7c, 0xa8, 0x2a, 0x89, 0x31, 0x82, 0x8d, 0x80, 0x1d, 0x43, 0xab}, + {0xcb, 0x98, 0x11, 0x0d, 0x4a, 0x6b, 0xb9, 0x7d, 0x22, 0xfe, 0xad, 0xbc, 0x6c, 0x0d, 0x89, 0x30, 0xc5, 0xf8, 0xfc, 0x50, 0x8b, 0x2f, 0xc5, 0xb3, 0x53, 0x28, 0xd2, 0x6b, 0x88, 0xdb, 0x19, 0xae}, + {0x60, 0xb6, 0x26, 0xa0, 0x33, 0xb5, 0x5f, 0x27, 0xd7, 0x67, 0x6c, 0x40, 0x95, 0xea, 0xba, 0xbc, 0x7a, 0x2c, 0x7e, 0xde, 0x26, 0x24, 0xb4, 0x72, 0xe9, 0x7f, 0x64, 0xf9, 0x6b, 0x8c, 0xfc, 0x0e}, + {0xe5, 0xb5, 0x2b, 0xc9, 0x27, 0x46, 0x8d, 0xf7, 0x18, 0x93, 0xeb, 0x81, 0x97, 0xef, 0x82, 0x0c, 0xf7, 0x6c, 0xb0, 0xaa, 0xf6, 0xe8, 0xe4, 0xfe, 0x93, 0xad, 0x62, 0xd8, 0x03, 0x98, 0x31, 0x04}, + {0x05, 0x65, 0x41, 0xae, 0x5d, 0xa9, 0x96, 0x1b, 0xe2, 0xb0, 0xa5, 0xe8, 0x95, 0xe5, 0xc5, 0xba, 0x15, 0x3c, 0xbb, 0x62, 0xdd, 0x56, 0x1a, 0x42, 0x7b, 0xad, 0x0f, 0xfd, 0x41, 0x92, 0x31, 0x99} }; + + //Debug printing for the above types + //Actually use DP(value) and #define DBG + void dp(key a); + void dp(bool a); + void dp(char * a, int l); + void dp(keyV a); + void dp(keyM a); + void dp(xmr_amount vali); + void dp(int vali); + void dp(bits amountb); + void dp(char * st); + + //various conversions + + //uint long long to 32 byte key + void d2h(key & amounth, xmr_amount val); + key d2h(xmr_amount val); + //uint long long to int[64] + void d2b(bits amountb, xmr_amount val); + //32 byte key to uint long long + // if the key holds a value > 2^64 + // then the value in the first 8 bytes is returned + xmr_amount h2d(const key &test); + //32 byte key to int[64] + void h2b(bits amountb2, key & test); + //int[64] to 32 byte key + void b2h(key & amountdh, bits amountb2); + //int[64] to uint long long + xmr_amount b2d(bits amountb); +} + +#endif /* RCTTYPES_H */ diff --git a/source-code/RingCT/runtest.bat b/source-code/RingCT/runtest.bat new file mode 100644 index 0000000..39b5304 --- /dev/null +++ b/source-code/RingCT/runtest.bat @@ -0,0 +1,4 @@ +gtags.exe +mingw32-make.exe clean +mingw32-make.exe +a.exe > .results diff --git a/source-code/RingCT/runtest.sh b/source-code/RingCT/runtest.sh new file mode 100644 index 0000000..656657e --- /dev/null +++ b/source-code/RingCT/runtest.sh @@ -0,0 +1,5 @@ +#!/bin/sh +gtags.exe +make clean +make +./a.exe diff --git a/source-code/RingCT/tasks.bat b/source-code/RingCT/tasks.bat new file mode 100644 index 0000000..5fc782c --- /dev/null +++ b/source-code/RingCT/tasks.bat @@ -0,0 +1 @@ +%1 diff --git a/source-code/RingCT/varint.h b/source-code/RingCT/varint.h new file mode 100644 index 0000000..1536cc3 --- /dev/null +++ b/source-code/RingCT/varint.h @@ -0,0 +1,98 @@ +#pragma once + +#include +#include +#include +#include +#include +/*! \file varint.h + * \breif provides the implementation of varint's + * + * The representation of varints is rather odd. The first bit of each + * octet is significant, it represents wheter there is another part + * waiting to be read. For example 0x8002 would return 0x200, even + * though 0x02 does not have its msb set. The actual way they are read + * is as follows: Strip the msb of each byte, then from left to right, + * read in what remains, placing it in reverse, into the buffer. Thus, + * the following bit stream: 0xff02 would return 0x027f. 0xff turns + * into 0x7f, is placed on the beggining of the buffer, then 0x02 is + * unchanged, since its msb is not set, and placed at the end of the + * buffer. + */ + +namespace tools { + + /*! \brief Error codes for varint + */ + enum { + /* \brief Represents the overflow error */ + EVARINT_OVERFLOW = -1, + /* \brief Represents a non conical represnetation */ + EVARINT_REPRESENT = -2, + }; + + /*! \brief writes a varint to a stream. + */ + template + /* Requires T to be both an integral type and unsigned, should be a compile error if it is not */ + typename std::enable_if::value && std::is_unsigned::value, void>::type + write_varint(OutputIt &&dest, T i) { + /* Make sure that there is one after this */ + while (i >= 0x80) { + *dest = (static_cast(i) & 0x7f) | 0x80; + ++dest; + i >>= 7; /* I should be in multiples of 7, this should just get the next part */ + } + /* writes the last one to dest */ + *dest = static_cast(i); + dest++; /* Seems kinda pointless... */ + } + + /*! \brief Returns the string that represents the varint + */ + template + std::string get_varint_data(const T& v) + { + std::stringstream ss; + write_varint(std::ostreambuf_iterator(ss), v); + return ss.str(); + } + /*! \brief reads in the varint that is pointed to by InputIt into write + */ + template + typename std::enable_if::value && std::is_unsigned::value && 0 <= bits && bits <= std::numeric_limits::digits, int>::type + read_varint(InputIt &&first, InputIt &&last, T &write) { + int read = 0; + write = 0; + for (int shift = 0;; shift += 7) { + if (first == last) { + return read; + } + unsigned char byte = *first; + ++first; + ++read; + if (shift + 7 >= bits && byte >= 1 << (bits - shift)) { + return EVARINT_OVERFLOW; + } + if (byte == 0 && shift != 0) { + return EVARINT_REPRESENT; + } + + write |= static_cast(byte & 0x7f) << shift; /* Does the actualy placing into write, stripping the first bit */ + + /* If there is no next */ + if ((byte & 0x80) == 0) { + break; + } + } + return read; + } + + /*! \brief Wrapper around the other read_varint, + * Sets template parameters for you. + */ + template + int read_varint(InputIt &&first, InputIt &&last, T &i) { + return read_varint::digits, InputIt, T>(std::move(first), std::move(last), i); + } +} diff --git a/source-code/RingCT/warnings.h b/source-code/RingCT/warnings.h new file mode 100644 index 0000000..9a1c38c --- /dev/null +++ b/source-code/RingCT/warnings.h @@ -0,0 +1,11 @@ +#pragma once + +#if defined(__clang__) +#define DISABLE_GCC_WARNING(w) +#define DISABLE_CLANG_WARNING DISABLE_GCC_AND_CLANG_WARNING +#else +#define DISABLE_GCC_WARNING DISABLE_GCC_AND_CLANG_WARNING +#define DISABLE_CLANG_WARNING(w) +#endif + +#define DISABLE_GCC_AND_CLANG_WARNING(w)