SQLite format 3 @ _MTN $ &8V; 0`R # R  & F `")){tablemanifest_certsmanifest_certs#CREATE TABLE manifest_certs ( hash not null unique, -- hash of remaining fields separated by ":" id not null, -- joins with manifests.id or manifest_deltas.id name not null, -- opaque string chosen by user value not null, -- opaque blob keypair not null, -- joins with public_keys.id signature not null, -- RSA/SHA1 signature of "[name@id:val]" unique(name, id, value, keypair, signature) );$O)indexsqlite_autoindex_manifest_certs_2manifest_certs%;#O)indexsqlite_autoindex_manifest_certs_1manifest_certs$' ++tablemanifest_deltasmanifest_deltas!CREATE TABLE manifest_deltas ( id not null, -- strong hash of all the entries in a manifest base not null, -- joins with either manifest.id or manifest_deltas.id delta not null, -- rdiff to construct current from base unique(id, base) )=!Q+indexsqlite_autoindex_manifest_deltas_1manifest_deltas"EYtablemanifestsmanifestsCREATE TABLE manifests ( id primary key, -- strong hash of all the entries in a manifest data not null -- compressed, encoded contents of a manifest )1Eindexsqlite_autoindex_manifests_1manifests s=tabledb_varsdb_varsCREATE TABLE db_vars ( domain not null, -- scope of application of a var name not null, -- var key value not null, -- var value unique(domain, name) )-Aindexsqlite_autoindex_db_vars_1db_vars''Otablebranch_epochsbranch_epochsCREATE TABLE branch_epochs ( hash not null unique, -- hash of remaining fields separated by ":" branch not null unique, -- joins with revision_certs.value epoch not null -- random binary id )9M'indexsqlite_autoindex_branch_epochs_2branch_epochs9M'indexsqlite_autoindex_branch_epochs_1branch_epochs~C)indexrevision_certs__revision_idrevision_certsCREATE INDEX revision_certs__revision_id ON revision_certs (revision_id)V))gtablerevision_certsrevision_certsCREATE TABLE revision_certs ( hash not null unique, -- hash of remaining fields separated by ":" revision_id not null, -- joins with revisions.id name not null, -- opaque string chosen by user value not null, -- opaque blob keypair_id not null, -- joins with public_keys.id signature not null, -- RSA/SHA1 signature of "[name@id:val]" unique(name, value, revision_id, keypair_id, signature) );O)indexsqlite_autoindex_revision_certs_2revision_certs;O)indexsqlite_autoindex_revision_certs_1revision_certso##%tablepublic_keyspublic_keysCREATE TABLE public_keys ( id primary key, -- hash of remaining fields separated by ":" name not null, -- key identifier chosen by user keydata not null -- RSA public params )5I#indexsqlite_autoindex_public_keys_1public_keys$;;_tablenext_roster_node_numbernext_roster_node_numberCREATE TABLE next_roster_node_number ( node primary key -- only one entry in this table, ever )Ma;indexsqlite_autoindex_next_roster_node_number_1next_roster_node_numberS''etableroster_deltasroster_deltasCREATE TABLE roster_deltas ( id primary key, -- a revision id checksum not null, -- checksum of 'delta', to protect against disk corruption base not null, -- joins with either rosters.id or roster_deltas.id delta not null -- rdiff to construct current from base )9M'indexsqlite_autoindex_roster_deltas_1roster_deltasy ItablerostersrostersCREATE TABLE rosters ( id primary key, -- a revision id checksum not null, -- checksum of 'data', to protect against disk corruption data not null -- compressed, encoded contents of the roster )-Aindexsqlite_autoindex_rosters_1rostersR +mindexheights__heightheights CREATE INDEX heights__height ON heights (height)D _tableheightsheights CREATE TABLE heights ( revision not null, -- joins with revisions.id height not null, -- complex height, array of big endian u32 integers unique(revision, height) )- Aindexsqlite_autoindex_heights_1heights x =/indexrevision_ancestry__childrevision_ancestry CREATE INDEX revision_ancestry__child ON revision_ancestry (child)L//Gtablerevision_ancestryrevision_ancestryCREATE TABLE revision_ancestry ( parent not null, -- joins with revisions.id child not null, -- joins with revisions.id unique(parent, child) )AU/indexsqlite_autoindex_revision_ancestry_1revision_ancestry /-tablerevisionsrevisionsCREATE TABLE revisions ( id primary key, -- SHA1(text of revision) data not null -- compressed, encoded contents of a revision )1Eindexsqlite_autoindex_revisions_1revisions##Wtablefile_deltasfile_deltasCREATE TABLE file_deltas ( id not null, -- strong hash of file contents base not null, -- joins with files.id or file_deltas.id delta not null, -- compressed rdiff to construct current from base unique(id, base) )5I#indexsqlite_autoindex_file_deltas_1file_deltas tablefilesfilesCREATE TABLE files ( id primary key, -- strong hash of file contents data not null -- compressed contents of a file ))=indexsqlite_autoindex_files_1files kH'4*CehZxx!k5^[ @WQhMl]0Hb"m[:۟=ӕogd5whUkz  QDM\kT x7C_=y.:D]05aq)AdkȚ9L4tU:@`D݂ J,\=eM0 OrO|RdIhcpK = gc>赽u>q,kX;=M嚑+k w+"4͹qm{1y.\60^0vNMs7ϐD6yb}VK} u})t.SoTd(4,';vGF2jd N\~Wg EԻ`B'cnϣ}V+󝷲w\VL5O%arF:_J7WW+֨Etl $F!c"UX Q>-cB^P4U:@`D݂ J,\=KII-IMQP2VUld a444L#w_ڂ9 Qir[Acfo]dU:@`D݂ J,\=KII-IMQP2QА#a a444LQg'~F@fm#uMаξ>B^P4#w_ڂ9 KII-IMQP2VUld 4U:@`D݂ J,\=4';vGF2jd4#w_ڂ9 4Qg'~F@fm 5 5 //N43P:|"~UEPJ]7me@thomaskeller.biz00  *H 0i3A (~_7%YՂc Dp,vH_%` w -RPaSj+q)2v5:_HOA._w_;A c0>]WE! k 4:|"~UEPJ]7 NHj1[} .N]4424 Zrߧ7C1J3CehZxx!k5^authorme@thomaskeller.biz:|"~UEPJ]7~z^k #(;@ Ql!.V:6+eqk*z?R\HlC0Il>XwFmfՆP4j6ڽ'oAjdB艴iɁE.ujY`VZ|>˂ARc7wG"͏Z+T9q̈VL jzZmS444 |a C !Ff(ECehZxx!k5^changelogfifth :|"~UEPJ]7? } ݌ЈW?5>ς.x E>\ͪAjjI:8eRl<^ߠ?X$s^ υ^ G UUp˔qXgc!_4464 ~r\́((2j%kʒCehZxx!k5^branchbiz.thomaskeller.test:|"~UEPJ]7)31sTI[chvY ,2P$Q-abz[extPon`u*KC,4UAa"%Wk>$0^TÅf Qöǁ5s-}x!-]4424 <ͪD4o kY!9U:@`D݂ J,\=authorme@thomaskeller.biz:|"~UEPJ]79Ri.Y@W+Ru=8blwr7QG IB޲kz|2EՈ0'Yp"̟=9~[Hշ+~ޟ7^nkٲ[4424 F7R\#CT=~U:@`D݂ J,\=date2009-12-10T08:15:33:|"~UEPJ]7I3:vHʒU h'لxеJ,'ߧMJzP`iJhSp9 Jg^ =˃zxcFūPZG.j+ٟc^46 44\4 ) hQjO+vfU:@`D݂ J,\=changelogmerge of '88230edcdb77e95fafc7da82cb39da0bcff5e512' and '92273b04b97647ec061846bfac8532066a0664a7' :|"~UEPJ]7Iyy/E`1]20@ ]|RM)ϴk_Xԅzv@mҕ,syGLXPbAV)yX ;y$ }[o ?Į˳#i,2;_ 4464 ZЮrGv U:@`D݂ J,\=branchbiz.thomaskeller.test:|"~UEPJ]7$˯CcT;?эP=(aD{ŵX&iAUNe~SGIƌ\B>A S^!wICcH~o?#{<ȯ▤Ҽ 3lO] 4424 ,av$Bcˌz0';vGF2jdauthorme@thomaskeller.biz:|"~UEPJ]7d8J Tlc;BgzIOӭ&T^Y |s>T6vw Bx>VZՅ2Z"FPkAnDR-tj bl\ {V[ 4424 ƞ3["u@()';vGF2jddate2009-12-10T08:15:30:|"~UEPJ]7p:b@$*5zv^94KS3^gܛsdrviRÃx0Q!_BM+ϟuJ*Z:=%zNQi+fLl^dS 444 åV@';vGF2jdchangelogthird :|"~UEPJ]7jGC)% ̙XpI:F1%Z^19&2lTY\q="];ws 1>5+@%Cr9{Um60 7EpQʺ כ:P_Lb_X_ 4464 x\G(~ Tuv';vGF2jdbranchbiz.thomaskeller.test:|"~UEPJ]7 lU#;Ag t/BfQyzik3urj2DMș`ov›s ʹ?,v ?bb/SQDx{:W[V=fb]4424 8|>+)È#w_ڂ9 authorme@thomaskeller.biz:|"~UEPJ]7̙0Өyh9~Jx =uU${# W1̞Lޜw34@Ȕ¥.W)+G@i|o؈@7--NY{ā[4424 :'X㱿6Ƿx'}A#w_ڂ9 date2009-12-10T08:15:15:|"~UEPJ]7vOf @>; BQ-ty;FUUjQ(gU4%}v6K} ˀƖ-U|kT|w|J"X5sJ+ЧKD8- فT444 zpdų#&>lSL"#w_ڂ9 changelogsecond :|"~UEPJ]7z:<˰Ĕ U.U=m@8z0@dZf+ҍŃFq끝q6ĩr!ծUOP6W/6gN+L}b$%:9BUA"pk {U_;BMf o7] Cj[4424 "ˇT.0m|Qg'~F@fmdate2009-12-10T08:14:59:|"~UEPJ]75X$V?7͓Z{9+,) 4x,bqPfZ09b c֥:,厴?W[`yiA?I4 yK*>v&Vk[S444 .yZE}Vm.VjpeAQg'~F@fmchangelogfirst :|"~UEPJ]7DIð̔z_@ O2d#\q3uR$뼤NkK^8Nz"W,eVl u`UN ZեN2{BUTœbm':zC'_4464 }wk[äXQg'~F@fmbranchbiz.thomaskeller.test:|"~UEPJ]7;:Mf>l I e{/Y *LWVTZaSK,3cZ(F bAQ"vxx|&|gO*"N{=5,ƶ   8pjW>%Q4Zrߧ7C1J34{|T^0.,)4|a C !Ff(E4~r\́((2j%k4<ͪD4o kY!94F7R\#CT=~4) hQjO+vf4ZЮrGv 4,av$Bcˌz0 4ƞ3["u@() 4åV@ 4x\G(~ Tuv 48|>+)4:'X㱿6Ƿx'}A4zpdų#&>lSL"4%? -y*us4HH v \b8`Y4"ˇT.0m|4.yZE}Vm.VjpeA4 }wk[äX 2 6tpI#YJ244 authorme@thomaskeller.bizCehZxx!k5^:|"~UEPJ]7~z^k #(;@ Ql!.V:6+eqk*z?R\HlC0Il>XwFmfՆP4j6ڽ'oAjdB艴iɁE.ujY`VZ|>˂ARc7wG"͏Z+T9q̈VL jzZm@44 changelogfifth CehZxx!k5^:|"~UEPJ]7? } ݌ЈW?5>ς.x E>\ͪAjjI:8eRl<^ߠ?X$s^ υ^ G UUp˔qXgc!L644 branchbiz.thomaskeller.testCehZxx!k5^:|"~UEPJ]7)31sTI[chvY ,2P$Q-abz[extPon`u*KC,4UAa"%Wk>$0^TÅf Qöǁ5s-}x!-J244 authorme@thomaskeller.bizU:@`D݂ J,\=:|"~UEPJ]79Ri.Y@W+Ru=8blwr7QG IB޲kz|2EՈ0'Yp"̟=9~[Hշ+~ޟ7^nkٲH244 date2009-12-10T08:15:33U:@`D݂ J,\=:|"~UEPJ]7I3:vHʒU h'لxеJ,'ߧMJzP`iJhSp9 Jg^ =˃zxcFūPZG.j+ٟc^4# \44 changelogmerge of '88230edcdb77e95fafc7da82cb39da0bcff5e512' and '92273b04b97647ec061846bfac8532066a0664a7' U:@`D݂ J,\=:|"~UEPJ]7Iyy/E`1]20@ ]|RM)ϴk_Xԅzv@mҕ,syGLXPbAV)yX ;y$ }[o ?Į˳#i,2;L644 branchbiz.thomaskeller.testU:@`D݂ J,\=:|"~UEPJ]7$˯CcT;?эP=(aD{ŵX&iAUNe~SGIƌ\B>A S^!wICcH~o?#{<ȯ▤Ҽ 3lO J244 authorme@thomaskeller.biz';vGF2jd:|"~UEPJ]7d8J Tlc;BgzIOӭ&T^Y |s>T6vw Bx>VZՅ2Z"FPkAnDR-tj bl\ {V H244 date2009-12-10T08:15:30';vGF2jd:|"~UEPJ]7p:b@$*5zv^94KS3^gܛsdrviRÃx0Q!_BM+ϟuJ*Z:=%zNQi+fLl^d @44 changelogthird ';vGF2jd:|"~UEPJ]7jGC)% ̙XpI:F1%Z^19&2lTY\q="];ws 1>5+@%Cr9{Um60 7EpQʺ כ:P_Lb_X L644 branchbiz.thomaskeller.test';vGF2jd:|"~UEPJ]7 lU#;Ag t/BfQyzik3urj2DMș`ov›s ʹ?,v ?bb/SQDx{:W[V=fb J244 authorme@thomaskeller.biz#w_ڂ9 :|"~UEPJ]7̙0Өyh9~Jx =uU${# W1̞Lޜw34@Ȕ¥.W)+G@i|o؈@7--NY{H244 date2009-12-10T08:15:15#w_ڂ9 :|"~UEPJ]7vOf @>; BQ-ty;FUUjQ(gU4%}v6K} ˀƖ-U|kT|w|J"X5sJ+ЧKD8- A44 changelogsecond #w_ڂ9 :|"~UEPJ]7z:<˰Ĕ U.U=m@8z0@dZf+ҍŃFq끝q6ĩr!ծUOP6W/6gN+L}b$%:9BUA"pk {U_;BMf o7] CjH244 date2009-12-10T08:14:59Qg'~F@fm:|"~UEPJ]75X$V?7͓Z{9+,) 4x,bqPfZ09b c֥:,厴?W[`yiA?I4 yK*>v&Vk[@44 changelogfirst Qg'~F@fm:|"~UEPJ]7DIð̔z_@ O2d#\q3uR$뼤NkK^8Nz"W,eVl u`UN ZեN2{BUTœbm':zC'L644 branchbiz.thomaskeller.testQg'~F@fm:|"~UEPJ]7;:Mf>l I e{/Y *LWVTZaSK,3cZ(F bAQ"vxx|&|gO*"N{=5,ƶ  pjQ8W>% 4CehZxx!k5^4CehZxx!k5^4CehZxx!k5^4CehZxx!k5^4U:@`D݂ J,\=4U:@`D݂ J,\=4U:@`D݂ J,\=4U:@`D݂ J,\= 4';vGF2jd 4';vGF2jd 4';vGF2jd 4';vGF2jd 4#w_ڂ9 4#w_ڂ9 4#w_ڂ9 4#w_ڂ9 4Qg'~F@fm4Qg'~F@fm4Qg'~F@fm4Qg'~F@fm