Package: diffoscope; Maintainer for diffoscope is Reproducible builds folks <reproducible-builds@lists.alioth.debian.org>; Source for diffoscope is src:diffoscope (PTS, buildd, popcon).
Reported by: Vagrant Cascadian <vagrant@debian.org>
Date: Mon, 24 Apr 2017 18:00:01 UTC
Severity: wishlist
Tags: patch
Found in version diffoscope/81
Fixed in version diffoscope/82
Done: Chris Lamb <lamby@debian.org>
Bug is archived. No further changes may be made.
View this report as an mbox folder, status mbox, maintainer mbox
Report forwarded
to debian-bugs-dist@lists.debian.org, Reproducible builds folks <reproducible-builds@lists.alioth.debian.org>:
Bug#861109; Package diffoscope.
(Mon, 24 Apr 2017 18:00:04 GMT) (full text, mbox, link).
Acknowledgement sent
to Vagrant Cascadian <vagrant@debian.org>:
New Bug report received and forwarded. Copy sent to Reproducible builds folks <reproducible-builds@lists.alioth.debian.org>.
(Mon, 24 Apr 2017 18:00:04 GMT) (full text, mbox, link).
Message #5 received at submit@bugs.debian.org (full text, mbox, reply):
[Message part 1 (text/plain, inline)]
Package: diffoscope Version: 81 Severity: wishlist Tags: patch I've worked on support for diffing .dtb files, a format used to describe systems such as powerpc, arm and mips. Attached are two patches, the first implementing support, and the second adding tests. They're also available as a git branch: https://anonscm.debian.org/cgit/reproducible/diffoscope.git/log/?h=vagrant/dtb I basically copied the openssh pub key diffing support and modifed to support .dtb files instead. Any comments, suggestions or improvements welcome! live well, vagrant
[0001-Add-support-for-.dtb-device-tree-blob-files.patch (text/x-diff, inline)]
From c55c67da65ed37bd4268005fbdede27767b1331b Mon Sep 17 00:00:00 2001
From: Vagrant Cascadian <vagrant@debian.org>
Date: Mon, 24 Apr 2017 10:21:21 -0700
Subject: [PATCH 1/2] Add support for .dtb (device tree blob) files.
---
diffoscope/comparators/__init__.py | 1 +
diffoscope/comparators/dtb.py | 39 ++++++++++++++++++++++++++++++++++++++
diffoscope/external_tools.py | 3 +++
3 files changed, 43 insertions(+)
create mode 100644 diffoscope/comparators/dtb.py
diff --git a/diffoscope/comparators/__init__.py b/diffoscope/comparators/__init__.py
index 81f6d16..6527b6d 100644
--- a/diffoscope/comparators/__init__.py
+++ b/diffoscope/comparators/__init__.py
@@ -84,6 +84,7 @@ class ComparatorManager(object):
('gif.GifFile',),
('pcap.PcapFile',),
('pgp.PgpFile',),
+ ('dtb.DeviceTreeFile',),
)
_singleton = {}
diff --git a/diffoscope/comparators/dtb.py b/diffoscope/comparators/dtb.py
new file mode 100644
index 0000000..12dbf39
--- /dev/null
+++ b/diffoscope/comparators/dtb.py
@@ -0,0 +1,39 @@
+# -*- coding: utf-8 -*-
+#
+# diffoscope: in-depth comparison of files, archives, and directories
+#
+# Copyright © 2016 Emanuel Bronshtein <e3amn2l@gmx.com>
+# Copyright © 2016 Vagrant Cascadian <vagrant@debian.org>
+#
+# diffoscope 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.
+#
+# diffoscope 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 diffoscope. If not, see <https://www.gnu.org/licenses/>.
+
+import re
+
+from diffoscope.tools import tool_required
+from diffoscope.difference import Difference
+
+from .utils.file import File
+from .utils.command import Command
+
+
+class DeviceTreeContents(Command):
+ @tool_required('fdtdump')
+ def cmdline(self):
+ return ['fdtdump', self.path]
+
+class DeviceTreeFile(File):
+ RE_FILE_TYPE = re.compile(r'^Device Tree Blob')
+
+ def compare_details(self, other, source=None):
+ return [Difference.from_command(DeviceTreeContents, self.path, other.path)]
diff --git a/diffoscope/external_tools.py b/diffoscope/external_tools.py
index 3ce2cbd..8788936 100644
--- a/diffoscope/external_tools.py
+++ b/diffoscope/external_tools.py
@@ -57,6 +57,9 @@ EXTERNAL_TOOLS = {
'debian': 'enjarify',
'arch': 'enjarify',
},
+ 'fdtdump': {
+ 'debian': 'device-tree-compiler',
+ },
'file': {
'debian': 'file',
'arch': 'file',
--
2.11.0
[0002-Add-tests-for-.dtb-files.patch (text/x-diff, inline)]
From 78d43c516db58a89c23ee41a1eb23e47bf2109c8 Mon Sep 17 00:00:00 2001
From: Vagrant Cascadian <vagrant@debian.org>
Date: Mon, 24 Apr 2017 10:35:52 -0700
Subject: [PATCH 2/2] Add tests for .dtb files.
---
debian/control | 1 +
debian/copyright | 12 ++++++
tests/comparators/test_dtb.py | 57 +++++++++++++++++++++++++++++
tests/data/devicetree1.dtb | Bin 0 -> 68260 bytes
tests/data/devicetree2.dtb | Bin 0 -> 68323 bytes
tests/data/devicetree_expected_diff | 71 ++++++++++++++++++++++++++++++++++++
6 files changed, 141 insertions(+)
create mode 100644 tests/comparators/test_dtb.py
create mode 100644 tests/data/devicetree1.dtb
create mode 100644 tests/data/devicetree2.dtb
create mode 100644 tests/data/devicetree_expected_diff
diff --git a/debian/control b/debian/control
index d0eef28..e3cbc55 100644
--- a/debian/control
+++ b/debian/control
@@ -19,6 +19,7 @@ Build-Depends:
dh-python (>= 2.20160818~),
docx2txt <!nocheck>,
dpkg-dev (>= 1.17.14),
+ device-tree-compiler <!nocheck>,
enjarify <!nocheck>,
fontforge-extras <!nocheck>,
fp-utils <!nocheck>,
diff --git a/debian/copyright b/debian/copyright
index ac52ac0..8c0e230 100644
--- a/debian/copyright
+++ b/debian/copyright
@@ -93,6 +93,18 @@ Copyright: 2007-2014 OpenWrt.org
2010 Vertical Communications
License: GPL-2
+Files: tests/data/devicetree*.dtb
+Copyright:
+ 2015 Nikolaus Schaller <hns@goldelico.com>
+ 2012 Texas Instruments Incorporated - http:www.ti.com/
+ 2011 Texas Instruments Incorporated - http:www.ti.com/
+ 2013 Linaro, Ltd.
+ 2015 Sakari Ailus
+ 2011 Texas Instruments Incorporated - http:www.ti.com/
+ 2017 Texas Instruments Incorporated - http:www.ti.com/
+ 2009-2010 Texas Instruments / 2009 Nokia
+License: GPL-2
+
Files: debian/*
Copyright: 2014-2015 Jérémy Bobbio <lunar@debian.org>
License: GPL-3+
diff --git a/tests/comparators/test_dtb.py b/tests/comparators/test_dtb.py
new file mode 100644
index 0000000..8dbc6c3
--- /dev/null
+++ b/tests/comparators/test_dtb.py
@@ -0,0 +1,57 @@
+# -*- coding: utf-8 -*-
+#
+# diffoscope: in-depth comparison of files, archives, and directories
+#
+# Copyright © 2016 Emanuel Bronshtein <e3amn2l@gmx.com>
+# Copyright © 2017 Vagrant Cascadian <vagrant@debian.org>
+#
+# diffoscope 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.
+#
+# diffoscope 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 diffoscope. If not, see <https://www.gnu.org/licenses/>.
+
+import pytest
+import subprocess
+
+from diffoscope.config import Config
+from diffoscope.comparators.dtb import DeviceTreeFile
+from diffoscope.comparators.missing_file import MissingFile
+
+from utils.data import load_fixture, get_data
+from utils.tools import skip_unless_tools_exist
+
+# Generated by: dtc --in-format=dts --out-format=dtb --out=devicetree1.dtb devicetree1.dts
+dtb1 = load_fixture('devicetree1.dtb')
+# Generated by: dtc --in-format=dts --out-format=dtb --out=devicetree2.dtb devicetree2.dts
+dtb2 = load_fixture('devicetree2.dtb')
+
+def test_identification(dtb1):
+ assert isinstance(dtb1, DeviceTreeFile)
+
+def test_no_differences(dtb1):
+ difference = dtb1.compare(dtb1)
+ assert difference is None
+
+@pytest.fixture
+def differences(dtb1, dtb2):
+ return dtb1.compare(dtb2).details
+
+@skip_unless_tools_exist('fdtdump')
+def test_diff(differences):
+ expected_diff = get_data('devicetree_expected_diff')
+ assert differences[0].unified_diff == expected_diff
+
+@skip_unless_tools_exist('fdtdump')
+def test_compare_non_existing(monkeypatch, dtb1):
+ monkeypatch.setattr(Config(), 'new_file', True)
+ difference = dtb1.compare(MissingFile('/nonexisting', dtb1))
+ assert difference.source2 == '/nonexisting'
+ assert len(difference.details) > 0
diff --git a/tests/data/devicetree1.dtb b/tests/data/devicetree1.dtb
new file mode 100644
index 0000000000000000000000000000000000000000..996dc01710be662f1d73895edbe09e286e341710
GIT binary patch
literal 68260
zcmc(I37lkCS?|5Q&6Z`d0Kp)1G9d(*BE8LqikA>V2QftCsVLZ~uBz@XrmCw_RXyFq
zdk<%PhKGt8Tyc+riWq$nk<Be;FvM+46nLm81l&c9%eeC3{r}%R-#OpCb-TNIrl+~T
z->GxHvwYwGeBascQjcEx*}se8y>E-6=x7uV&A`72?h3g5aJY82qd5Ld8qWO2jv9u~
za#5>YTW*(^tF2D?V5?bfPnR53np|9ZUDT_mv4_{ze3->pegtkG9C<4Jv>g3hLq8qi
zBX_2<#%JL#)f(0D7qynVtwwEp@+GscLk3)NWvSJzElYTabh%M4cWYfnP|me*UvhJ+
z(oPN^osjG1`cx&EIXZEK6tnq!w-o1_%IAAYVZOr|e#HN>Y`$)-Q!h6t`fyoUifrb6
z<+^z*eR*G9ocGuSk)~Dhe5>o_o$=L@yw?FkBbT>bC)i`u+s%ziHJL;nUZUqpdqtEC
zdLw%>e~i3|!F3rU%bn)IN~_bWt(D4084>ubAit$gOKM2J2Q)FL+&AU&za<*^u1~o1
zYvBK+(3f|wj`lq3!RX4DpNcLy6h&7bdBpH|j|-Ep)UVxKNe<0Wp{i1mcO}xZ*h|RC
z$P~|R_@`e<>J)!G#xpKV%*=DPTAN>4?1~CSUbj_2wB#54xXx6nFE4b;Oo1MoK`)mw
zLOWc^B_K+5a@Iu&@A?Vhz_h)t9HOS4H$}pfarxqEx2^G6IhDgQ4j@tWB>ZjnVnJM#
z#l9CXHl|D6=33OPH`|R`Y2LLS<`bPQF>}lxDa*JsaC_j0nfW+|Y&2#dIr=D^@;uv^
zo@<utGC0JI88&8bPUaymgKwsU_E^gS97OIVU_-glEL>WJDDGC8N$6sNiES~+Lxuub
zqKhaRM^3td>h0y5a&f!9++0~prcJ*ShQ7_T%hgJ2c_Bi^O0Ux>b?eKEjhf1II3g4u
zI=TrCEkpZ!9F8iW-grF$=X4m4BD~+w2cqb6&oFd?@Shp_Hb=X<%r%>p$vMEa;|}n}
zcfef@2mQuRc0R*&U*LS$T4;>5^gX5o;eRqTWs;V5o$8Qsr}A>|1Ru)1$?<)T^A9@z
zdCn(3;y_mupZ({l2p@L-QRhD&afr|0I%jC&B5iS1yWP2JyY8V;&wm9zz!kj>j@M77
zUi5b7zr*?WJOAgL|A6z~>HK#&|J}}iuk+vU{9ktduR8xh=Rf594><o}=Re~7-*W!%
zIRC8kA9eokJO4w@|A_NH>ij=S{rKzQv%P8CN)Y~>p{Xy@R$nXSPH)<4D=oV})mOY6
zMK475xQ!oPmhYb%ntVxHzKvS7YuHNJamV)t<OR<7M(5w<{Q1<ka$+;i#gHSkl{3H6
z>$R4HBw~DHDku5`eCp$q&i^y#|Aq6}E|~r|&i}OY|K9meI3I0a^8JhR|JC{b?)?9B
z{%4&3+0>7J+|fpFG1q%avp%G4eXyFWcka&CXE*ZQfqWn9=NJ8LmY>j;UvITBGci5k
z8B(_67e4^|USrB92tzj(pU~tdJTW}aaePdsj!Ynq7x`VuK=))9Nx9KGO^3YbG+3Y=
z4YQo9|AzC{CCKO6cfMSlAdPl&eAq68j@$EC=gxI%iz|(CuhmJW<^?A6eIXp@8Oc(T
zg?g4`Ixgl_ybmC3<;*+U$-xjfM@CaKZbD(%t6-ygilZ<c{NlCf+SLSk75}|a>EQ<r
zogn;=hGzXpdplGbt;+Fq#CJRjb%`QaA64eN?L%{z_vRKV$FbsPY>@r-loTvaVHi59
zw3_W!x8AFjP^u)tB$w*u9#EXO#^AILzlgBW7401@ne+r<>Q(czPNbz>IgG%En2^U}
zgI;skigE2iHY+Cq{a<iaF6kh5((8uv5HHPZ<zJ|7D9`Z~-56cP3DR=ooX{5IcIYOz
zZWOuy7H~;FA|2#TZM$wb-sRhkp$m1x^|soC?S{0)xE;FTcw^-xpfSE@<dP0@v5wy6
zK9$o=VIR6Yhl#Ysv>m#*3_Puz1oVHvSsRcJa%V2KE@F-^l;<!M>W1ex79(kkaXWOg
zA3Uv`1T^OVj9k)`t1gzIs*1THtkVUT+mGPn1G!Tk;|y$VKf<9SdNrKt=4lA)euLx8
zbK!Vt`uXffbibkNi4(a!$2dfCje?7!S$FZ-w|QNYdWs=VK>sD2wHImCnfh_L*5xL(
zawvP|kllkL6Uy?^I-Ye=q&Xj)p1tHwrt?ShoM8km(y(j%5PYs>Ug-Q=;4=+%h(Fj{
zi#lr{a1mSF?lggGdV)t>5}W4D;zA~qmg1PW3sDK9Ee`hmw4Dq%ub-%QdUKP9=Z<1Y
zcAVTizu3-O9M__S`dY0TCUPe?ek_h&Wy>WXXeUkQSW8;!+v-;4u*QS1q&kz<So2wV
zTL0|IA>~P4Tsv?szZ&jIa8HKg+-l^qZ(o`qPWdxz_kqMkT5vf`lWs|>Wh^H4SN5rD
z{Y1T5>jXt0+T|BqRtCo#wq51-xC?83V7#*J;^4*DJNUc_!q`)Lns`YEyp7|nmEL4h
zO_$Ls!(!$bOw5aAEW^T5M|tM)ip~@d*O<i5wUEfHwi`J1S(|b#rAQua;@ZhVxq`*B
z5vp~j?Y;oc(L?mfUuj~FU0j^XY)*NpK3}GN4l0-DW-4brxh_3UkeBOyrKx|?UKcal
zqYI9+PR7Q%;29e9u<87h_R|gZZ|Ws7sc*%g`qz3VNV8{2)B|bJ!|L&s_FQ9TuAYt_
zTE@1)L2YB&`aqaCPpCX%A}yGlo~qMcRX*SO;4*bD#6=8>BSDz$TWR7VoxyczXK;-g
z90|g2Ff?(ICax44_k#Uvi!_Z>)Wif&?2%pSCi8(`U*Nda#qWlHdNxYn(QR!ms;)Gf
zC+EuT`MGwbkxoXcM{BnY=OPNlCAhh(o|~RJ9@OpavITyp$WL)32-7J|J(3oA>0COc
zGpXhoT-JN!SYOMLFZ+(tlttRenm&J755Fccycy<PYGsi&vX03uunE6R@OcNWUwp&A
zgQYK*Ak4Yj$|N0RPRWhGi3^hXruUyRG7^NjR<JTj2bt4H=Vnx^A>Y7t9J>7pu=D&A
zgt;!U@<@w3&TTWY63VRoIPY3{9Dl-Eo`p(nEI(db>YZ%cNu4rw!*RUfSgPaceuS~k
z;F9XnakyLI*pU@eg0Pu`WdBauU~F>E$AaxBqJ24wanQAqmGd}weQDq)7-t;~uWv0h
z9`XuC(ix1H8=ET)-$1o~7U!UIk&#t6=9~F4PJrV&IF-kKN;;2?8dO7TUW<+Wjdot@
zVue}CuGn0Dv8|QG^_f}IsGS81A(-{B;JhA@Dw{Y-3r-m;j~#B#l^d%#2;Yu1hLJUp
z4xgRFMq03?Ye1_$Uk9r{uDf&ngew8F0!{0_8`(DNBS}FYF>6+7f20k*<}~}r<fPlx
z1U*}fgZ2|Ei#BE-R=YipuvwGP=2s*x9bR9*IpESbuF&SBGq|_0-xyh9bINhJhl<vf
zH-vP-Mmmqp8s72BjE{r%8!L-C<vPOg+qB<2GvpPVqy=ZKxq^Ecoto=68||S79ea$d
zf%?sS4jXB~#yxGh(Yw&Kl<GVI-{<9Ikrr8U_C5zuUBr03X6!V`y3NWOGkn-?NsBDq
z6Q*+#r!uu;M&9}MH8Y;Z1%1t*DL`yrU$bS2nY3V*Hge&6B*TB8wsE7;4e^lnI-KM%
zpB&QxOLc!f<CT@ezQwk#{HQ~oAvl_SZBOE8czrs2R>&)TjkLi`$P+V&<E1hzW*rYW
zrA?P)z2r|mnBR{7D$A{r_F#<MgK>iR_E3iM2Q3(srY?!e;PNLFn#W=qwC|IjD?iZq
zc~i(Qx+0yyl&;*4%{YY>VH>ocSXl-AV$ZD(3%ov?esK;bX~BtG!CZB0$9lu89|r0h
z&&gpTEtvdTh}}a^DZO1XW6Vb9l)J%?>kRVMwK&?BoT-f=&e=ldo+QvQ!!I^8+Zt(a
zSKKC%wMH%NxffznyB=r1C1&ME8;=K?I4?^a4X@9}&kcE{Et1Y)-o|x?ku{L559Y9u
z&STrIb%vEiof;i)y3Q!&aFPyf@(^~W+tVh=*Usg{IT~aawn=XOv~93Wk``>P4_Cv{
zq|f(u<l)6~gN}iwUl!VyG8IRH@XdxMF493~Gq|&{Jvt-byv~TjVJXy^-DeXU>40q#
zXGJ>lc|Mu(Wl)_NIfXjIxT84Z1mTw$nz%>{E>4#iU*uR~o5z=}jwh2jjHELd2N+Ly
zw!=N)I!EHF6B(zCydl~-hI6(Z;(Vnvf<w25G|}gjp{Y;Od90g_FPEVVv1WJv9)n=C
za@c3hIsUq13!&ukelsFn-DIpLZSfxB+InGo=NH;PciwY(;&8z0n@^@)8s|*vlynB;
zHrwCG+p_)bT9H^u=do^P|Ep1Ekn<lai*3NHEw<DKUW>A}4Uo2&4{zgnhM5Cp{bSFi
z3fjdLiNgl3uU#B+Y1%GGXK)YDF0MkELGDu;S%u@OjtRt)faPI0t5ec>Y}?fitSq*J
z+?mj&h!QM>VD+6K;)qLA9g-HDJkP-Ca_%_8*Xexbb0cdY9aeJKNDDTcF5rIm)Lgey
znd2ZS`~UUteUGCY`%`!hak*7mE!TS+oUPu7B5FVCbXTCIZ?yv*CkP)iH2Xd2KCFDe
zi$-@(yDERHOWqU6V$DAJz%u*cxSt?K_Ia+8%$lqa-}8}2<q;q0K78)bO7mG<(oZrv
z^jm4+yBqw7iS@R!63|}+r#vZ}w8)lcEmB*mQZ%2HJ?OsF%Aw83OZjnZNdleG5u%4)
z%^x_v{{tH#6v|pGgN_$mCpg&ywe>Fv`DKnHEqL$_mn>V4O>wwao|(1bp!zW~Sbv^x
zcz)Cm<%vx8ed-~-1>m$1@}7@AjO>B*Q8n1uW=IP*Ja~df43e@ttWx`0OoQr!{YT5Q
z{tP>s`q`T}8eZSr^Ma69>_s}oCyzjE3qC7@?V0?~7q3}w30~5I7tM?MtZaimtqkIg
zH^zHO;?kM*)A$iQi|yXzL^`T-w`QMZ<Q!$~%(*N(R%TbsYD<nw94A$G#I`TcVr!5-
zJwf<|hGzRCZSd)%y4nnVS&MIwv3xi95?=zB$2f*Kt%Gfk)C2S164J${qzy*Dq11X?
zY=e&Htapa*<i)qmC81u0ws}!VmwJ=-^$w5UUsT)V)&qMJgNfl=4bApL+F;xk+pylA
zuiRI#C#b&dWctjY^Vf?5{(;8p(U4zkLR#vJw^o+Aav-!}U)J_muq^X^fc?bC>1!M8
z*Sz<u?L9%5aZ1w;qyw(>#>Ylu%y!|*ue;x!!$n$f;mvt@T+M4M;4kXG7pgDLm8zcv
z;rAGt`Xa5kvQ`Y`E(R{HaV@U*8k)FBE3T{+L%EBA>vDr5LHK=!CN9!x`%2%FlI@9^
z$h1xt+g9eWF(Z#{d2gWm`a^;=GfqjrBpvYe59ZsAZ_g(9OuFDBE%;<Sb7!`Q<5h%h
z(D7`ubJ5uFPY|XpRUX51PH)|IeMXk#+c9n!Ieqq{eV=4-BnZFX&@4+j;L461ir==i
zLC3SraPf>v`6meflA&3abikDzIkeoxz{UD0{{-P*HZ*aO4!E)-hnBk-xcDB3@=p-{
z6+;sjX~D%8sI%(w<t_#;o;6!sziMdWBJFWy)#b}w3|u_4vbcWD(8NVraLG8aefLjZ
z666fD?wJkwW&9#7xR$DS+d)F>az45;G786tCmRe2!Vemnx*{EPm2RLB<@MW#X`P!S
zt`4$ac|j;Yke+T2`9)8p1yi?*Lp<5hPjZarbs@Skazs~l9l`N5KhA%Pkw;yT7F>&M
zypHXc>FZ+}KvxFSy1Fv<*_L-G%wBw5nX2amb$%(F($oWK!Q|HO)<T-kwi~Xyxff5L
zwW%-nY8||H(*MjQ_O8-?jJ!fS<=64Qj&drO_(%tQlbIHz`7S2D{CfVO96r*5kK=$*
z-cDf4j|XRR*hr_ktH@f$!1Fr3n7YfaX+Ds{M>^nh=Y4K;*a`jR*EYYA!$&&co3iHJ
z5&h-YI1lIWkq-EFzHj8$Iv>p8BQ5x3uWMUh=;If&{pI((kL2)?R(x6O?hHOVXC=V$
zn>l=>6<^l6JA*I32mY-bKGK3OUCU++yc7L5zoz}|96r(>UrvELfiJ(d{hb^>(t?j?
z;hzV5=KM8IfaP~{_(*$v6Pe*}N5(&Mb}#tO=J1ggeC|6iwgK*hefJtX3Btc;Xs%sI
z2Ygur?*zU*22X<UqlP9v(t?kRIexb;YvLWT@tDDsApDr2iIKEm<OkY%CuFNtb1zjD
z>5yXr*QeP#M1H)KHR(}gab>wCl_JWEdk4x>IzjjWLlYBekI5ayCk~XBv-8>@m|h%Y
z420?DLw?z3kycDo?uIUpBQI1}=3Z4HuKYghojF{jQ(W?{?}qo7IUcS1%?YOA5?&lH
z!|f@2)HO{j(*0J>Tuoi&nI&>{JXv>vr!o?xeOX8s8;}n8^wy!?arL}1_h~NR-l1S3
z4vXn!hGttO9WV{B&mG{|57yK3#rIM!^4dvk@w8Ac)_d>%K*tHfzi(*Po3zwhzE`mM
zJK=+#FDF6HK>O`45Ba5ykaqT{w<hPR^Smd2f#aEx(brBnp0Rz{Hu6)3rmjc}rtVUC
zGG|OJXUDVcJ_ESc;7Jhv149!Z>C~20cVwy>3-z-2#Fl8so82?pOmF5Mq_i>0P<;>=
z>41x?kIIH;TU*uJ9YLPh)wX%sHIMJ7Lw;#%q!nMf`q)`~JOfgFB?!O6(9|Dk!ME6E
zU&ts>%UQc_xBe(Y<s=CIjG>8-wBVEXgD{44PcEltm^-USVz4;xH#BjQc6#i&{_6p1
zxr?dC{2JhAbNEPmd|5O5dR<I>5bxzA2>+a+sXx+!kI%uHM=OeSH|RX^>>y*Hd17D4
zFMXG^$7F7gUI->GlU(_MFugqF7fhrDQ~L2=E-xqbD`xBB8ekkYayZU$m{XiG_gmd0
zNPCk>r~OE4`<e>t!VR%q$hweqb@lDTn;`AZkS=;79q{S8a1!6wK?1HK-Cf|iaDQU>
zGW->Wrp`zQOxv?AWIZk4=^e0znPUoV@rqo%No&2smpCt)Eu{UL@lh})1{1?yX=vJp
zbilYhwqd<3-<ch-jai=*+UAwHdXv_AhcAO(T-#8d?aN7^V}}2mp=le^0ps@AhV{05
z5AA?$#zMUcZSz$jUB)odTJP{x=!<I`+GQi#e04|{jHCm`?XeB(ZTTMF0o&{f^(wT@
z*MxMbH)*Z+VgE(li))+wxSJSE48O|I>^GzX#_h2U>uvcS*#X<^4)rRu&DVx>u?=ah
z_mLg4O@7=>3?_!Z&d{_C>40&2Y{Pn6zDIY!Hs-v$&^E8m)tj`|`{)kYCO_^b1{1@t
zF*I#MI$+!$+pyl2@39@Qjk#A+Xq&Ik)tj`|``8ZICO_^b1{1?`hNf*u2aMZe8`j(N
z<$jb$m)TFW>71B3M;>%vnt;EXQwQ1u-WBr8ct+aQx!yXQo?q%l%kj<N8sy%Gk<r&S
zc+PbNobpZ({x(C?4x~M%Lpy_Mzrm0o{OyJ&Cej|$%+6rC++au${tiPE6KRiWdS@`v
z{?>N)8k(3$drVV1gXvO(Awl@fh9)M`f@!si|2RUw4#yn6F7~`i`rZKN9Crmdh3)*3
zkRB%pf2W~|i?rb4xDY<UygsG@o>|=L^MmCaCeq%1hvjf@a$*~w;WF|>XSUxJjSb(G
z!$;cVJGAroEZziIzB`AHw8xjeQo5u1%a0k~lfy^a<4YgW+fjV^@#A}Q_(*$v>AkBR
z#g`vTzAuN5wBVDmgts_6yuyCF)q5P9^^g3R@|GMv(t<BN)6D?Xaodh{+l?=Ow)_1#
ze55_T&qM#X(%?xD{sBXCOeXExU+-9Uc-ayAnsv3z89$iAM_Tb6{XF0^doscILpgk;
z72lE113t5#7kodQ!$(^2<)*hCv9H;a2)-Z5;Ulg1a?{(6;2Se|5`=%$(Ci<i6<@CV
z?g&0}79#q)FNcq`;>%5MJA%)gqY1tr%i$xf_;S<Rj^G<McoKwv+|aZyX~8GYU}h1r
zEb5op4{rDT0TEsg3BqqRH1UxR__7w>34F1^lOX&yLlYnAfG^uab^;$|tDFSkpD;A>
zkq-EZ?yiRNcAany$_@I>jxl6a3|!Oma&+H5DM6ZD(-0%+fU)SVqvw}tix+~?*tHO&
zUAGb=>4355?%VcbG`20oX!j<>NLn!RyFmQr7H?H^#p*tBuQsxF=K7a*M%KRX?vvj=
za8HMuhpWI<;f!ssNCF)*Tr)H=k<MV+;G0cXBd@f%#_?)%gKvIW83~Fkz-iqmleEa>
zztW`pfB%tx&1ZGM^C`;R?0>?n9JX`2_IMn$nd@mUuNx$V@8%E_zIP|55*yg%d@+qd
znAVY)7<Tmfn9BU*d<K%1$@I7L#e_M;^BWjbuY=bT35yNcYAf)vHoSm#Ecf`?UW)Vt
z>~Vs$#gH!NsHCNhd7PVL98`Z+7TcNKV-4KSy0yv*{^h_vIqT||u_?#i4W8LP#bhm)
zAiQK~_BGO?2R_p+%^DH7w2ZaURZJM*Ov}hv_l#R)Voxrwx|1)i9g!(|t@lp41H7qJ
z^aaV@>KR_$)Ri_ME&9N--1?Tv%m%o&x`wmz*dD28r)!QWdpT~4{Lb>CYyr!YBEHBT
z7a-fqQoh7Oxgwj-KIba0`D`29ZuzmwuU>TB7uFx*)B0D+&ABGV%Va@cr%)SZ`a9P#
zoa;7vzvi{bqPnAwc{!RGc;qNFyrJ9q0~b?1PoEaj!(%OPb$=c5QFi+7xqjPo^LNlq
z{}B0h-IK!?ClK*Ra4MhugLI0qTc6SgM7Kdtqd`taFPt-oi)}-3Bnbbpp^1xh+IBfs
z%a|e?97OwaR)2$zpDzgI*Bw7CuHzxU%x$CvSNnK*yZf_|RoI@nRuI|sO2^5bKvbbV
zw%V6p8u*Cpd^`F=m5sif?u5(R`aZyB^1ndkH@odl%hrBp>i-lkzg%z3x7KRioyWj6
zblNAn_0QKmvJNn4|6o5Qonq>wU)FK2uV|jWK8i7Jvv*gxr*h@l7G)Wx{5W=u1)1q)
zVFzRe-Dhr3D$dM2GU!-j#_n~;BGE1X#~`h#K2}{QchEKTjX}RM789@P_i=<-SEK(Z
zaWuTXZ^$-6UKt-r8_byW($$vox9x#zqcG=f{NF|@hvO331kc{08{iT+N+5q+L)tzW
z{wDlr{F_`D<>Cb4rlHx6NgLehKMlD*8Y;p*sIILX>h>8yuGHgJN5kvW?Q+N~x+N_b
z>nF<cAC@xudt3Fl!2$Z3ks){>LTxW?!_o<ekC}ApjkI8DwyL%CE6@5#InT%1e5><P
zZY<y}A<vg%fzhYf^-oMX@sSpM-EwuRy8UCeSx-=ZnRhpdk8MZWPlE8D8k+b>r}{Ja
zjv^A5mb(!B<?-=cQ27?&`?yIbKGG>ZnRmI7-_X7?_6^YPa_hrByZZUIi@C1b?fA#|
z=B8(+C$I(yFnoQip2mTjW6M^)mv7q=b;HZ)N^EQBI04ZL>C!(*r)|w)#-SOHX9DDO
z_*VT}yw{>^7H|KFn_{^KS@T$TBTm!V4iiUXj2yZTVO}vD@o7HBjqwMUDIX`G+i)(Q
z)QxneZl+#H@_B8Yv@HZ16n}4@db9Ep(03c2Y=@+c{GQb-lGc|$z?q7XRX7hDol!S2
z<`6Fr*n}2rOWjs)aiu%YVI~-T!*%lY1dn!_?)#KMsc_?`cBB2dw^X`l+_4xF<o(u=
zU+hWR>$3o^+TPledw_ry9kUpw$3>hv9}`azPO?;433O@31>zK1aISRgO+N_u*UEia
zi*qaYK3;6(v(N7dH1S>n(#uE?{-1_syCj|J5&ut$KMm85KxmyTu0hv@PY*H%X^&Aa
z<QLnL7EJPPFJJl$|7La}xQwm_!nKmaMLLH|K0=FVujBL4*Jil#ec^<WM;nsP;X2Ck
z1<@B3*KWf<L3q{B#6>!X3x6x%fSJ4(LuZ_jwXGxwuNj)yNDDSD+wsyA9&hE}tRXg(
zJ0D!#P`<E@<!yN~<d?QjI*04%PT<Ph@^v{}q;t3?`JYsX_Ikb;`r2>!CkX#{L(`6=
zbGW7^b^sUmeztx64?`0dX~8AqzP?v{;oqCN34HH?;~2|vl4BD4Kl>WnG}{ktMZH)|
zoEwPOVV1ceaWuTXz1!<UUTK%4LwyG5!<n^f@w$m~PnItanf>Px6l-Q*xYhmF9ibjl
zXWO2r6Ek1N3F!Y5@=Lu*oAw2K)ouH~W7?4RASTS!mtt(V^ai+>!Ogfdc!g&I$SZii
z!Q~^(c1POaP0s<Uhb9nRsLw&q0j!+I!ON`Q1^b<jKfJ!SWX43nNLny<7uUj)Xnw<c
z8(Ucu-RQ7TC$w=KXky(5((58Y_<tLkIwURl<h#~Y{=F|^LYea!=M1L8d4cVKPVIWi
z(8NUAVA__sYBNm0lEDPsd779=8%#PK_&gUwPh$o{g77yQnwUrnCRsa99>bryX5P?J
z9iI=j>w~O98=7_|ee-{X{L=183%0af`Nj5yVA{-vl&Aa?gultq)E8;N#J;H0)cpGU
ze4cA$_xahUizsUxj&sy0IJS{*gnJGg>rZ)1djp)qC4Djpbj<J@4NaV+J<iS6wgb#P
z?Bf}poO<ThzrQJaAMoAm?EeJ;x6~^?-ym7*E%p3_p;=GTQqM}ewy@Hzak-46qN9lR
z<!sx%j0wQC(LG<CXGV|}_Sn1I@Z$K$%h^IOeaO(nL|QQQx)zQvvsFAv;9rO*-;X{V
z@=HG=EqHKL(Q7m|#Wbkx%sf?yi!!aAK4NI<iL}MVCRLsk)A@2%S6f}nyfnxYe4G;%
z5AB%8_kT?~@sSpM@;&+Vd0V{;s(iK+U%u^|b|~%aqd9z}Exxqr%hJWy)8ZS{uA@PY
z=nbUjN4@27{h>*x-bf2BeCKpBOeg+?Y@_dZUWu~opD3Dp>d|A6@$j3GO>IC-yc|u;
z(#=WZ8Zu{RqQ_rAq?RRK(uy~8lvi7Se9NAV5pCfSp2`u-UmD~J#=O0etoa4!y9`a7
zqy;DX@lvbXo12`PNN>U5;mOqOzPz>jAY)#xFJBE&o)`6-A7dUj>BL4lgH8XsK0x#Q
zEVe=I&FVRuQFnd#kgVyVyH6UL_(*5)aj==3+3>7(8*F^_W;Xs*4kzgpC;n3>{mUkO
zCEeH0>Tl3K{qi7(`XemQkM^Y<oPI@rKWS*{k2G-!Hrbw5v0|(*v)%BDWsQdaX~APx
zRo(=}MShnv!1YC=RXLs(VT`2hhR?Olx4?ZXobcxPlHsx$56;o#;hz^_`N@D{(DJ@+
zd>?rWb>Mw!%IE#&Z-e`GxbJ|w7w*k)-wF3!aNiC0J#gO(_kD10f%|^AAAtKoxF3T1
zVYnZG`%$?2;C>A5$Kl=z_cpknfKxlfe6D>9I8{#z;NkU*U6ERAP(3|O%geWDeeq3g
zeFMr-Pd^36_WRRt?|}OmxclLL7VhWZ!ubKdksa7?%AW%Q`9A>n^KkEk`vtgn!AX77
z_GxOodHbZz$dmo!-Ei-LdoSGk;NB1SOK`so_bYI}3ioSp55oOA+(U3@;64EN8*mT9
zeGu*uxZi~PEx6x?`yII7g*yxPdvK4!JqGvtaDM>zA-E62ajnGl2<Lo1zw$Z5E$B%5
z+aH0)AH#`W(q{{_8EmR&ZATx|^6YQenJI%o+YyI|v>oCuy)V7FO)fz>+T>5*{uJ)x
za48=-m-d_n#qkYVp8GjpdUG7AhfipEos+k~L+kQ5czhD>Q;rwwBXz2@R`{nx$;{E|
zDSVuA0`a_9x2qVyxXNvN$>qcI?TnRl+WPeDl+fcYj`GgBynGm*i6TdqE}fNj51f{J
zomQhELPe$%N}0Njpv-BmcPiwN%A@~;3sX0=OYG<r%Q&d)ypte8^Pr6ERY(h_YO|b0
zGjZs!QvtDD52y8?K0G~9>Y{*;z#{``1aldEjNS!uzs50e29A2U6pr=dd`14iGju<E
zgKvoae;iKJKY;LEfsPY|uQc>+j+XlHyTCLgXY+M+%1kJPi!xHZO_C%Fl`ELJHesGI
zxU=%jVFYk74%ZOJ5DkCIg;}S6W@1R|vzeyR9tj+ELO!HXAE8Zsj!hieVtsBO1-JhC
z=$^vYCvCdtU56}2wq%M;>ymB91v<ZdbR1d9LhCL%e}<zy#%bo*7ClFwc6^+kh0fLi
zOZ=_XApy(2I*dCxz78{paB=X4E~KrnAKA7-I$H<r!2{djF2_RoiXE<Va(o>QA;QJM
zyO26WfA9FH9Y|;EaCED7IOSMm>Ttc2<Lhu35iSnih14PDSZ3`&TI$fPb?W5?Mxlwr
zc&JNS6Z2*J13#XDNL)-y$DpzM5FCfoxS`J>%&~FS#q9_A5W*b)IAYOf7bXwXG5%n0
zE$Xa+z~$nivlJ!6TN+25KQ{ES2J__c;*sC2;C&D*z^)&!o&{LE?8d~)uCOUyR?6jD
z7w@qNKV6gGruw~|wGDWI&FhzESbqk+EW;-+i<`}!xY=|z#cjqai<{+O<Ke5SwT1FZ
zLoClY<QZl^`*S$41^)Mp4d)2#AcjCZ^RaFDX}5$-q;WaEScB{m`jm?UU+Kd~9c}A#
zE#g=o?lD-tsNJwU)7kczhxBvdc#-DpauzULv(h~AW6`tjPmmV(R@ng%3gu5DtnFCw
z5w-H)hp@_HnDqslnThFC6U@i!2{<j2TmSUwmpZ3@{{rqW;o^2{wbnrZ7kNB|fgq<O
z$)!%MTT45qlR3<~i+#!~Rl9b$B3IrdbFW^lRhYr!9sVL0CNJUFNmqB2!!?n`;*xw_
z&mft4k#h5uI<ps*b4ikh`b#_5<H|8VbU*xZ_<seb^lPGt4}tVFnSU>w$XdnAx=Yp8
zA~WDBl8M(MB`vK}ZE>Yh?zK9l6XlgPX(B9>*OgCnJb^1-i%JhaXy|)$bb_>hFzL5B
zx<IasAnVDMM8jt-x^^`&^u0M6X)*2N^d)OF(gkv51Xxe58y-BLwdgtTJ7xIZ>*xZ$
zGsq_8iu5RnhR=F@6@P-fe`oSjkEHW*t5q?d$i*0vX`d%tqVime_B`uBWKsIw=*i<O
zqjciJN>e7oeKN}x#HMNeGSfumF^JuCOkw+i%$RgurtQ<TtL=v;Tw-6D<z9KY9Q1Q_
zU%8N>xNO=AS(kOnN``{6)w=79EPGXfT+NU#i(4!LnC1G~ktQN7==W*Qzt_<BMicuV
zFm!_OKO34hC0!tQ{r(8K{rz!sx&NAzOFAzX#|4uo%(}HtS0;njIRT%)&haK)$UB|l
zL|?_cGjm`}-hY$hO}c>h^og`-t;<_8Slnhzmwi6zJa3-dB3k(NwE;~mF1Nl7c|1j?
zxD?MIebeS=-z1&Kizk#BEqwdN1D6<N7LTV)CyO3_gn!tM7V_0(S8hxD1Uud&koPYX
z4Clrlp#_6m+?3D;kt})gV~<OcG@Z-$ro5Er@Ebv!_BzaY+qALaw}Ce8V)&h)4aQ-f
zukuoi3BsQ>H2XAZ!Q5UIV=!+Xt4mTo!w<VMTCP#6A|{n{B?ETdwc6C=^~!hVS9-k`
z7wEVs|49sFcx19DA6frUcY@=1?PR;WJ`R(dDR1@l7<iGN)7S9h2#-1XenivWd!gYy
zkoXkjx&fA-#EN+eO!i^+*&Po>PmYJ919-z>0#D)}1F*}6;%L{<Q1m1`!E^o4NObei
zX#6MyTr(U;W5Ywy)x*Qlb;Bdk^U#Q%Iub{tBSX<uBg4`7$VgPeV*Ht-aWpbI6kRzw
z96e)nBsvH{H;%>8@Yqmv#n^E4^s$lXS}eAowkwW?b`3@QcMV6+*)<aG=QPXJ3UKpc
zz4HA`lU<!frwlt9h|)Gi9jl9VFB6W1B>$zzL%X^2&7!@`IJ2CBv+|BP8rb|EnCEkB
zOXggwZx0NW4YZfZk6({P@f+?#S!p+}E<9P8KpZb(+q^Dp8U1zn62!5*t;<tEvo5^H
z#x#^X@48H*JTLM={jo1g>k`l3J#_?UiOHdKQe?XBwOkU5X*u4*^#3y=dce&{zNgJS
z>alQCCi!(PN$u(~3b&LW`^;GrP1%e)J-a7?NA_Os8H802z(2ydm2J$`XM|^jETA+e
zG{INxwh@$goQsXTh=jSApYeCVCqKPdR?6dF@1<_x_(^!_SjW0em6{b~lcMD3>Tn7{
zVd*eQA9*1nmELGSjjjpZkS%NC%Z$7VVYXlLNWlLg_-rEwoPUG!pXvM?o&PN7-{kyf
zJO4TG$!i?Ea8@*d!=j0(hdo*cuD3P?e+vFId}%^)uUna#m^qxdMz3`_4IaEmYx{9o
zeLU^97+ro#f*9t5p8EFZ$Rqpnzjb+7SMvL`qp907aO~f_$cOej37>gvJmtLsaeoKL
ze6Z)po8j|P`UjqoWazgF71Hm&^1)2{FGkd0NdJw9CvqtbZ{)-Hk#^IlRFl+nB8&B)
zj$$~<mU9L+9z4Qwu-9%K?BRLs>1MBH_7B9r==v$k;2QZ9el)B)VZL*a#|%uPKK={-
z-@|b{RGG|2ef$IC+ATe9jN;mIwcWyfCB*Y059A$X8+;<rae`t@bLp~oVwm-{F4jJy
zhn=p>0Da~@WF=gcA-2B7(1Z1vbmVq8rOyx_>2dIX2tNDFbDe+C`6cH+4?gp9Ebi+Q
zh$k<t<NTJ#g?*=394=GGuQT*ubxcR}&FV;<v#zL%_-uEiuYnu5j$5|lzWczwuZ|ot
z9NrD*-!S&gpoA|Yb|h29t#-T(ajerzTpGrRU^m2xy(U*VjL+-RgFMhr%(`Q8l_cXi
z#+;trHx7?#^O(;d{Cr1`!9TlHy*n-CWMJPabA=w7yS%pDPnVXu$c7XvYtMrq2{R+>
zD;+Iot0?4#6Ul?5QQDGt*-lj#Tt`qBFK}tVS+r&ty#eX}=<=Yx>yE?!<nnMlp!|O}
zG-V-PFhG~1)IZm{yl5xUyVD6C)y}MwHrL6%#IeZe<f{<LI;&2m5ayNF!_A1J9<<FB
z>0zUKpL0C5-sWs!biI1B&iQ(mt6Q!2-bcZvuPuDN!=v?1dw+kuza05kZ?0#klcIX>
zf%@*O*1P3-zr|8ptw<-S`o|ho_oH78UcAWD+HR^;Z#A1MKF#%=4>95t9P_h{oPpCZ
zhk4GT&|E#N&8X)p;+f{k#0k`C>DwIb+SN*Oh|10CmwdK_^)(QP>lB>D$}yO9z<Qz#
zQsUOt9}c~tziB>t$#%z!JT7Ix?{D;EJn%m~JDD)cDLCfme*Wxgb*@)$);g|%r**E(
zciXhk5if!Htv#ko@)2dkTK>Bd(p;%9KXue=w#8_qIS!tI!#EQ0e#95UF&?-_UyqLp
zG_lDxw-G&$Z%3X}F0UK2fiE4USRVZRxWx52+vPYM(~8<9aLF@9|K{?Lev^5JVqLvU
zm6I9V{?p-IWNf4t*7fx5L*wwG&)q(BN__liy+uFWdbNfVh8h!bxjKoit^mz3_DkW2
zlW9-x(^r-O^C0gi^u}&1WjKaooe#ZDMeg(0nL<vc*W-1_Pd#4m$`|R8ZT23xe}{Xk
z%f~p;C7!=UP-G9F&w<;S(`Q27(C2;P<A?a!jyBULbSMAA_qFh;9G2UHKBH5vOwi|a
zs?X`U4fRPoQlE5`xsg8q1L<#b`OZ_H{y_}N+Ngb!KicPA@HXwYtn*>GBXFwkt@qoo
z*0TNfD)6Lku6DeO^uzYg_V%AH59zJ+TbvwhO)s;1?t+L-^>Qupd<EPq;Lcw!hfq2#
zZ}svd#8EG7x9hbV)eHAx%rmfF@Ey@6hxy91pGa8#GPp30FcTwE-t04HLzKvqHZ*(5
z1oKo~K4Lfn$5EO*k;jiMFLrT=k3Z-h8j*RY+r$GSo!Ua9Cg(gAyaFpsU4EX+7+fJU
z9whA4n3&39Ups4f&4pyef_3*L4<H+1dYut3+hHM=V_7UbGb_e|2X2{$i}hxE&S1fO
zIOnoBy%5X2$kvC2b{8x%LCcKqcY!R+bdQ0LL`ptJdYyy!<SCGSyr1dv$b2g0XsNUu
zywM-VkClCFLLO0N7OB@jvTq+ANA^D1H##0c_7r0J<YnfB0p%rN(<kp)h@`%PymVEY
zt6yep7*O6_Me=Uylb4QpIeA;R<?X|#isU`JPhJ>HkTiNfesZ$?PJ7^Xbo=mqVAH2t
zJ=Y7m<qQ$pQGsl~Yu$qE2f?yWHqTYEcIC{pp=`XGmX0V}ko^g;?2~=a$qDri_gj%P
z`aYM=aK8@Nw6}^wAoSrV_2D>%n4kmVu(m%sadhkLe0KL;VACi2c}@<;|Fh{BB9)?U
zafuFcvbWymXLp|huRhr~Ba(8AY#G4Tl|4PN_3>nOA}NwR*DqTJFqO@*Q^OA<EIPmq
z)uk@p&gFc2*l!;sAJ(lhj!Tvj@{q=*^*cQ~HV$&X#!(q(;O>B9o_%m<QFx9o|1Nbw
zS($v3P=sdcuXB7VlX;|=m6;&M>-`cCB12wGOodQ3GZdX8#)xM+uaCkp%zeN|YD<-R
zsl9ZP3Ao}G=oB9CrE$!w_?TRh8#^J5Hiu4bh3D}xKs~5j(r4ga1}FNb+*A(QAR=*5
zj_O`uQI4dfX->{8qBfQD<&Gc9j6Uvod<H&ci~Pkl4($$e{L!v2^0`*Y%;C((I9$Xh
z>#baz;98a}Lyx+AT3=m1BadHiG0pMfdJ9|Z^kN*+M*jjnc`E%+X}r>6U)I5;%Xzly
z8PWFa-oLNIytsxwg&$Wg^KQa^#Is$<MSGATE|)h>5dMFLzRl6`a(TI$OdMnpUd->?
zirgb(21$}Mw%gMwDZi=<`fM*MgLuwJj`YXDQ9QVdopwOVgB!c5yDAw;BW>(}P#*tS
zI^zfW7Nj49)BLZ@(F>r*O!^AK*Bknc2;1^M2>K?I{tkpW^D2Li`-!0+LHHGh{=*#o
zH=r#)wq0J1-!8T*+XmL_^YL1#(JEK*eo<;6mfsB(om)$zl_%nyT^MqGWWLqvrP;a(
zX9{Oz@_=qe&aE(mWEWg15B{ci<A^UdJmzZ4Cz2^ncLB>@&!>dcJg*xOK`su@@mgoO
z)<~vuSkNa&&IKq2%S|YGAB(4bexcr|bx(GCwPsSu@xZ!a<Xi{USxCogrzhy-5h<@c
zh(_wg@f}~I#Q4rptgKrjmb2|2=W@uIvhX}-_dbA_{fyPPGYG#L?lmqBct&53k%w<t
z@nSwducUH)Jlgv%YKnb?`ABo}r2wUmA<Vv~^eqVUQu-?p{%oLS%v2il#I9GN7E@-P
zaOH;I?aC;h3TRHgq9fenq;kwFOCnFlc$r2@$b|g7$V1xDEJxYY@Qi~Sy|Z<kagqmk
zqO&NL-$!yxxCibRTt3qFJc9Ik{e*IO>D&k$>)snN=c&8uZlsKHuHKfrK!>=n5nkk(
zJ?oK7KF!sYu;`?244i>`s-w|A(z=GCKHqwE72VgC`P4bzWt^B<a364YJoEZT9pob3
zYv4}Lj&Qgcie^XH1fpbigjJ5l;g|>Qd$fmt3Fx&VE*$X0A0lxvEsr0z>bvK_eBOrD
zu6xoUEl-_jz250~vfYXu(RcaID9E&ZnK~Yt@XH9r80PU(XJOt|lCquN>B+R>@NA4T
zun_(h=exj2`P#GAyd4frWbKe0Cr+R?U}Simo*iY?Jx0hV?gyc$$3Y!(kokGXkL^&f
z^-j!H%N13l<cH06orD|;8u0l5Jh|rWy^FF89VcKz`%)+1Ezb*(W*&8e${`QOXV;q%
zX8TmW3Bpep`Zh<a4EixYqnmllcH$6+ek2K>Y+pcTCg5^1a8{H?IUE`N??*n^=oGyD
z(d_8G;^T*T(LP3dXs^*?wF=VnJA?2`9L+qhNBW$(C&T_T=orPuLEYbtYEsXmj_)}9
zHvzYN*PHiI(y)BfS;FpKfar$LgUBH5k01o=mEhsm!6h)j8!`Ie2<zwSejkFnQTMlt
zj~}LCZ7|w1H;x#`dU5_@8zasBa|Z53aJRyFTX{S>qo(->#Pa}H5zl+Y#}8#~1<#9-
zpY2H7P^|Cp9h;cZT_SmA`)<KIe7BE`BO9wN7#LuE?{qZu=l27gds)9%xHRDHyLXSc
z^!>dV1aJ`pcxK<<>-hI=%JcIj*Q(OIoJVL+CfMi6(T3tWBH0G*IVkb69rALrGVgt*
z_MhlHf%M(86HDxuEW^B*yGDES<!-H1u2%61RX4&jMm~%TxE#-2Kg2?TmiElmqo)5N
z!j^s*G}{i-@4~qCk?8U+*TVhRl`lWlABmW&k33Qw|6i<w47Ry+X`Ai(GQK3oo-#3Y
zs64?e#4yf)zsHLwiZRwKM95s}bsD8^eR;7_V;1Hm?$fi;Gw*}{YB<KJp0!_)el8p@
zP5(H;n$CFY+@(pMr!AB|fZHR_a5Uugtzj5<9oVsrVU3CLUh0KqEEjllQ*)s0dJGkf
z??Apg9ZzkeuS7ii^H(|lYn+e!coMI863}eBO5f&aqtiJ&Dl)yE+@r|P`wY)_{w>bG
z)%oPd^jYUyzHZp}tcd~jkotTve2$+lfTPY6=f4#3q+jM})}1u#OP}?nkNQeH>MOq1
zFF`u>sx<MDCN9B-Wg;8VygzkK^JeEE_ke`sL;K>nqzB<$`I*^$AB9hqstg%dt_k$6
zPeLZ!8Zp3+=ivkM&=V%lUn8t-3Tg5UThcNwy9VIuP&gkUYpByaw)l%>sTVrOlpCT{
zzO?xpke_-ZPwB7PXAZBem0WowX`ObRBZ157tyycfIw#X@sF}a1+m$p;^1C`mr%!<#
zm#9?lXbj7>3f@Ib<2()@U&1?Fjn-nRC%aIl!;PFv$y6_C(T$#)%&dD7sFV1~i#ldo
z(E6w!^97R<p2smdm$AAao_%+n_l9GZiNR(PJ}=5dn;JRShHYA%^7EhH&7`62<4u9|
zSyATa#WJI4GW*aWCnUyW-+f(cVS!P^O*vC0Juk<mSvi!)%gV8Mp`$)I(`gYYb5*83
z^Nkfeq|xdvd7f4l=L}wy1>Nl4w^YNu%=ucmC(#mLB+s^8%<)EltMvu9I3!Oii{mXX
zTQ94Fyd2S?*cWe^6xux-zmeT#O|{Z4<==?`7M#ztJuYJ48U3Qe>F~=K$h8b@L;SeH
zv&_}j>ayYN>Nj$Z@o8SKNAhmKF^}cV{#nSoQCsL0@n$^A@FFk8P1WalGfyG!PJMC7
zGIwP$XyS~AX)KxL|5`^|>|!Su4=?DYU0$pe=p1z&Ik#AD*2dFTZSk{}=J9jPFT_v&
z1-cLX(_UfuHw*a7nBd~!1^i2`W-X`tz&q^$mNz?o9y`W~V(fUP+_08%fp^*~Ebrq5
zyt!8`)JtmD?ovH%BIE-b;Td=Ya9O^G9c}Fi`xo;)-Y&HpE7B9m0}ed<v2rcIbjy=C
zH^9nOAabPT1Zzjg4A!zsw|w^?u8=RVHtWkNSXWN)x(5b{Py5VE3;4=-;o_O~!}yVQ
zF8$HN6@0Mq$hi=e!Tf~<yfID{V{X=#d4A4|_=ImRPBDM0%VTxHGKIQWYBj1z<K_A0
z;*{@OTps1izQ=V{Az#r&IsG_?D+fL!=UkN4@zES#@RxNCJi$aV=(sL$U3s*z3@zic
zmLqPgdF6f+^DA!hr{hJtiS69tUGL&CKgaY4OZw7st6f^F)atUTNim^3-xHB<OIaPT
zj&DFb`=7%YCkTJW(6>2S<fi}q6n34EHz)Ta5BW6|`9~p#lwg#rQ(P}7104AN!^^%b
zarsE!YiLGu2qzC*yT1%S8rJi3*6}pT(atC@S0U!r#UoSr*BAROw~a8P|HSozGAZWu
zza0Sp8O%AH^87rp@>09*;U9aIdv!dn%^h^DBcF_Gmpe7QvU9-gtxJ_!qtT5HbnCCH
zxiJ4Kuo2-!#R>jQ@@Fba&oL&PKk0mppN@FG+$f)%h^n;{^-687cd}ih;Uf8xXgBpr
z%b49Xj4ylO$ns>=!Y4d|a(NL)M1YCp_6j}+x6*DmP6pgv?vj^Qfvp>L%FByjb0AbI
zt%RZdckyz2>4Sh&#~qwbX|-O(+Aq7)KDe-gjd#7ZTxyoP$D;-Y%C&>-B`krV!dzC_
z=;DM98vxTlSwTZ$sKszw>9kI?FdT$-+$^t|_yeLNr+rj&zTPXPvlMRMba@Xaqqv1m
z?d}y(9rBVB{)&#;sV`S+Yo%@v3)OC^+$-@3<dk!hUkXZtE-$`IQ=*t&3#H|WesVCm
zJ!J~OOtq40KVDw?rJL45skho9k49_Nef_4}YqirDoFQgX=JD<{j&%^{{zVVQWGz!O
zN(f5Fy}GpWQr|9G1`5c!7k_zBKG{VDBO%>J9bZ9=4x|y%rhRkhmTGHgYgN2Au0~87
zqEdKuv3`(WqnFBXs{*=HZno#p6Ury&PL#1(i10led@4a(CUW2`Y()&~!YE*D96(}>
z!p9@DpioB*Wteg_WA}>=U@+FMiTB}MFnz21;POhd)M>4DBSTkOjg=;jUeY#;1U~z4
z0DHqqs!3(m#7nm>4AerA9V*`u{rZ@N`a&zj;5b&Z;|Wg$@vdHp1uNZ%K{mtCF56Hx
z*Zwp{bfQwx%Ay?GJzfitKv_7Q)EETPm^Cb?*wk7}O+nD+A>c}<Ch4o?<6Jy<TPvMP
zO=MTvt%eIMm7_*^9;26hc}e7BxWLvQ+<+;4TM@#mE9FK>OxK>Tm%EDZ1a__(o?q#@
zF``m+jL@}uSUEwfcnc*c@j$OJ5AMBA9fK13xa+LG`8gV5=T{aMF!XS&r3&O3tCIYG
zM<Ds)u}|Zt5IoW4U#(*t!a+J-9cC**Bf%X4JYgbD0;cd`{*Qx<P<(s>3u>(km`O|x
zMrpNsX@Ty^<w^-R#!79+p~AjZLTeI!pgPqOdWDTy?POxg)f2V|$y^ym<qECB#D;4t
zOO`7YnBB_+yUNK*qvj*PtS=&023e}*UK#h$aYzImXpPc2%9)pgV?AvdY|u3*0bQS?
zqZ~ZfIt%4Wtt9gqx~JU3X6JMxh<pYNUogVI3*sh+o3%ifH4KfrE{MU5V9-O+PH0uk
zV{286(j2qVu+m8f2^gGv$c3{cyvf6yZhm0(r6dpB>&pwRNLpgrM*vAM9_TIAI!!e1
zZf&`XPiLiLYC0^qkH(eIR2LU9S}INXH8*tdwyz7;m)k3tBHT>wKE=fcB{=fdmiZo7
Qsf_vZM6I-hZE^Jf0pVA0-v9sr
literal 0
HcmV?d00001
diff --git a/tests/data/devicetree2.dtb b/tests/data/devicetree2.dtb
new file mode 100644
index 0000000000000000000000000000000000000000..8e4fb0c33e0cd3f894d1549464f566725901b58e
GIT binary patch
literal 68323
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
literal 0
HcmV?d00001
diff --git a/tests/data/devicetree_expected_diff b/tests/data/devicetree_expected_diff
new file mode 100644
index 0000000..7e4f5ed
--- /dev/null
+++ b/tests/data/devicetree_expected_diff
@@ -0,0 +1,71 @@
+@@ -1,18 +1,18 @@
+ /dts-v1/;
+ // magic: 0xd00dfeed
+-// totalsize: 0x10aa4 (68260)
++// totalsize: 0x10ae3 (68323)
+ // off_dt_struct: 0x38
+-// off_dt_strings: 0x10234
++// off_dt_strings: 0x10264
+ // off_mem_rsvmap: 0x28
+ // version: 17
+ // last_comp_version: 16
+ // boot_cpuid_phys: 0x0
+-// size_dt_strings: 0x870
+-// size_dt_struct: 0x101fc
++// size_dt_strings: 0x87f
++// size_dt_struct: 0x1022c
+
+ / {
+ compatible = "openpandora,omap3-pandora-1ghz", "ti,omap36xx", "ti,omap3";
+ interrupt-parent = <0x00000001>;
+ #address-cells = <0x00000001>;
+ #size-cells = <0x00000001>;
+ model = "Pandora Handheld Console 1GHz";
+@@ -82,14 +82,15 @@
+ #size-cells = <0x00000001>;
+ ranges = <0x00000000 0x00002000 0x00002000>;
+ pinmux@30 {
+ compatible = "ti,omap3-padconf", "pinctrl-single";
+ reg = <0x00000030 0x00000238>;
+ #address-cells = <0x00000001>;
+ #size-cells = <0x00000000>;
++ #pinctrl-cells = <0x00000001>;
+ #interrupt-cells = <0x00000001>;
+ interrupt-controller;
+ pinctrl-single,register-width = <0x00000010>;
+ pinctrl-single,function-mask = <0x0000ff1f>;
+ linux,phandle = <0x000000e4>;
+ phandle = <0x000000e4>;
+ pinmux_mmc1_pins {
+@@ -240,14 +241,15 @@
+ clockdomains {
+ };
+ pinmux@a00 {
+ compatible = "ti,omap3-padconf", "pinctrl-single";
+ reg = <0x00000a00 0x0000005c>;
+ #address-cells = <0x00000001>;
+ #size-cells = <0x00000000>;
++ #pinctrl-cells = <0x00000001>;
+ #interrupt-cells = <0x00000001>;
+ interrupt-controller;
+ pinctrl-single,register-width = <0x00000010>;
+ pinctrl-single,function-mask = <0x0000ff1f>;
+ pinmux_twl4030_vpins {
+ pinctrl-single,pins = <0x00000000 0x00000100 0x00000002 0x00000100 0x00000006 0x00000000 0x00000018 0x00000000>;
+ linux,phandle = <0x000000e7>;
+@@ -3500,14 +3502,15 @@
+ ti,abb_info = <0x000f7314 0x00000000 0x00000000 0x00000000 0x00000000 0x00000000 0x00124f80 0x00000000 0x00000000 0x00000000 0x00000000 0x00000000 0x001437c8 0x00000000 0x00000000 0x00000000 0x00000000 0x00000000 0x0014fb18 0x00000001 0x00000000 0x00000000 0x00000000 0x00000000>;
+ };
+ pinmux@480025a0 {
+ compatible = "ti,omap3-padconf", "pinctrl-single";
+ reg = <0x480025a0 0x0000005c>;
+ #address-cells = <0x00000001>;
+ #size-cells = <0x00000000>;
++ #pinctrl-cells = <0x00000001>;
+ #interrupt-cells = <0x00000001>;
+ interrupt-controller;
+ pinctrl-single,register-width = <0x00000010>;
+ pinctrl-single,function-mask = <0x0000ff1f>;
+ pinctrl-names = "default";
+ pinctrl-0 = <0x00000106 0x00000107>;
+ pinmux_hsusb2_2_pins {
--
2.11.0
[signature.asc (application/pgp-signature, inline)]
Information forwarded
to debian-bugs-dist@lists.debian.org, Reproducible builds folks <reproducible-builds@lists.alioth.debian.org>:
Bug#861109; Package diffoscope.
(Mon, 24 Apr 2017 19:27:03 GMT) (full text, mbox, link).
Acknowledgement sent
to Chris Lamb <lamby@debian.org>:
Extra info received and forwarded to list. Copy sent to Reproducible builds folks <reproducible-builds@lists.alioth.debian.org>.
(Mon, 24 Apr 2017 19:27:03 GMT) (full text, mbox, link).
Message #10 received at 861109@bugs.debian.org (full text, mbox, reply):
Hey Vagrant,
Thanks for implementing this. :) I'd just check two things:
a) Unused subprocess import in test_dtb.py
b) Whether the tests pass with jessie's device-tree-compiler
(1.4.0) and add a conditional if so.
After that. please just go-ahead and push these commits to the
experimental branch :)
Regards,
--
,''`.
: :' : Chris Lamb
`. `'` lamby@debian.org / chris-lamb.co.uk
`-
Information forwarded
to debian-bugs-dist@lists.debian.org, Reproducible builds folks <reproducible-builds@lists.alioth.debian.org>:
Bug#861109; Package diffoscope.
(Mon, 24 Apr 2017 21:06:05 GMT) (full text, mbox, link).
Acknowledgement sent
to Vagrant Cascadian <vagrant@debian.org>:
Extra info received and forwarded to list. Copy sent to Reproducible builds folks <reproducible-builds@lists.alioth.debian.org>.
(Mon, 24 Apr 2017 21:06:05 GMT) (full text, mbox, link).
Message #15 received at 861109@bugs.debian.org (full text, mbox, reply):
[Message part 1 (text/plain, inline)]
Control: tag 861109 pending On 2017-04-24, Chris Lamb wrote: > Thanks for implementing this. :) I'd just check two things: > > a) Unused subprocess import in test_dtb.py Tested that it works without; committed and pushed. > b) Whether the tests pass with jessie's device-tree-compiler > (1.4.0) and add a conditional if so. I was unable to build diffoscope on jessie. It appears that fdtdump from jessie *does* produce different output, so I guess I'll also add versioned dependency... > After that. please just go-ahead and push these commits to the > experimental branch :) Thanks! live well, vagrant
[signature.asc (application/pgp-signature, inline)]
Added tag(s) pending.
Request was from Vagrant Cascadian <vagrant@debian.org>
to 861109-submit@bugs.debian.org.
(Mon, 24 Apr 2017 21:06:05 GMT) (full text, mbox, link).
Reply sent
to Chris Lamb <lamby@debian.org>:
You have taken responsibility.
(Wed, 26 Apr 2017 15:09:21 GMT) (full text, mbox, link).
Notification sent
to Vagrant Cascadian <vagrant@debian.org>:
Bug acknowledged by developer.
(Wed, 26 Apr 2017 15:09:21 GMT) (full text, mbox, link).
Message #22 received at 861109-close@bugs.debian.org (full text, mbox, reply):
Source: diffoscope
Source-Version: 82
We believe that the bug you reported is fixed in the latest version of
diffoscope, which is due to be installed in the Debian FTP archive.
A summary of the changes between this version and the previous one is
attached.
Thank you for reporting the bug, which will now be closed. If you
have further comments please address them to 861109@bugs.debian.org,
and the maintainer will reopen the bug report if appropriate.
Debian distribution maintenance software
pp.
Chris Lamb <lamby@debian.org> (supplier of updated diffoscope package)
(This message was generated automatically at their request; if you
believe that there is a problem with it please contact the archive
administrators by mailing ftpmaster@ftp-master.debian.org)
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256
Format: 1.8
Date: Wed, 26 Apr 2017 16:17:57 +0200
Source: diffoscope
Binary: diffoscope
Architecture: source
Version: 82
Distribution: experimental
Urgency: medium
Maintainer: Reproducible builds folks <reproducible-builds@lists.alioth.debian.org>
Changed-By: Chris Lamb <lamby@debian.org>
Description:
diffoscope - in-depth comparison of files, archives, and directories
Closes: 833697 858867 859034 859056 859117 861109
Changes:
diffoscope (82) experimental; urgency=medium
.
[ Chris Lamb ]
* New features:
- Add support for comparing Pcap files. (Closes: #858867)
- Add support for .docx and .odt files via docx2txt & odt2txt.
(Closes: #859056)
- Add support for PGP files via pgpdump. (Closes: #859034)
- Add support for comparing Ogg Vorbis files.
* Bug fixes:
- Don't crash on invalid archives; print a useful error instead.
(Closes: #833697)
- Ensure tests and the runtime environment can locate binaries in
/usr/sbin (eg. tcpdump)
* Tests:
- Ensure that PATH is modified.
- Ensure @tool_required raises RequiredToolNotFound.
- Don't assume that /sbin/init exists; locate any /sbin binary manually and
then test for that. This should prevent FTBFS on travis-ci.org.
- Show packages installed in report output.
* Misc:
- comparators.bzip2: Don't print error output from bzip2 call.
- comparators.pcap: Show the delta, not the absolute time.
- Use /usr/share/dpkg/pkg-info.mk over manual calls to dpkg-parsechangelog
in debian/rules.
- Document PYTHONPATH usage when running tests in README.Source.
- Add internal documentation for @tool_required decorator.
.
[ beuc@beuc.net ]
* Display differences in zip platform-specific timestamps. (Closes: #859117)
.
[ Ximin Luo ]
* Add support for R .rds and .rdb object files.
.
[ Vagrant Cascadian ]
* Add support for .dtb (device tree blob) files (Closes: #861109).
Checksums-Sha1:
f2b2909e530c15bf6c4ba38362d59603e582f6d2 3217 diffoscope_82.dsc
6256685ec889184164c417d7ac6338658c3faa16 626408 diffoscope_82.tar.xz
24fc7c18966417d354b1bc25b44b1bd6a7563d0f 17976 diffoscope_82_amd64.buildinfo
Checksums-Sha256:
0a070d727403446ee39ff1bba30bcf1fe59469392f8aaf77aacba0a20124a0f8 3217 diffoscope_82.dsc
9335692349da6420756664e91a0b4e1a56feb589f6aff221361535c17de1b357 626408 diffoscope_82.tar.xz
917a2dbcc0c4c334507d5298fc0e8578ebc58401226532e9a75a3e31bdfbb473 17976 diffoscope_82_amd64.buildinfo
Files:
b4680b5bdc09061989597eb0eb1b589f 3217 devel optional diffoscope_82.dsc
97e93d7b5df60a40208ed7a9f59e4cea 626408 devel optional diffoscope_82.tar.xz
63363901480cde3eba47b5a77249e2b6 17976 devel optional diffoscope_82_amd64.buildinfo
-----BEGIN PGP SIGNATURE-----
iQIzBAEBCAAdFiEEwv5L0nHBObhsUz5GHpU+J9QxHlgFAlkArp0ACgkQHpU+J9Qx
HlhIJg/+KkTS698+j6G6ifwiSMCHheBYnFmNKr6xfuMu23Q/R+3Lr5PbJLQGGMTl
FyBW+VDzTZY8aDDr8jRVah+1yF3BMHfrkCpmiO3yHkQQs8S6hD1DjdmNmmayR5vI
n+Zj8MJfV5gLtuZwEdRezqRr9S2PgfiDZ3ChcKLX5ByVeAVARfvJVLBgQtUj4nly
7ONtYDueg21qERh0H3CDF/fbN+NqAFiJrdLCU7mVCOj0J/FaMGdEgFAVK9aJzz0Q
i0FLkPU2iQmta/Hh/od5jQYPIHrnWTIQ+MGZgdTJGIFtHp3mNvLcjiFokrQzV02j
FDXP5L1imCA6GEf4XKByPc4yMHteaOp3ZtqUaMpyT2uaHR3l2uKaojR8zhjqPiyE
sZbt7qqvUSXh0yz5yrzCda+RpzMaMYAEJlOOSPMVuACgJpVeM5WI5Yg8VfQH/F6o
WU91csCqHvtZjkR5G2FSaGGYrODsAb+OvkHbfEsyDwJIiTJA5YicYA0c5ybBfJDO
hZdT+XEsFfQeXSW68UNLDCTPonIN36dJKURtfQCyXqGs1lFS+1y25auyNdymaMTB
9+Podwg+unj5wvYJxn6fsR/wzc2jtq3y0dmR5NRUQ9nYIppGkDbEugOuuytsVMxK
DiJ5Fb5UUBi6pcG7CfSIelzh7ef5MdEglfP7SUtUS/FebHxdu2s=
=oZgw
-----END PGP SIGNATURE-----
Bug archived.
Request was from Debbugs Internal Request <owner@bugs.debian.org>
to internal_control@bugs.debian.org.
(Thu, 25 May 2017 07:25:01 GMT) (full text, mbox, link).
Send a report that this bug log contains spam.
Debbugs is free software and licensed under the terms of the GNU Public License version 2. The current version can be obtained from https://bugs.debian.org/debbugs-source/.
Copyright © 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson, 2005-2017 Don Armstrong, and many other contributors.