Skip to content

Commit

Permalink
make contract commit to a close method
Browse files Browse the repository at this point in the history
  • Loading branch information
zoedberg committed Jan 13, 2025
1 parent 7a66a9b commit 49c9890
Show file tree
Hide file tree
Showing 10 changed files with 337 additions and 327 deletions.
2 changes: 1 addition & 1 deletion examples/rgb20.rs
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ fn main() {
let beneficiary = Outpoint::new(beneficiary_txid, 1);

#[allow(clippy::inconsistent_digit_grouping)]
let contract = NonInflatableAsset::testnet("ssi:anonymous","TEST", "Test asset", None, Precision::CentiMicro, [(Method::TapretFirst, beneficiary, 1_000_000_000_00u64)])
let contract = NonInflatableAsset::testnet(Method::TapretFirst, "ssi:anonymous","TEST", "Test asset", None, Precision::CentiMicro, [(beneficiary, 1_000_000_000_00u64)])
.expect("invalid contract data");

let contract_id = contract.contract_id();
Expand Down
7 changes: 5 additions & 2 deletions examples/rgb21.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ use std::fs;
use amplify::confinement::SmallBlob;
use amplify::hex::FromHex;
use amplify::{Bytes, Wrapper};
use bp::dbc::Method;
use bp::Txid;
use ifaces::rgb21::{EmbeddedMedia, TokenData};
use ifaces::{IssuerWrapper, Rgb21};
Expand All @@ -20,7 +21,7 @@ fn main() {
let spec = AssetSpec::new("TEST", "Test uda", Precision::Indivisible);
let beneficiary_txid =
Txid::from_hex("14295d5bb1a191cdb6286dc0944df938421e3dfcbf0811353ccac4100c2068c5").unwrap();
let beneficiary = XChain::Bitcoin(GenesisSeal::tapret_first_rand(beneficiary_txid, 1));
let beneficiary = XChain::Bitcoin(GenesisSeal::rand(beneficiary_txid, 1));

let index = TokenIndex::from_inner(2);

Expand Down Expand Up @@ -48,7 +49,9 @@ fn main() {
let mut stock = Stock::in_memory();
stock.import_kit(kit).expect("invalid issuer kit");

let contract = stock.contract_builder("ssi:anonymous",
let contract = stock.contract_builder(
Method::OpretFirst,
"ssi:anonymous",
UniqueDigitalAsset::schema().schema_id(),
"RGB21Unique",
).expect("schema fails to implement RGB21 interface")
Expand Down
4 changes: 2 additions & 2 deletions examples/rgb25.rs
Original file line number Diff line number Diff line change
Expand Up @@ -23,9 +23,9 @@ fn main() {
stock.import_kit(kit).expect("invalid issuer kit");

#[allow(clippy::inconsistent_digit_grouping)]
let contract = Rgb25Wrapper::<MemContract>::testnet::<CollectibleFungibleAsset>("ssi:anonymous", "Test asset", Precision::CentiMicro)
let contract = Rgb25Wrapper::<MemContract>::testnet::<CollectibleFungibleAsset>(Method::TapretFirst, "ssi:anonymous", "Test asset", Precision::CentiMicro)
.expect("invalid contract data")
.allocate(Method::TapretFirst, beneficiary, 1_000_000_000_00u64.into())
.allocate(beneficiary, 1_000_000_000_00u64.into())
.expect("invalid allocations")
.issue_contract()
.expect("invalid contract data");
Expand Down
23 changes: 15 additions & 8 deletions src/nia.rs
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ use aluvm::isa::opcodes::INSTR_PUTA;
use aluvm::isa::Instr;
use aluvm::library::{Lib, LibSite};
use amplify::confinement::Confined;
use bp::dbc::Method;
use bp::seals::txout::CloseMethod;
use ifaces::{IssuerWrapper, Rgb20, Rgb20Wrapper, LNPBP_IDENTITY};
use rgbstd::containers::ValidContract;
use rgbstd::interface::{IfaceClass, IfaceImpl, NamedField, NamedVariant, TxOutpoint, VerNo};
Expand Down Expand Up @@ -188,18 +188,25 @@ impl IssuerWrapper for NonInflatableAsset {

impl NonInflatableAsset {
pub fn testnet(
close_method: CloseMethod,
issuer: &str,
ticker: &str,
name: &str,
details: Option<&str>,
precision: Precision,
allocations: impl IntoIterator<Item = (Method, impl TxOutpoint, impl Into<Amount>)>,
allocations: impl IntoIterator<Item = (impl TxOutpoint, impl Into<Amount>)>,
) -> Result<ValidContract, InvalidRString> {
let mut issuer =
Rgb20Wrapper::<MemContract>::testnet::<Self>(issuer, ticker, name, details, precision)?;
for (method, beneficiary, amount) in allocations {
let mut issuer = Rgb20Wrapper::<MemContract>::testnet::<Self>(
close_method,
issuer,
ticker,
name,
details,
precision,
)?;
for (beneficiary, amount) in allocations {
issuer = issuer
.allocate(method, beneficiary, amount)
.allocate(beneficiary, amount)
.expect("invalid contract data");
}
Ok(issuer.issue_contract().expect("invalid contract data"))
Expand Down Expand Up @@ -249,7 +256,6 @@ mod test {
let seal: XChain<BlindSeal<Txid>> = XChain::with(
Layer1::Bitcoin,
GenesisSeal::from(BlindSeal::with_blinding(
CloseMethod::OpretFirst,
Txid::from_str("8d54c98d4c29a1ec4fd90635f543f0f7a871a78eb6a6e706342f831d92e3ba19")
.unwrap(),
0,
Expand All @@ -264,6 +270,7 @@ mod test {
);

let builder = ContractBuilder::deterministic(
CloseMethod::OpretFirst,
Identity::default(),
NonInflatableAsset::FEATURES.iface(),
NonInflatableAsset::schema(),
Expand Down Expand Up @@ -294,7 +301,7 @@ mod test {

assert_eq!(
contract.contract_id().to_string(),
s!("rgb:pOIzGFyQ-mA!yQq2-QH8vB5!-5fAplY!-x2lW!vz-JHDbYPg")
s!("rgb:XO8d$U!l-i2N5GHH-Rh6TONM-95aiue5-qpA3GQZ-97brf7o")
);
}
}
Binary file modified test/rgb20-example.rgb
Binary file not shown.
184 changes: 92 additions & 92 deletions test/rgb20-example.rgba
Original file line number Diff line number Diff line change
@@ -1,100 +1,100 @@
-----BEGIN RGB CONSIGNMENT-----
Id: rgb:csg:wMbFwx2l-Pm15MRg-qftkJhj-QyXWdTq-2Qgh$Jn-wCR$$fI#drama-volume-parody
Id: rgb:csg:1mxhWweO-JFkxLtq-EMqNTXf-q7oUKQV-onociUv-X4xf9N0#hope-lucky-modern
Version: 2
Type: contract
Contract: rgb:oeC0oRIm-8CzpSBD-qBPnW$T-qdsuMEO-Sgoet4i-PP!fAJE
Contract: rgb:lyBlsvJ4-5oG5qmq-H$rn6uV-OL91cPS-Yx6hO00-Yqwlq$0
Schema: rgb:sch:RDYhMTR!9gv8Y2GLv9UNBEK1hcrCmdLDFk9Qd5fnO8k#brave-dinner-banana
Interface: RGB20Fixed
Check-SHA256: e913606632047498ba3e7da93152655cf807fc2039fffade97d1f75688a38177
Check-SHA256: c0276d7495db72163c648ea9e902c29e25f65d1077058e16c0a1086bf1a11bf7

0ssI2002ZbAu%+5_6z)DVT-@j4Fp29h04O2(!&-{P<NN-JIMfFlG$be0000D0CRI`I$>^aZh38Qb#nm#
0iX|$=+dvi?V$kiHY>>R)POH2QN*q5;^`{kJ}FC#v%;(Z1JDNn01^NMR7F!%3RGotbRc1Kb7gb@2+;=t
00RI3007zt0RRX90O)o|7XSbN0iX{70RRI40mWz_3=qW1JT(yrzx+KOLOA(Nl)!B$w#|{Dv0Gg!6afGL
0Ju9*6#|~9QwRX)c1RZh004e|etv#_etv#_etv#_etv#_etv#_etv#_etv#_etwVW(yzenp#bqVE6DKF
fG;Rf#I5V%=_=tqDNBsA!mI!Q00000000000000001{4bZb@!tY+-a^Vr*qWb8}^Mkc}T^00000GyrpR
X*x_=Q!#aTEoW*(Ic```MlDZcWpq_lYga8cax-;PLsK>_VNqyvIaf7iEjUU=H+KL7&<6n5{J!HJ@Tgs1
mpj@U3yhwA`^&{wC3iS1tkb=;A&LP3007Yk09%X4R5&sPN*yA;lp<^AQ;QQiCWsumMiT;fc;H-Y_W=L^
+6MrLj96u3I`KP|x6K-jit^gQ+!PC!a#7jT+VjUz9FBwm0004?4*>`O00Ynm0RRC2(FXwl0RY+u0RRC2
0iX{70RR600juzt(u?g--(Ch+6*7N1n=+qwe6YFx|MoP&lb}4dCJ6ul0T3qu00E#60RaF10iX{70RR60
0juzt(u?g--(Ch+6*7N1n=+qwe6YFx|MoP&lb}4dCIA2c00000000010SZz_LNYK$X?SI11XfR6<MVPB
{R!&WDGXgX2u=0cfR=^v4L0bS8HU8WU)OVbJscBHuRauJB?krea%!Hk0(I6sCqhFtSs;lPKAoX!0r&<f
`@aL{H!tSG|BE#(Vo+CtFZ->o;2qj;#=~;t^vidEtAC%IlVX)dgF*wOtts}w(E1kon`A59t%UgjW&i*H
0009FX>)URWn@!zaBysS0f>xPWn((=JC(Q18jXtb+QHlu3zu?H+0@$e$59-PgaH5qb8uy20oVM#;~wy+
U0;_w+8Yauo__nw#aAVFI4rEwy|f{U0RaF7bY*gFa{*h6$5c2n1xg(vzLX+s=TnOlIwpu5x<(TMczEDk
Z1({G0SaMrb7gc-cWz~J0ssL4000033~6(7b!B8zb#QQOc>w?c00eVzWn%#V0RRPbWpZtE0RRC20SaMr
b7gc-cWz~J0RaF1009nZb8~fNWKC&vZDDj{XaNXxa$#<BW@T~!000013So0|Wpqz>Ze?--0RR613So0|
Wpqz>Ze?--0RR600S|6(Zbfl*VQfKdZ*^{Ta{&rrb8}^MPj_x*asUAcbaG*Cb7p070uE_&b9H58O=)v&
VRU0?WOH?JaBO)Xb8uy2X=Z6<WFTR4AYmY9Y;R&=Y#?x9a$#*{bY*fNWN&42ZYOjgZDDj{XdrZGWguyD
b9H58AaiwaaBO)XVQg$~V_|e<WFT~JAarPDAYpTJWpp5KcWz~Ja}REBZbfl*VQfKdZ*^{Tb47G$Wgv5P
Z6I%EAaihKZge1Fb8}^Mb0B1IWpi#PbRcDMbzy8EbZ;PZXk{RCb!{MTW*}j6b7gdMAZczOZ*_EVb#!wy
0CRI`I!szqF?Dz?XKF+_Zdg!8El*=*bX8SrS1mSjGj&r#Q#LJOQD}2HS2boWI7&q~cL78;Au%+5_6z)D
VT-@j4Fp29h04O2(!&-{P<NN-JIVefCp*@T*BEM1-nAxfQs?Xp-gq0!k(CoEP-QR-U^$SDA7%gm00003
&<6x_aAjiv0002d2L*Ixa&2<}0002m2MlR*b9H58Q+04~Y<U0x0004?4+>#(b7gc-cWz~J00000009su
2y}8`ZgXa3asU7T000624{mR6MR9duY(Z^rb#8QX000000S;+%b9H58O=)v&VRU0?00000GyrpRX*x_=
Q!#aTEoW*(Ic```MlDZcWpq_lYga8cax-;PLsK>_VNqyvIaf7iEjUU=H+KLd000X1U)Cjo-i6E2P9x&m
nv%Qki+Oba;k67*blZ=H=TQh>UMA(m1w0!?L{VGDpk+OvDhHAKF%fNXr25$w;Zs!r000000000700000
0000O%am^tlg}6qop{{FTg974FaQ3n`}K{nn9PGH_DcZ;0agu`_oR6wvcum54rF6FkJew+k!36?Lqfl$
`8gF)R2-|n!`LRkztQP;3W%Qi%!_9htpQ3t>=3qD6)+-@LI6M<uyu|U!T^j90F36+)E=H0H{s0>nH0sE
ektM3d!V}o0nEa3l8<>f1KA&4t&LI4m}^5aI1iE}_s79eO?HmEkSbfMtWb&n35^vCNG$%?ywDnvz}K{0
G9hl&cB^sg-3J`2zr)xjz`xPycM6D}`pk=G7OeqFKI{;-SrsrMkU}5;FWB;W7bg;sK59Oe@c3K=fV3eR
7p&1RS^QDdq`TfM1OfmAZf|a7*gwADFAe3iZ1@l19{2t5VaJV^T`{fc?xMUvnKPbj0R(ezZDp`<(~tJj
3|i&b2NlXOR2^DUyWY#wQk^*F-L`Td370(4qMgjGn~{4aFkgwNr28QlFe*-S#jFZ=4d$x=UULI21Z8+*
Y#{__VRL9B24rt+Y+-UF17U4&CIoP7b#p5OWMOk?Edyk4bS?yXWpZyY18;6+F#~jWZ!!gRXmVv`GX!RD
b#gQWW@&b1H3M^Lcs2!dWp-t5Hw9&BXJ~Xd1a4_=WjO_7VRB`3UIuJ$WMOk?UjboZ0b*hSV`BkiWC3Mm
0cK_aXJ-LuXaQ+y0cvUiYij{)YyoX;0d8&qZ*Ku`Z~<{~0djHyb8`W7bOCjB0d{r)cXt7Jcma8N0eX5r
D{{BQuNq?vw$uLzi?1~hlkP@ao_$9uVE}^UN!R2B0b{Bo6zH)>$g+grvznd|(VVK)`s##^Jh_COk!RL4
N<*rD#rE}NPvxSnUK**8Le1-kltSZ7azFKgf3Y*(iUtA%ba`-Pu?^n-fFP~dpvnj-AyBKaJW)+{-ce}5
$#DguerIN224rbxWpi{YTdJ&3iT??W6$?l#{@A?G8j--)v|TbGZq;_HaqHbhw}2&v0mUY=J6lL$MhcKn
;XgI|zJmp*01;Q@0XT>R0ssVVZ*FDSKfd5E4dt|K_z&S8_x<o;$Bma=F|FzDqP#$vGoEY#1aog~Wy=4L
uCs~&piVX+Q;&{e*II?7Wy=Z<NW)n^eyVI=$4I^-7b@t4MVjY>G@u4Q3HlB(d+LiLJm-R=h;`?dxC37W
b8ul}WgrA)cw=lK261(7bY*iQ1ZZJ%Xd?z>Z)|K~awG?EWpZO>ZgeFHVQp|_a&uvBWF`t>aBp*Ta&K^G
WhV$?a$#d@Wpqp^2x4+!V{2t}QYi>wb97~LX>)5T1aNG1b1Ma7Z*6U1ECp?8Zgq1l17vS>E(LRJVRL9N
1bSt1Z!iOIZe=k8ba!tu1$1a~Wo0u2W^Z+JGz4a8c4ajKb7^=s1#@L~Wo|bGWoc(<bT|ZVX>MgX1!He)
Z*DpXb7gI5LvL(vZaV~QWpi^p1!Zw{VQf7IXL4m>bY*fr2yt~~b98BMZa)HHbU*@MK|umvLP7#xLqh^z
L_`8#MMVN%Mn(c(M@Ir*NJs)-Nl5}<N=gD>OG^S@OiTh_O-%w{PEG<}Pfr40P*4J2QBeY4Qc?n6Q&R$8
R8#_ARaF9CR#pOES62dGSXcsISy=*KT3QNoaYAxoV{2t}Oj`+JVPk7kY+-X~Tnck>LULhaYh`p&T?J!d
a%FU025fI+VRL9-2x4JlYjkO2YhVFkVF6-d0b^qUWMlzlWdUYp0cU3cXlMaxX#r|#0c&dkY-|B-Z2@j>
0dH>saBu-}aRG920dsQ!baVlAbpdvE0e5!+cz6MMc>#KQ31dQXVPk7$bWD2$aA|O5d<kPha$#d@Wpq+~
1$1d_WMzI<4VL$$c_gyK-vkb1V>yr3U)7OiEGa`mzoq#(6;V_O`>9xR8a*>q2D50xZ(4$R31H0PIsUw_
;fcDKIn~;D0000000000|Nj6000000TX!suv0v9m0LPL+_79KRH|I99{YEOV7tT#ZPWpkW1p!`O$dXTU
&2q#dT$Zaxd1hGe8*-eZ2I646q$?$f9S>WJ$5c2n1xg(vzLX+s=TnOlIwpu5x<(TMczEDkZ1)BN1axJ1
bQsH&ZxWNw7!I9y+{RnQn@2DI{;m7<jj@=_gDCb(0R?SkWNBgGhp04`Gl!Y4#EOy;XgWfDE7LwMr|Y<=
xPa<PwCjOfp-EU><uvY*v*VyJx9`-=x0=4G6)zAUH(9jDAr2n^2welj7mcZoem^?%L*to!bRZoO^d~aU
zM`;8jz95VA_Ef(X>Md`c4>2IVr*pq1Y~7nX#oXeWo~q70tIbpY;0)*31nqsX-#QtY-t1vV`Xl1X-#Qt
Y-t4rZE0h2Zw3iuWn*bgX=8G42MS|lZggo)X=8G42n23nZf^+)WMyM%PGN3u3JGInZggo*VQy~=1aN6%
Zwv@zWn*bjX=85<31ek$bZJm&V{Z-xW@T-3Zx0D%Wn*bZWo>kC5DH^uZggozWo>kC5d>j$bZ-(~UdWP9
bIo$ZB3zcMM|oyg?;CQQqXyz&yre57i5(9G0)iue^mXv<w6)w(d6C|8kgcNIvvn*?253>L0b>G|!V30Z
)+K@7h0D=SBjVedlDqGVd368bwG2#j+mD9lQD0sr<;4X&8%0D>TgISeJ)kNFk^3<bZE>Xf*%skbRRcZ*
dS!BNFavLHWibPEcW*KUbZByAWite3Z*_7s1ZHV=Wi<nHX?QjTb7gjAZZ`#GX=iA3I0SBKZe=+FUqL|v
UqV6xUqeFzUqnO#UqwX%Uq(g(Uq?p*Ur0y-Ur9*<UrI^>UrS2@UrbB_UrkK{UrtT}Ur$d0Ur<m2Ur|v4
Us6&6UsF>8UsO~AUsY8CUshHEUsqQGUszZIUs+iKUs_rLVPOGcVgX}g0c2zWWn}?oW&vks0cdCeX=wp!
Y5{9&0c>mmZEXQ=ZUJv^0dQ~uad821ashL50d#Z$b#(!Db^&*H0eE-;d3gbPdSj|16zH)>$g+grvznd|
(VVK)`s##^Jh_COk!RL4N(lR@SaKRYGgJn%Xv1$>f_VvG%;GuzyszPjx|liD+IRr~000000093000000
004kq#k^Az$U%@qU7>2Bz={du0O&G0&#r1CLJBFZ06hf(#5#SRxw8U!bIFfg*5RxK^~=*jK)}Ad3J<sl
6abXef+K+Rb@1)9wcJs8k=}EVt)knrbu3H<Xi=&GV*-}K12h6(K|umvLP7#xLqh^zL_`8#MMVN%Mn(c(
M@Ir*NJs)-Nl5}<N=gD>OG^S@OiTh_O-%w{PEG<}Pfr40P*4J2QBeY4Qc?n6Q&R$8R8#_ARaF9CR#pOE
S62dGSXcsISy=*KT3P{NVF6-d0b^qUWMlzlWdUYp0cU3cXlMaxX#r|#0c&dkY-|B-Z2@j>0dH>saBu-}
aRG920dsQ!baVlAbpdvE0e5!+cz6MMc>#KQh>TceV><CWmAB0rjf(Qx!Q2!JmvT|r)Y|jMQ5=qh1p!>4
NmyOwH13hJ<Df9N@6^q=n!c$OFAyI$S+vI?4j-^^(~tJj3|i&b2NlXOR2^DUyWY#wQk^*F-L`Td36}){
9I$nc6v6<E4*-nj($pTF88_k051ACjntmza&U>J{u?^n-fFP~dpvnj-AyBKaJW)+{-ce}5$#DguerIN2
1_K0id2nSMuyu|U!T^j90F36+)E=H0H{s0>nH0sEektM3d!V}qb9G{Ld2nSf*z$T8ClZi8YCe|m_*?{l
v>_T7tkE!8{87}TyWT7ZV`yP=b7gcd*z$T8ClZi8YCe|m_*?{lv>_T7tkE!8{87}TyWT9nkIU)BIae{J
w9R4r0N>}O)+shqImKG);D@8R3aUm3Jkg?^%&nV|dnPbniKwLeAs8?!PIJYq3V03Xs{mee0000000000
KL7v#00000#5#SRxw8U!bIFfg*5RxK^~=*jK)}Ad3J<sl6abXe1p-LEBNr;@ghiU?gEXK9KMDE{F?;HZ
BRuDVqlk6qmbmq;7a>H<(%oY0=TGqa6l5KfYJkC@$v(fAa&d%-e7ws4kFK+d0H97bAybczVb@xPq-Dzr
4oJgUK7OifU&jRjKPz&##IG7-47St%2#c>Z5R>jkTb_MKDq#SE<Vn}$%))Y#k9jx)*&ki4jZw^)YeO<P
50WJJ$H7rec8<G{1p@gO2n5}(1bO(?uXL+B(gNn{L2}utxi<$D8ry%w457b|%jv~AS23ov&0+fh-{+;)
DK=9%#aim%hoiX)sz%rRzT+P7s9j%|JK7ryjGlh`%f(kEcQ`Dp)4jAIiU9@$26Sm-Yh`j<cPx&vU)M(f
$C5$z50Bb6=QgwbMk=ru&P_#5`hlthZeeX@fL_JCQxeEQkVIXfYN5c23F83hGCI$$Y9m4lDXjoK2V`Y*
VQFl0MYn(@h5^MUvO8NyVMYp&P~kr{`@Vw(r~naH<N-K{32<^{V`+0~Z*E-!#21aJj($Hn^F!mAeRLol
5%ecA&%UCtOO8MBUn1B)zThtn<+N=058)p7{qSMOjh9_9t?BNfyg->Vo@@XB+#WAdR)2C|*D$SwhJOvD
$-0{Gfin@`<nKN_N?|2P1pz~<f5rCoWKZRyu3j3ckV4Jthm=C&OmaW<f`73y-iqLds5F){hncU$ijom%
IzoLb(>^Yz>$s@6fa*%L>wyFU00eGtZe`d%zThtn<+N=058)p7{qSMOjh9_9t?BNfyg->Vo@@aGb8l^B
+#WAdR)2C|*D$SwhJOvD$-0{Gfin@`<nKN_N?|2P^{p2nM9k9NV(jNn@cR^G9g}K+!Jx@Lzn5}xgo%8-
2uQvo7b@t4MVjY>G@u4Q3HlB(d+LiLJm-R=h;`?dxBvhE0000004D$d000000QnaP1l_I#dHB_@bgMhk
0_N&La@nc5HwP6O+keCip#vHLVPOGcVgX}g0c2zWWn}?oW&vks0cdCeX=wp!Y5{9&0c>mmZEXQ=ZUJv^
0dQ~uad821ashL50d#Z$b#(!Db^&*H0eE-;d3gbPdi$wZavD7|R0gwX!*5!Gc?n?5;yM1jui=Thm^szj
cmV+b0|P-!RR}^*L`g?QQ&a;|M?xV03jhEB(4Y?i2MYiJ01F5J01E*E0La=00XZ-L(V!0j2Lu2B0RR91
0000
0ssI2002ZbAu%+5_6z)DVT-@j4Fp29h04O2(!&-{P<NN-JIMeGM1^Mn0000D0CRI`I$>^aZh38Qb#nm$
0iX}3{HrB?Kgji}NDdZ<!4tXKN636W?mAJ1sPS9-P8;C>1JDNn01^NMR7F!%3RGotbRc1Kb7gb@2+;=t
00RI3007zt0RRX90O)o|7XSbN0iX{70RRI4#b_W55X8znH4zBE{5>8*IQdPKz-=hD&5@z8TU{v>0RR91
NS28eeh`qp2mt7INEZMA0DgXcetv#_etv#_etv#_etv#_etv#_etv#_etv#_ey9AaC4N81^{Pk?7KgzT
x!Om_d_L|vQHH4TTl-EM;Q#;t0000000000000005>9V!Np5CrVRT_)Y-K@nb7gdpjUQ$J0000q0CRI`
I!szqF?Dz?XKF+_Zdg!8El*=*bX8SrS1mSjGj&r#Q#LJOQD}2HS2boWI7&q~cK`#>2LRXnzT+P7s9j%|
JK7ryjGlh`%f(kEcQ`Dp)4jAIiU9!t0MQ2kTZ_k3I5GuF9U{JzB5UVUixWB~h#a~`69Ra6;9P9?0RRBn
2LOnSSY=~6@jI2b%^Ho0^4h`N6bqMfQQ6em^T$yfj)VaK00E#60SEv91JDNn0098e2LS*90NMuu00962
pbr56|Nj61tMHl9i|tU~UItecGJiUoGM{&Ru(|&K_B6qhpgguF2><{A5GMct0iX{70RR61pbr56|Nj61
tMHl9i|tU~UItecGJiUoGM{&Ru(|&K_B6qhpgguF0000000000000323Q|WxGB8GIcx7Y+R!>~x^Kusb
3F_D>3|%=0P4(J<mWA;RHt3oehQzyH*K>M391~BkJ``pp2L<+WYM!zJb=Ey6LPIrKAc+<}ouO+1_y#Ha
zXRttFXqDki#07`P*;L4`>n3v9olck!*b;G%XfgQf1jL_VwFaNLIb3&DfYq8`WE_|WGmgRg!utx00000
00RtZb8~fNWK(r;aBO)2h>TceV><CWmAB0rjf(Qx!Q2!JmvT|r)Y|jMQ5=qh0RRMZaAjiw*ZjWY9`LAL
Uza=D8w-q{e*4SCS0#5iEUeSLv>}QC0RRPbWpZtE0b7g5R5&sPN*yA;lp<^AQ;QQiCWsumMiT;fc;H-Y
_W=L_3So0|Wpqz>Ze?-;009920009FX>)URWn@!zaBysS0RRC21aoj@V*vmG00neqa&2<~009623So0|
Wpqz>Ze?--0RR600S;+%b9H58O=)v&VRU0?0SI(*VQzC~WpV%j0003BVRLh3bWe9~WpV)k|Nj9BVRLh3
bWe9~WpV)k|Nj614{mR6MR9duY(Z^rb#8QX0SaMrb7gc-cWz~J009Vea$#<BW@T~$4rz09b!B8tX>)C1
bYo~_b9HcVY<VDaaAjj@W@%+)AYpSLVIXI0Z(?C=AaG%FVQpn}WpW^7Z)J0CCv+ffVRU0?AarPDAZc@R
b!B8Ab9HcVY<VDIY;131VRU6=AarjabZBKDVRLh3bRchcZe?<F4{mR6MR9duY(Z^rb#8QXMRaIoAaiwX
Aa7<Mb8uyDbRc1Kb7gdMAY^Z4b8aVeAZ2lNVQe6DZy<DNWgv5PZ6I%EAYpTJWpr~OX>K5Ib#!obbaONS
b8~4rOj=Vhb$BgjYD771SWreSPh(|tRaI+OEjDs9byGuAHZ5UMXmdGNHD)b1N<}w!0Yo+-F*JVm3;bhY
i@((k1VXii%EFn_!xm3acbDfo$^IoLJJycZ7-~`8wI*&-=j;sLcpJ-+l@lpYWiSk2IgpJXW&i*H000Bf
2Ly9)Wn%yU007Yk1$1R{ZF2ws007zt3~6(7b!B8zb#QQOc>n+a00E#63So0|Wpqz>Ze?-+000000T3q$
baG*Cb7p070000000ICHZf|ZyadlyAL2Yk!Zgg`1000014rz09b!B8tX>)C1bYo}$0000q0CRI`I!szq
F?Dz?XKF+_Zdg!8El*=*bX8SrS1mSjGj&r#Q#LJOQD}2HS2boWI7&q~cK{;*01EbB)+K@7h0D=SBjVed
lDqGVd368bwG2#j+mD9lQ3zjNCgsHiJR3zsQCr5KWj&xO2a)?R5p8j#`q>uYQ&j)}00000000L700000
000=vly4G~&lnD!c-+QY#hXVj|NgD}^^LKZ%!4TQO92G|Rt=W-q<JK=!`}oBWMesx)?d|;Wh^N}LcgW?
ITcY<9IL;>*e1Zg(dl;zh@Se)i)R+C0ZKmX5VlzrFd~pb06-kDb&eFm0E`a+jONnR9-bLD;mr@36vdi;
DdEn0pt}VD%))Y#k9jx)*&ki4jZw^)YeO<P50WJJ$H7rec8<G{DqE_oP>KHujTH+>EdJQM&>E4z*R)+S
A#T-nt8wey2OO)v!`LRkztQP;3W%Qi%!_9htpQ3t>=3qD6)+-@LLdMy*z$T8ClZi8YCe|m_*?{lv>_T7
tkE!8{87}TyWT7W0ssVVZ*FDSKfd5E4dt|K_z&S8_x<o;$Bma=F|FzDqP#$vGoEY#1aog~Ww3D5kM`0G
TIJXW70NMG9a>Vm-pkWcojB&*wsIf|mpsv;oy@J9k$WaEUx}!s`ym)GDo%67tO|Gy=Bof+a|0~|Wq4z3
Ap~e)b7&(5WN&P2VR9q`VQp|G1aNG1b1MX7VRL9L17vS>E(CgIa&IsLZ*FBV19W$9G6i&Ka%E*R1ZHn_
ax?^HX?A5b19NG3HU)EKc4cli1!ZYxXmmIPZfS01IR#^3a%FU025fI+VRL9-0byYQVqyVfV*zAj0cB+Y
W@Z6rX8~wv0cmLgYH9&%YXNL*0c~voZf*f@Zvk*{0da8wa&iH4a{+X80d;i&c6I@GcL8{K0eN`=dU`)A
a<{~<8e<H$)BgyIuQd>p?nYaleMc%`0D|O6*W?8OW2z$*=&?u0vV`BWnw}8RoT}CO>V%FwxrCjOXVx@I
L#ltp_Vr{><)W@$8mW*%&FhDhLgP$wKlOrtu`}L^1_A_hd2nU14c`8MAg$P-$_ObTP^+;#QB8K<QE0)*
aRs7&XJ%jqWNBw*b95?Os;p3n{|Sv13rH;f*u2mhk-*oqT{0nV)po0K>)l1SfF*_j#U`>lTS#F>3Xo9Y
KQ;Tlg9WGn5m)2^IEVxS00eGtZe`d%zThtn<+N=058)p7{qSMOjh9_9t?BNfyg->Vo@@aGb8l^B%Kwk9
vx)$qPBtM^kB(v2T7{%#%L)!i!&yFls%&4!NWLQ%D(Hkon&*Qwpawq)`VKLB>Wd>h=Ype%b?272178Jm
aA9L*AOvN2V{9P?admHWWpg3~Xkl|`BL-w|Y;0k2BnNP1a${v~bR`L4ZE$6Bb75{|CJJG2Z*z2VZ*XX3
CkSG4VPk7$bWA7+Vsc?)Yh`p&DF|V6bY*gBb89LDaBOvRD+Ob3ZEayJ1#M|=b#pBPWN&mX1#@g+b7(IF
dS!BNFavLHWibPEcW*KUbZByAWite3Z*_7s1ZHV=Wi<nHX?QjTb7gjAZZ`#GX=iA3I0SBKZe=+IV{dG4
ZaN8bWo>CgZ)|UFI|OWHb8|ceWpQ<3Y&{2Oa%Ew3WpX|Uadl;LbZKvHKLTNNKmuPuK>}YwLIPhyLjqq!
L;_z$MFL+&Mgm_)M*?3+NCIC;NdjL=N&;U?O9Ed^Oafm`O#)v|P6A&~PXb?1Py%03Q3795QUYI7QvzR9
R03aBRRUjDRsvsFR{~#HSOQ;JSpr{LS_*S<LULhaYh`pyTM1%eV{21vVRL9)3UhHna$#d@Wpq+q1!G}y
WprK!Y;R;?b7)@(Vqs%zbZKL2U;$xa0b*hSV`BkiWC3Mm0cK_aXJ-LuXaQ+y0cvUiYij{)YyoX;0d8&q
Z*Ku`Z~<{~0djHyb8`W7bOCjB0d{r)cXt7Jcma8N0eX4~V?uIaV{2t}OnU@yX>etH31dQXVPk7$bW(i<
bZKm4Wqwu-miMH2B(lTb1P)|lIgi#~)sbZ^DMLcPrTIA(QB(-~saSFvJu_4WvuML_T7r2AV9eq<{=Bc@
iMp6M)!KLf0000000030{{R3000016cPx&vU)M(f$C5$z50Bb6=QgwbMk=ru&P_#5`hlti0bX9nl23EZ
a>OEBma9j3W?1hVa-5?E;$Xa_D<z2?4_k}JR5&sPN*yA;lp<^AQ;QQiCWsumMiT;fc;H-Y_XYw4bY*yS
7|WDz5|hsu4xM=1##_akM=$^Wt^4(jv6#$*DE3PM1#M+yX<^`ps5F){hncU$ijom%IzoLb(>^Yz>$s@6
fa*%L>w#RMNmyOwH13hJ<Df9N@6^q=n!c$OFAyI$S+vI?4j%vrT?51yjj4`)KRWY6<C%SQARQ6(Co<2z
qOePjKk;880}~5rZe(e8X>(~}Y-IohWMyM%0R>}aZggn^1#M|;Y-s}tWMyM%O=)awX#@&mWo~q7O=)aw
X$1vsX=8G41_@+kV`)ukV{&f?3S(t%bZJd#V{&f@1a4t&ZwUxwWn*bhVQy~<31ek$bZJguZf^?&aA{+2
3<zXpV`)%nV{Z)!V`Xl1X;5inZw>`!Wo>kC4+&&tV`)ZZZFFxC3S(t%bZJIqZFFxD1YvY^ZxUW!$dXTU
&2q#dT$Zaxd1hGe8*-eZ2I646q$?$f9S;Qpf+K+Rb@1)9wcJs8k=}EVt)knrbu3H<Xi=&GV*-}K3ie;t
C4t_B%h66F;@g^%yYGv6bpPSC3`}&}kA~+_UtT8V#RWVYMMP0s#-L?ApehHE`!Nx1aisd$7U5G>13m<L
WpZyY18;6+F#~jWZ!!gRXmVv`GX!RDb#gQWW@&b1H3M^Lcs2!dWp-t5Hw9&BXJ~Xd1a4_=WjO+0K|umv
LP7#xLqh^zL_`8#MMVN%Mn(c(M@Ir*NJs)-Nl5}<N=gD>OG^S@OiTh_O-%w{PEG<}Pfr40P*4J2QBeY4
Qc?n6Q&R$8R8#_ARaF9CR#pOES62dGSXcsISy=*KT3P{NVF6-d0b^qUWMlzlWdUYp0cU3cXlMaxX#r|#
0c&dkY-|B-Z2@j>0dH>saBu-}aRG920dsQ!baVlAbpdvE0e5!+cz6MMc>#KQW2z$*=&?u0vV`BWnw}8R
oT}CO>V%FwxrCjOXVx@I2>Yp6avD7|R0gwX!*5!Gc?n?5;yM1jui=Thm^szjcmV(a000000RI3000000
0DxY_yi*d$L6AgUp=zPPiV5QY=rTIbu4*Gf3Ms7sJp}>8I(?qGvjTZ@$&X#u;j9Gp%hN(Yz`nc+54Z>v
0F=~%BY^aE@a?p<+);Uv-gA(xqT91|EKCMyQK|uB0+zx9Gy-2iK>}YwLIPhyLjqq!L;_z$MFL+&Mgm_)
M*?3+NCIC;NdjL=N&;U?O9Ed^Oafm`O#)v|P6A&~PXb?1Py%03Q3795QUYI7QvzR9R03aBRRUjDRsvsF
R{~#HSOQ;JSpr{LS^;5U0b*hSV`BkiWC3Mm0cK_aXJ-LuXaQ+y0cvUiYij{)YyoX;0d8&qZ*Ku`Z~<{~
0djHyb8`W7bOCjB0d{r)cXt7Jcma8N0eX6fj96u3I`KP|x6K-jit^gQ+!PC!a#7jT+VjUz9FBwq0bHR;
SY72b?vb<OpfI=Z)Xle=zNr;25Fa;Lw8tS1AFy!KkM`0GTIJXW70NMG9a>Vm-pkWcojB&*wsIf|mjwYF
uyu|U!T^j90F36+)E=H0H{s0>nH0sEektM3d!W0q4c`8MAg$P-$_ObTP^+;#QB8K<QE0)*aRs7&XJ%jq
0|az=aAh2@b&eFm0E`a+jONnR9-bLD;mr@36vdi;DdEn0pt}cibz*dRaAhyp@_H915|BP>K9=zKTm*o$
AsQE~(J)#3QPiZn-Yf@WXkl`5Wpppt@_H915|BP>K9=zKTm*o$AsQE~(J)#3QPiZn-Ymb5%jv~AS23ov
&0+fh-{+;)DK=9%#aim%hoiX)szwMr(W0Hqt(%d1CNN)#sHFQL7%(bMbH%I*cn#*O0A6zd000000000#
000000002QI(?qGvjTZ@$&X#u;j9Gp%hN(Yz`nc+54Z>v0F=}P0!Y3i7b@t4MVjY>G@u4Q3HlB(d+LiL
Jm-R=h;`?dxb>|UAw<m5-D2$LPw@K`WF3=gfWe^2KEIc8afFF{yvqNNuCs~&piVX+Q;&{e*II?7Wy=Z<
NW)n^eyVI=#{~gDD{{BQuNq?vw$uLzi?1~hlkP@ao_$9uVE}^UN!R4e!g7+2c{l^vA6>1DQOuZYLozrI
k|g)X!BI_ij=PWr0{IsR1l_I#dHB_@bgMhk0_N&La@nc5HwP6O+keCip}&vI>BTu$F{ZT5Vfz5z=cU#u
Hd8spTI%43qqz#IM%Vnl;~wy+U0;_w+8Yauo__nw#aAVFI4rEwy|f{U0R{vHbZKL2WpZ10ERL~X*GB-y
l0o(lkJ>lqHnaUkDzF#MO+`-nfvN;<VQpoAUd6mq639W2L|vh3p}>j>;{fO~I?t|ZBSH!(tpGg-WMy<=
X>4;vw}2&v0mUY=J6lL$MhcKn;XgI|zJmp*01;Q@0XT>WaB^j1X>)0BZe0V!7mcZoem^?%L*to!bRZoO
^d~aUzM`;8jz95VBG^B^;4cm3v~2hf;U4$>@L|V|mt8Tf>F%PuK$$b1Yybe<9xqZ>e{x^fFs+1!e+{I`
x|;BTGZEk9?>;<AVI@cf0Yj>P#rE}NPvxSnUK**8Le1-kltSZ7azFKgf3Y*(ir|N+G?p`mnXkl(k`ZV+
LVYXKJ}#&0xTv^*>Pochfdm2o1a5C`W!OKy;4cm3v~2hf;U4$>@L|V|mt8Tf>F%PuK$$b1YykvwZ*67V
9xqZ>e{x^fFs+1!e+{I`x|;BTGZEk9?>;<AVI@fQtrsCg%+lRr?B`GL`xImylWKs$pvgYJmvV80iF~{W
NWLQ%D(Hkon&*Qwpawq)`VKLB>Wd>h=Ype%b?2720000000000CjbBd00000`4<QT-L3?A_|>m;t2@#H
=ITLm*{QiV2NfFIf5Z%-0~!HgVF6-d0b^qUWMlzlWdUYp0cU3cXlMaxX#r|#0c&dkY-|B-Z2@j>0dH>s
aBu-}aRG920dsQ!baVlAbpdvE0e5!+cz6MMc>#KQ`>9xR8a*>q2D50xZ(4$R31H0PIsUw_;fcDKIn~;D
0RaF513^qx2trUqNk>IfR0C2+LLmSP0002cpbr5D3jhHC3kU!J3jqQE$l3=1IWPdxpbr5D1ONa500000
000

-----END RGB CONSIGNMENT-----
Binary file modified test/rgb21-example.rgb
Binary file not shown.
Loading

0 comments on commit 49c9890

Please sign in to comment.