Skip to content

Commit

Permalink
Merge branch 'master' into assert-eq-builtin
Browse files Browse the repository at this point in the history
* master:
  feat(ssa): Reuse existing results for duplicated instructions with no side-effects (#2460)
  fix: Closure lvalue capture bugfix (#2457)
  feat: Syntax for environment types now works with generics (#2383)
  fix(parser): fixes for the parsing of 'where' clauses (#2430)
  fix: Run `wasm` nodejs tests with no fails (#2387)
  • Loading branch information
TomAFrench committed Aug 28, 2023
2 parents 4dfff98 + 93726c4 commit 78a57fc
Show file tree
Hide file tree
Showing 49 changed files with 340 additions and 121 deletions.
6 changes: 4 additions & 2 deletions .github/workflows/wasm.yml
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,7 @@ jobs:
- uses: actions/cache/save@v3
# Don't create cache entries for the merge queue.
if: ${{ steps.cache.outputs.cache-hit != 'true' && github.event_name != 'merge_group' }}
if: ${{ steps.cache.outputs.cache-hit != 'true' && github.event_name != 'merge_group' }}
with:
path: ${{ env.CACHED_PATHS }}
key: ${{ steps.cache.outputs.cache-primary-key }}
Expand Down Expand Up @@ -199,4 +199,6 @@ jobs:
- name: Run tests
working-directory: ./crates/wasm
run: yarn test:browser
run: |
yarn test:browser
yarn test:node
Original file line number Diff line number Diff line change
Expand Up @@ -3,49 +3,60 @@ fn ret_normal_lambda1() -> fn() -> Field {
|| 10
}

// explicitly specified empty capture group
fn ret_normal_lambda2() -> fn[]() -> Field {
|| 20
}

// return lamda that captures a thing
fn ret_closure1() -> fn[Field]() -> Field {
fn ret_closure1() -> fn[(Field,)]() -> Field {
let x = 20;
|| x + 10
}

// return lamda that captures two things
fn ret_closure2() -> fn[Field,Field]() -> Field {
fn ret_closure2() -> fn[(Field,Field)]() -> Field {
let x = 20;
let y = 10;
|| x + y + 10
}

// return lamda that captures two things with different types
fn ret_closure3() -> fn[u32,u64]() -> u64 {
fn ret_closure3() -> fn[(u32,u64)]() -> u64 {
let x: u32 = 20;
let y: u64 = 10;
|| x as u64 + y + 10
}

// accepts closure that has 1 thing in its env, calls it and returns the result
fn accepts_closure1(f: fn[Field]() -> Field) -> Field {
fn accepts_closure1(f: fn[(Field,)]() -> Field) -> Field {
f()
}

// accepts closure that has 1 thing in its env and returns it
fn accepts_closure2(f: fn[Field]() -> Field) -> fn[Field]() -> Field {
fn accepts_closure2(f: fn[(Field,)]() -> Field) -> fn[(Field,)]() -> Field {
f
}

// accepts closure with different types in the capture group
fn accepts_closure3(f: fn[u32, u64]() -> u64) -> u64 {
fn accepts_closure3(f: fn[(u32, u64)]() -> u64) -> u64 {
f()
}

// generic over closure environments
fn add_results<Env1, Env2>(f1: fn[Env1]() -> Field, f2: fn[Env2]() -> Field) -> Field {
f1() + f2()
}

// a *really* generic function
fn map<T, U, N, Env>(arr: [T; N], f: fn[Env](T) -> U) -> [U; N] {
let first_elem = f(arr[0]);
let mut ret = [first_elem; N];

for i in 1 .. N {
ret[i] = f(arr[i]);
}

ret
}

fn main() {
assert(ret_normal_lambda1()() == 10);
assert(ret_normal_lambda2()() == 20);
assert(ret_closure1()() == 30);
assert(ret_closure2()() == 40);
assert(ret_closure3()() == 40);
Expand All @@ -57,4 +68,13 @@ fn main() {
let y: u32 = 30;
let z: u64 = 40;
assert(accepts_closure3(|| y as u64 + z) == 70);

let w = 50;
assert(add_results(|| 100, || x ) == 150);
assert(add_results(|| x + 100, || w + x ) == 250);

let arr = [1,2,3,4];

assert(map(arr, |n| n + 1) == [2, 3, 4, 5]);
assert(map(arr, |n| n + x) == [51, 52, 53, 54]);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
[package]
name = "instruction_deduplication"
type = "bin"
authors = [""]
compiler_version = "0.8.0"

[dependencies]
Empty file.
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
fn main(x : Field) {
// This is a regression test for #2450.
// The compiler should recognise that the `(x as u32)` instructions are duplicates and so have the same output.
assert(x as u32 == x as u32);
}

Large diffs are not rendered by default.

Binary file not shown.

Large diffs are not rendered by default.

Binary file not shown.

Large diffs are not rendered by default.

Binary file not shown.
Original file line number Diff line number Diff line change
@@ -1 +1 @@
H4sIAAAAAAAA/+WU0QrDIAxFY6X9nsQkNXnbr0xm//8TNmgFGXurg5UdkIs+XGOuZAGABXbCa02Hhm7fzqDT26GMq0jNqRLTHZMXUxQtq5GRmj6SMVcTy148o5NwpU2dN9zp7+h98RwUBnpNA9/7zR7GP+lhHFfXlfJIv5rHfIE84gdfPAfNA2ts86/9nXeejHS7tqgFAAA=
H4sIAAAAAAAA/62QUQrAIAiGrV1IU5e+7SqLtfsfYYMaRK/rA/nQh190A4ANGuGt2B2G/pvB4KObcRepOVViOjF5MUXRshsZqemVjLmaWPbiGZ2EK93qfGNj3DHm4j8oLMyKC++N069nHoIDRpiQAQAA
Binary file not shown.
Original file line number Diff line number Diff line change
Expand Up @@ -15,4 +15,17 @@ fn main(mut x: Field) {
add2(&mut x);
assert(x == 3);

issue_2120();
}

// https://github.com/noir-lang/noir/issues/2120
fn issue_2120() {
let x1 = &mut 42;
let set_x1 = |y| { *x1 = y; };

assert(*x1 == 42);
set_x1(44);
assert(*x1 == 44);
set_x1(*x1);
assert(*x1 == 44);
}

Large diffs are not rendered by default.

Binary file not shown.

Large diffs are not rendered by default.

Binary file not shown.
Original file line number Diff line number Diff line change
@@ -1 +1 @@
H4sIAAAAAAAA/+1dWaxVVxn+77lluNxyoUCBAmWeC3Sve+7YluFCJ6AtnZjaQsuFeylTgQ60UDoPqfpi1IeqL0Z90KTqiyaaqKn6ookmmmiiiVWfjPpQ9cWoD1YXXfv6733OhcL6vsVe7VoJWZwV+Pf//cO31t7/f85e0SKy/H9/7LBTzc3j1eda6XNr6fMVpc9j3Ocx74sdmfX/v8Ktt7o/5eFUkg1uzvyGGYuTlTVR91JlG6LshmvVlMxxbh6v1trcnPvcjrHKH7mfrO/ek0Zftai/19y/aT3Pv2kZRU6bWsv/f4fSRXA2ycYKPNayDiUTrbDJk8g68Pvy/6Qar65RNh7q2jqJ6llPV9dQb+eQqZt9WWf/YF931tU92NNn+kx3X/eBzr56faivq6+3f7C/N+vPuupDZri7vz7sZI27dFmmJCsbj8OYfVBCuow6l0mju4m60RFSnvQTmqx9EELaKI2+KhPSRrkwITWTkwhp9DFCSG3KmPbzBLkwISGTyJeQ2oB6TRBOcqNPRUjMoU5yLThZRHIzwYiz3c1XqrWLIc62Jr4qE2ebXJg4m8lJxDn6GCHOdueI/POV7rM0MR7y2rmsS038oeFzw7QLjkSuxGEMRkjtkghJE9JEN3eotURIGJlBCGmiFAmpQ/iEhCCRnJAmCo6QOiQ+QkLq3ERdlOxOouwCIU1y82S1djGENEYafVUmpDFyYUJqJicR0uhjhJAmOePknyc3uSiakHQSeRLS8CTBEdJk4SQ3+vnWVTg9h3US2Vv+q9w8RcIVEKZIDKQa7pQ31c3T1Fo65WFkBiHVqVI85U0T/ilPJ5HvKW+q4MhqGg5jsFNeqmgWCelqN09Xa6miiZEZhJCsA3VFc7pcuICQ+Q1oRfNqwRHSdAlPSJdR5zJpmCbqUggJTcrI07kmtxlunqnWUnUUI7NAblUOiJwYZ0ix0mqDYkCKA02UQBxmpuBI5xoPvYZLI7fnNcqeaJK0dpxOkPsGzj8ZAHfD5jhZxS0S98eqhbupv2cS5H4cjDsfnrzRsJEjeeMNoP0+UU37lYcBxrcBxoxh2a8GzpMZQFmzgPYL9ZSgRvKTQPU0GQO75Z5ZcF2LB/PZbp6j1tJjUIzMcwfzWIIiPzzOluJjVRsY+gsQDCzow8UnJY7NcQ4Q87VAvYD2G7kpuTbCOJor2DiKBfe8iuO28TSXgPtTZNy+JSPLzfMIuD9dUdy5fnNIuD8jcewTwLg0QF8bpP1C3VDMJvlcoHqG64OY7+YFai3dAGBkBik7zpfigX2B8PsgdBL5bmrzBUfoC4ST3OiNZyFOz2GdaLapbKGbF0m45rJFkkhVk+piNy9Ra4lUMTKDkOpiKZLqEuGTqk4iX1JdLDiyWiKc5EY/Kp8FlLUU6NfUUEeT3XAtTcLL3LxcraWGOozMICRsHagb6para5SNh7o2sqFumeAIaTkOY7CGOg+dy6SB/K7Vh6KhboWbV6q11FCHkRldQ90KKTbU2aAYkOKockPdSsGRznUeeo3WUHedcBvqlhPkvonzD62hbgUB92erhbupv1cS5H4OjDsf4Ia6TiRvvAm03+erab/yMMD4NsCYMSz7oZ8SrADKWgW0X6inBK0kPwlUT15D3Sq4rsWD+Wo3r1Fr6dEvRiatoY4RFPnhcbUUHyXbwGA2Qq0S/OHiCxLH5rgGiPl6oF5A+43clFwfYRxlgo2jWHCbiuO2eZgRcH+RjNu3TGa52RBwf6miuHP91pBwf1ni2CeAcWmAvjZI+4W6oVhN8rlA9QzX+5GXKupqLd0AYGQGKTt2SvHAXhd+74dOIt9NrVNwhF4XTnKjN54unJ4jDXX5a2K63Nwt4RrquiWRqibVHjf3qrVEqhiZQUi1R4qk2it8UtVJ5EuqPYIjq17BJjeafOyvyTG+VvaVCHAvJeD+qnDIHP02kj6gLYG+Niz7oUtLq4Cy+oH2Y+SK5YcFhFy5QarNERb3EgLuG4G4U8MxTXbDtfQh9SY3r1VrqeEYIzPIIdU6UDccr1XXKBsPdW1kw/FNgiOktRKekC6jzmXSqDdRl0JIsTQcr3PzerWWGo4xMqNrOF4nxYZjGxQDUhxVbjheLzjS2eCh12gNxxuE23C8liD3LZx/aA3H6wi4v1Yt3E39vZ4g9+tg3PkANxzXkbzxFtB+36im/crDAOPbAGPGsOyHfiq0DihrAGg/KwN91rBPwPoEzzXfFC7HZn7DWMz9BNzfkjAc4avnRqAtgb42LPuhOWIAKGuTVJ8jbiDkyrel2hzRT8L9HYmDI24G2hLoa4O2HyNfbiTEzXcjyBcG7u9JHPlyC9CWQF8btP0Y+VInxM2tEeDuJeC+DYg7VSZpshuuVVMyb3fzZrWWKpMYmUEqk9aBujK5WeKqTN4uOELaLOEJ6TLqXCaNribqfqQrk1vcvFWtpcokRmZ0lcktUqxM2qAYkOKocmVyq+BI5w4PvUarTN4h3MrkZoLct3H+oVUmtxBw/6BauJv6eytB7g/BuPMBrkx2IXnjbaD9flRN+5WHAca3AcaMYdkPXXXYApR1J9B+Vgb6rGH3rI2C55ofC5djM79hLOZNBNw/kTAc4avnXUBbAn1tWPZDc8SdQFnbpPoccTMhV34q1eaITSTcP5M4OOJuoC2BvjZo+zHy5RZC3Pw8gnxh4P6FxJEv9wBtCfS1QduPkS+3EuLmlxHkCwP3rySOfLkXaEugrw3afox8uY0QN7+OIF8YuH8jceTLfUBbAn1tkPZLnRA02Q3XqimZ97t5u1pLnRAYmUE6IawDdSfEdnWNsvFQ10Z2QtwvOKLcLvERko/O5aJkE3WjI6Qdbt6p1lL3AkZmEELaIcWOg53CJySdRL6EtENwhLRTcMkdqjXLQ2cmaVxUaxaiEn+Jejborcltl5t3q7VEbhiZ523NqlJA5MS4S4pEaYNiQIoDfSuJxLEbqNcDgiOG3J4PyOitWZnfONeitNPfP01bn1A23QmU9Vuc7RCPiBp8PlnlEzJf3qkW7vI4Fy+7Cbh/B8adD3S+7AJiRvLZ7wPZL/MbBpjX5h2g/f4Qif2AeWKAMWM87Hfeg3ZNvPL3vOcRX1kPAu3HxIzkrIeAmEM98aoJJ7cFqifnjYs2Rh+C61r8/s8eN+9Va+ndABiZlDcusoIivxHaI8V3DdjAYL0pL8eCPpD+USSKA8FeIOaHgXoB7Tfy3aeHI4yjRwQbR7Hg3ldx3DaeHiHg/hMZt+97VCw37yPg/nNFcef67SXh/ovEsU8A49IAfW2Q9gt1Q7GH5HOB6hnu5WCDbt6v1tINAEZmkBL6oBQP7PuF/3IwnUS+m9qg4Ah9v3CSG73xHMDpOawTzb5p8YCbhyTcGxeHJJGqJtW8ueqgWkukipEZhFSHpUiqB4VPqjqJfEl1WHBkdRCHMXVu82Q3XEsT0qNuPqTWUuc2RmYQQrIO1J3bh9Q1ysZDXRvZuf2o4AjpkMRHSD46fxg7tw+7+YhaS82NGJlBCOmwFBsSjwifkHQS+RLSYcER0hHBJXeozm0PncukYZqoSyEkRv0EJKtQVD/q5mNqLZEbRib1RzWRAZET41EpEqUNigEpDjRRIrubjgmOdB4THFHm9nxMeD+qae14hCD3XZx/KD+q+aCKWyTuv1YLd1N/HyPI/RsYdz7AP6oJ5Y13gfb7ezXtVx4GGN8GGDOGZb8aOE+OAmUdB9ov1FOCVpKfBKonr9v1OFzX4sH8hJtPqrVUl8HIpHW7MoIiPzyekGKdxwYGs0vxuOAPF/+QODbHk0DMjwP1Atpv5Kbk8Qjj6AnBxlEsuJ+sOG6bh08QcP+TjNu3hm25+UkC7n9VFHeu30kS7n9LHPsEMC4N0NcGab9QNxQnSD4XqJ7hGrOecvMptZZuAN4fmecIUna0DtQH9lPCb8zSSeS7qT0lOEI/JZzkRm88T+P0HOl2tT62Xa5Pu/kZCdft+owkUtWketrNZ9RaIlWMzCCkelqKpHpG+KSqk8iXVE8LjqzOCDa50eRjv++5X/Ak/axwSA1dIjgOlHUW6BeWrw8SfP1cxWPcvjfpLgLu/1Qct8W8jYD7PeHkNvoHB58H2hLoa4O2HzpuLCc+S4ibWku1cVvMZwm4W1viyJcXgLYE+tq0Vjxu7P5yNyFuxlYc9zYS7nGR5MuLQFsCfW3GVTxu7P7yHCFuJlQc91kS7vZI8uUloC2BvjbtEewv9xDipiOC/YWBe1Ik+fIy0JZAX5tJEewvpwhx84pUnyfuJeCeEgFPMHBPjYQnXgXaEuhrMzUCnjhDiJvXpPo8cR8B9/QIeIKBe0YkPPE60JZAXxuW/cq1osxvdAJ/BQbyshVXr9zHyBWr3/OEXJlVcY6wXcEvEHDPjiPGDdA/RmP2jPFOVoy/SPD13Ahi/CUC7nmRxDjQP2ZeC85+rBh/meDrhRHE+CsE3IsiiXGgf8wiHI93s2L8VYKvl0YQ468RcC+LJMaB/jHLcDHew4rx15UtQbr26yZa6x97z2l7Ne23DXVTaz7+C+fClmbkLwEA
H4sIAAAAAAAA/+1dS2wdVxn+fBOndhI7ThPn1TZpkyZN0jaZ4+trX7dNGztt3UectE3aJm1eduLbJm3S9P1QgQ0CFsACAQuQgAVIIIEELEACqUgggUSBFQIWBTYIWIAEEkgggYATztyemTt2msz3TedUc6To5B7Z//zf//jO67/j1V1A3//+2Wa7mut7vM+11OcFqc8LU5+73efu/4tt9/7vL3TjC9y/dHMqYbfro3zNLOLJijLUvVzZRii741k1T+YVru/xxnpdH/vctkWeP2I/Wd/9B52+6vL+X3M/s2Cen+maQ06vNxb/fr+nC3g2iRaBHmtRvyeTrbCJk8g68A28nVQ93jPSxmM920+iejQyPDw7OjRr6mY6GhqbaTai4cbMSNM0TaPZODXUrNdnm8PN0bGZsdFoLBquz5pWY6zecrKuuHxZJiUr6uFhjN4pIb2LOqdJo5GhbnCEFCf94oyxd0JIE+j0VZqQJnBxQsqSUxHS3K1NSL2eMe3nxbg4ITGTKC8h9RL1WgxNcrNXRUzMRa3kuniyhORmCiPOJa5f6o1dCnH2ZvgqTZy9uDhxZsmpiHPu1ibOJc4R8eel7jMyjMd8dizrchN/tnWhmSXgkchSHsbCCGkJKkLyCanP9f3eWEVIHJmFEFIfkoTUDz0hMUgkJqQ+8AipH+ERElPnDHVZsoeEshOEtMz1A97YpRBSNzp9lSakblyckLLkVIQ0d2sT0jJnnPjzQMZD2YTkJ1FOQmotA4+QBqBJbvb51nKeni0/ieyWf7nrr0RxFwhXIgRSLW6Vt8L1K72xapXHkVkIqa5AcpW3EvpVnp9EeVd5K8Ajq5U8jCFeIJgMdVmy551konzNMCdDn9wGXb/KG6suIzgyE+RW5oCIiXEQyYsNGxTjSDY2URJxmFXgkc7qHHq1Ui2252rPngqSHBDIfZ3nn4iAu+Mya8CLWybu95ULd+buaJVA7vvJuOOWkzc6JnImb7xOtN8Hymm/dDPE+DbEmDEq+9XIeTJIlLWGaL+iTglqIj+BqqeJFNgt96yh65pcmK91/TpvrDp14Mi8sDAPJSjixeNaJE8xbGD49cYKLOzFxQcRxuS4joj5KqJeRPu1NyVXBRhHV4MbR6HgvqbkuG08XS3A/SEx7rwntJabrxHg/nBJccf6rRPh/gjCmCeIcWmIvjZM+xW1oVgr8jmoehZ37bje9Ru8sWoDwJFZyLXjeiQX7Bugv3b0kyjvpLYePELfAE1ysyeea3l6tvxEs6fz17r+OhRXy3EdKlL1SXWj6zd5YxWpcmQWQqobkSTVTdCTqp9EeUl1I3hktQma5GYfla8hyrqe6NcA61eYlcTvifqVza7f4o1V9SscmcHVr2xGsn7FBsU4kq3M9StbwCOdG3LoNVf9yg2g1a9k1nFsBp98PwruJKmo49gikPsxMm5S/nRMaGWt4/h4Oe2XboYY34YYM0ZlP/bidDNR1lai/Yo6IVgg8hOoeurqOLbSdU0uULe5frs3Vp04cGTK6jgUQREvorYheYJhA0N5/74V/MXFJxDG5LidiPlGol5E+7UX5zcGGEc3gRtHoeC+ueS4bR7eJMD9STHuvKezlptvFuD+VElxx/ptF+H+NMKYJ4hxaYi+Nkz7FbWh2CbyOah6FnfluMP1O72xagPAkVnIleMOJBfsO6G/cvSTKO+ktgM8Qt8JTXKzJ56Ip2e7jiN+GXjkeoPi6jgMKlL1STW+B617YxWpcmQWQqpDSJJqHXpS9ZMoL6kOgUdWdXCTm00+9p0him8zfCYA3NcLcH8WGjJnv3N6mGhLoq+Nyn7sq6WtRFkNov0UuWL5YYMgV0ZQbo6wuDcJcI8ScQdY51bPUJclO8g6t6brx7yxqs6NIzO4OrcmknVuNijGkWxlrnMbA490bsmh11x1brdAW+fWBJ98PwftRMmocxsTyP08GTcpfzomtLLWuX2hnPZLN0OMb0OMGaOyH3sz0iTKupVoPyuDPefajdcw+FzzRWg5NsrXjMXcEOD+EorhiLx63ka0JdHXRmU/NkfcSpS1C+XniBFBrnwZ5eaIhgj3VxAGR9xOtCXR14ZtP0W+jAri5qsB5IsC99cQRr7cQbQl0deGbT9FvuwUxM3uAHDXBbjHibgDPBAfzlCXJTvIA/H4IHqPN1YdiHNkBncgPoHkgbgNipAOxPeARzp35tBrrgPxO6E9EJ8An3y/Du1EyTgQ3yOQ+w0yblL+dExoZT0Q/2Y57ZduhhjfhhgzRmU/9mHXBFHWXUT7WRnsOdce7N0GPtd8C1qOjfI1YzHvEuD+NorhiLx63k20JdHXRmU/NkfcRZQ1ifJzxO2CXPkOys0Ru0S4v4swOOIeoi2JvjZs+yny5Q5B3LwRQL4ocH8PYeTLvURbEn1t2PZT5MtuQdx8P4B8UeD+AcLIl/uItiT62rDtp8iXcUHc/DCAfFHg/hHCyJf7ibYk+tow7VfU16ZzXMB1nIVnqCu5gMspu+NZNU/mXtdPeWPVpRlHZiFfm96L5EXXlPeMtPFYz/aTKO9lz17wiHIKvOQuqiIgh85K0rikigDGxddl6tmht09u+1y/3xuryI0jc96KgDIFREyM+5AkShsU40g29sqNiWM/Ua8HwCOG2J4PYO6KgChfu1ARMJXfP5mVBiybThFl/ZhnO8aOrMPnA14+MfPlzXLhTrcL8bJfgPsnZNxxY+fLPiJmJp/9tCD7RfmaIea1eZNov58FYj9inhhizJgc9pt3oV3Ll7/zrkfyynqQaD8lZiZnPUTEXNSJVw2a3AZVT82fc7Ax+hBd12TZ+QHXH/TGqhcPcmRK/pyDKijijdABJF9kaAND9Rr+GAt7QfpzIIgFwUEi5oeJehHt1y65fzjAOHoE3DgKBfejJcdt4+kRAe5fiHHnfUmr5eZHBbh/WVLcsX4HRbh/hTDmCWJcGqKvDdN+RW0oDoh8Dqqexb15/JDrD3tj1QaAI7OQK/RDSC7YD0P/5nE/ifJOaofAI/TD0CQ3e+J5jKdny080W9rwmOsfR3F/zuFxVKTqk+oR1x/1xipS5cgshFSPIEmqR6EnVT+J8pLqEfDI6igPY1UomWpE2R3P8gnpmOuPe2NVLRFHZiGEdAzJ+p/j3jPSxmM9m1koeQw8QjoOXnIXVSiZQ+c0aZgMdSWEpDiuJMlK3GGdcP20N1aRG0em9NVJzICIifEEkkRpg2IcycYmSmYxwTR4pDMDHlHG9pwB7dVJmUUZxwVy3+L5h3G+3TE5PujFLRP3r8uFO9Pf0wK5vyHjjhv5lVFU3niLaL/fltN+6WaI8W2IMWNU9quR8+QEUdZJov2KOiVYAI2fQNVTV1x2kq5rcmF+yvWz3lh1DMqRKSsuUwRFvHg8heSxqg0MZVHQSfAXF79DGJPjLBFzi6gX0X7tTUkrwDh6Atw4CgX3kyXHbfPwCQHu34tx570ystz8pAD3H0qKO9ZvVoT7jwhjniDGpSH62jDtV9SG4pTI56DqWVwdxGnXn/HGqg0AR2Yh146nkVywn4G+DsJPoryT2mnwCP0MNMnNnnie4unZLi6zPrbXwU+5/mkUV1z2NCpS9Un1rOvPeWMVqXJkFkKqZ5Ek1XPQk6qfRHlJ9Sx4ZHUO3ORmk4/9etVh8En6GWhIjX1FcJIo6zzRLypfHxX4+tmSx7j9qwB3C3D/qeS4LeZJAe4/Q5Pb7Pd7PUe0JdHXhm0/dtxYTnxGEDd/KTlui/m8APdfEUa+PE+0JdHXhm0/xfxyjyBu/lZy3JMi3H9HGPnyAtGWRF8btv0U88uzgrj5R8lxnxfh/ifCyJcXibYk+tqw7aeYX+4VxM2/So57UoT73wgjX14i2pLoa8O2n2J+OSOIm5dLjtvyxH0C3FZgmXFPinB3dYXBE68QbUn0tekqedxYnjgniJtXUX6euF+Ae2EAPKHA3R0IT7xGtCXR10Zlv/RdUZSvDS0i2m+A4Fd3XzmtyBWr33OCXOkpOUfYquDnBbh7w4hxQ/SP8THnjPEhVYy/IPD10gBi/EUB7r5AYpzoH9PXxbOfKsZfEvh6IIAYf1mAe3kgMU70j1nO4/GGKsZfEfh6ZQAx/qoA92AgMU70jxnkxfiIKsZf82xJ0nXML6K1/rF7Tlurab9t6Be1xu2/OWsJU5YRAQA=
Binary file not shown.
Original file line number Diff line number Diff line change
@@ -1 +1 @@
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
Binary file not shown.

Large diffs are not rendered by default.

Binary file not shown.
Original file line number Diff line number Diff line change
@@ -1 +1 @@
H4sIAAAAAAAA/+2Z8W6CMBDGr+JEQcFsr7AHaCko/Gd8kxnxMfdqLsSynRVZXL+ymHCJOTnler1yv3zRNyJ6p4tNzKs1YfzOeOlmSuByyYDV3LyfmveC7UOw68C6nrL9tRZ43K+Wmzyvt1mttPqQWXUoC5kXh02pSlWUxTErta7LvNxWh2orK5XrWp2KSp9Msgkw1yvwHPr699c669PFAlyu4xR4rsj+BaxvXQZaRwNzKzvgsW7FefRi/IzFFsZzdrWfC9bb5vzP7D7BvGA5zuyeru+IO3kWLNben1i17oyXjjYjOJtlQrc8hIKwaW5zgJ/0A+EZW4PYIfC1Hxx8acFOvRAOnDNcT/S9wRdu+0fW7HPQ/w0iofFzFnsEInu6PSsbInv6HSJdeUaI3LdviIR0reTmdAsRlBLpGiJXIIXAuubkZwDREApxz0FvndLN1ARY56js+tfiUG7BF3XERmXnZoNAuWkSV3YR+Vd2C8IBKsL1ZDBl51CzPeiqo9yng0hs/JLFRmWHyTkIRGK6VnZL8q/sIsIBKQbWtSQ/w42GUIx7DrwqO8Rvie2eR2XXvxaH8sr4hMVGZYfJOQiUmwPkyi4h/8puRbhhTXA9GUzZOdRsD3rWUe7TQSQ1fs1io7LD5BwEIildK7s1+Vd2CeGAlALrWpOf4UZDKMU9B16VHfCfXSmsGrl9AYlpLr8qIQAA
H4sIAAAAAAAA/+2Y8W6CMBDGr6IgYtwL7CFaClr+M77JjPiYezUXZtmOWlwcH5omXGIOTnv9euf9Qngjone62sx+WhPW762Xw0wJXC4ZMc3N9dxeC3YOwe4j537OztdaNOJ5tdwWRb3La6XVh8yroyllUR63RhlVmvKUG61rU5hddax2slKFrtW5rPTZJpsBc22AfbhXv//qrM9Xi3C5TnNgX5H1i1jdfAbaRwNzKzcwom7FebSwPmax1HrOrvZ7wWrb9P/C1gnmBctxYWt8vxE9eVIWa9dvHK176+VAiwnO5m8muDyEgrApbtPAT/qFcMz2INYEvveDgy8d2KkF4cAZ42qi+wZfDDs/UvOYg/4yiCTWL1nsEYgc6LZXLkQO9DdEfHkmiPTbD0QS6j7JLekWIqgnEd8QDQVSAtS1pHEGEA2hBPc/uKtTDjM1A+oMEPDKIzc4wLcQXXliE+CH2VMAn1IX8CsKC/ApUNeKxhluNIRSCgPwiFcK7ZkDBHzukRsc4DPr1yw2AR6T8ymAz6gL+DWFBfgMqGtN4ww3GkIZhQF44HteKRyN3L4ApjXdCjgZAAA=
Binary file not shown.
Loading

0 comments on commit 78a57fc

Please sign in to comment.